Kubernetes 如何将现有谷歌云平台基础设施转换/迁移到terraform或其他IaC

Kubernetes 如何将现有谷歌云平台基础设施转换/迁移到terraform或其他IaC,kubernetes,google-cloud-platform,terraform,google-kubernetes-engine,infrastructure-as-code,Kubernetes,Google Cloud Platform,Terraform,Google Kubernetes Engine,Infrastructure As Code,目前,我们将kubernetes集群主节点设置为zonal,并要求它是区域性的。我的想法是将现有集群和所有工作负载/节点/资源转换为代码形式的基础设施,最好是terraform(但可以像一组gcloud命令一样简单) 我知道,使用GCP,我可以为即将运行的命令生成原始命令行,但我不知道如何(甚至不知道是否可以)将现有基础设施转换为相同的基础设施 根据我的研究,看起来我不可能(以一种直截了当的方式)去做我想做的事情。所以我正在寻找任何建议,即使只是为了阅读一些其他文档(可能是为了一个我不熟悉的工具

目前,我们将kubernetes集群主节点设置为zonal,并要求它是区域性的。我的想法是将现有集群和所有工作负载/节点/资源转换为代码形式的基础设施,最好是terraform(但可以像一组
gcloud
命令一样简单)

我知道,使用GCP,我可以为即将运行的命令生成原始命令行,但我不知道如何(甚至不知道是否可以)将现有基础设施转换为相同的基础设施

根据我的研究,看起来我不可能(以一种直截了当的方式)去做我想做的事情。所以我正在寻找任何建议,即使只是为了阅读一些其他文档(可能是为了一个我不熟悉的工具)

TL;DR:我正在寻找我现有的Google云平台Kubernetes集群,并重建它,以便将位置类型从区域更改为主位置-我实际上不在乎如何实现。目前公认的最佳做法是什么?如果没有,什么是快速而肮脏的方法


如果您要求我进一步说明,我会-我故意忽略了与我所做的特定研究的链接。

使用地形创建Kubernetes群集非常简单,因为最终在GKE中创建Kubernetes群集非常简单,您只需使用
google\u container\u集群
google\u container\u node\u pool
资源,如下所示:

resource "google_container_cluster" "primary" {
  name               = "${var.name}"
  region             = "${var.region}"
  project            = "${var.project_id}"
  min_master_version = "${var.version}"

  addons_config {
    kubernetes_dashboard {
      disabled = true
    }
  }

  maintenance_policy {
    daily_maintenance_window {
      start_time = "03:00"
    }
  }

  lifecycle {
    ignore_changes = ["node_pool"]
  }

  node_pool {
    name = "default-pool"
  }
}

resource "google_container_node_pool" "default" {
  name    = "default"
  project = "${var.project_id}"
  region  = "${var.region}"
  cluster = "${google_container_cluster.primary.name}"

  autoscaling {
    min_node_count = "${var.node_pool_min_size}"
    max_node_count = "${var.node_pool_max_size}"
  }

  management {
    auto_repair  = "${var.node_auto_repair}"
    auto_upgrade = "${var.node_auto_upgrade}"
  }

  lifecycle {
    ignore_changes = ["initial_node_count"]
  }

  node_config {
    machine_type = "${var.node_machine_type}"

    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform",
    ]
  }

  depends_on = ["google_container_cluster.primary"]
}
为了获得更全面的体验,我们提供了地形模块,如

转换现有集群要困难得多。如果要使用
terraform导入

terraform import google_container_cluster.mycluster us-east1-a/my-cluster
然而,在您的评论中,您提到希望将一个带状集群转换为一个区域集群。不幸的是,在这个时候

创建时,您可以决定簇是分区簇还是区域簇 信息技术不能将现有分区簇转换为区域簇,反之亦然 反之亦然

在我看来,你最好的选择是:

  • 使用terraform创建一个区域集群,并为集群命名
  • 备份您现有的分区群集,可以使用etcd备份,也可以使用
  • 将该备份恢复到您的区域群集

使用terraform创建Kubernetes集群非常简单,因为最终在GKE中创建Kubernetes集群非常简单,您只需使用
google\u container\u集群
google\u container\u node\u池
资源,如下所示:

resource "google_container_cluster" "primary" {
  name               = "${var.name}"
  region             = "${var.region}"
  project            = "${var.project_id}"
  min_master_version = "${var.version}"

  addons_config {
    kubernetes_dashboard {
      disabled = true
    }
  }

  maintenance_policy {
    daily_maintenance_window {
      start_time = "03:00"
    }
  }

  lifecycle {
    ignore_changes = ["node_pool"]
  }

  node_pool {
    name = "default-pool"
  }
}

resource "google_container_node_pool" "default" {
  name    = "default"
  project = "${var.project_id}"
  region  = "${var.region}"
  cluster = "${google_container_cluster.primary.name}"

  autoscaling {
    min_node_count = "${var.node_pool_min_size}"
    max_node_count = "${var.node_pool_max_size}"
  }

  management {
    auto_repair  = "${var.node_auto_repair}"
    auto_upgrade = "${var.node_auto_upgrade}"
  }

  lifecycle {
    ignore_changes = ["initial_node_count"]
  }

  node_config {
    machine_type = "${var.node_machine_type}"

    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform",
    ]
  }

  depends_on = ["google_container_cluster.primary"]
}
为了获得更全面的体验,我们提供了地形模块,如

转换现有集群要困难得多。如果要使用
terraform导入

terraform import google_container_cluster.mycluster us-east1-a/my-cluster
然而,在您的评论中,您提到希望将一个带状集群转换为一个区域集群。不幸的是,在这个时候

创建时,您可以决定簇是分区簇还是区域簇 信息技术不能将现有分区簇转换为区域簇,反之亦然 反之亦然

在我看来,你最好的选择是:

  • 使用terraform创建一个区域集群,并为集群命名
  • 备份您现有的分区群集,可以使用etcd备份,也可以使用
  • 将该备份恢复到您的区域群集

我想要实现的正是:利用现有的云基础设施,将其作为代码(IaC)引入基础设施,即将其放入
*.tf
文件中

我发现并考虑了两个基本选项:

  • 地形导入
    ()

    由于以下限制,
    terraform import
    没有完全实现我想要的,因为它需要手动创建资源

    Terraform导入的当前实现只能将资源导入状态。它不生成配置。Terraform的未来版本也将生成配置

    因此,在运行terraform导入之前,需要手动写入资源的资源配置块,导入的对象将映射到该块

  • 地形形成器()

    一种CLI工具,可基于现有基础结构(反向地形)生成tf/json和tfstate文件

    此工具与提供商无关,并遵循terraform流程,即
    计划
    导入
    。它能够将特定资源导入整个工作区,并将其转换为
    *.tf
    文件


  • 我想实现这一点:将现有的云基础设施作为代码(IaC)引入基础设施,即将其放入
    *.tf
    文件中

    我发现并考虑了两个基本选项:

  • 地形导入
    ()

    由于以下限制,
    terraform import
    没有完全实现我想要的,因为它需要手动创建资源

    Terraform导入的当前实现只能将资源导入状态。它不生成配置。Terraform的未来版本也将生成配置

    因此,在运行terraform导入之前,需要手动写入资源的资源配置块,导入的对象将映射到该块

  • 地形形成器()

    一种CLI工具,可基于现有基础结构(反向地形)生成tf/json和tfstate文件

    此工具与提供商无关,并遵循terraform流程,即
    计划
    导入
    。它能够将特定资源导入整个工作区,并将其转换为
    *.tf
    文件


  • 我不是特别问如何创建一个。我问的是如何将现有的基础设施转换为代码。这是一个相当大的基础设施