如何 convert/migrate 现有 google 云平台基础设施到 terraform 或其他 IaC

How to convert/migrate existing google cloud platform infrastructure to terraform or other IaC

目前我们将 kubernetes 集群主机设置为区域性,并要求它是区域性的。我的想法是将现有集群和所有 workloads/nodes/resources 转换为一些基础设施即代码——最好是 terraform(但可以像一组 gcloud 命令一样简单)。

我知道使用 GCP 我可以为即将执行的命令生成原始命令行 运行,但我不知道如何(或者如果我可以)将现有基础架构转换为相同的。

根据我的研究,[以直截了当的方式] 似乎完全不可能做我想做的事情。所以我正在寻找任何建议,即使只是阅读一些其他文档(对于我可能不熟悉的工具)。

TL;DR:我正在寻找现有的 Google Cloud Platform Kubernetes 集群并重建它,以便将位置类型从区域更改为主 - 我实际上并不关心这是怎么回事完毕。目前公认的最佳实践方法是什么?如果没有,有什么快速而肮脏的方法可以做到这一点?

如果您需要我进一步说明,我会 - 我故意省略了与我所做的具体研究的链接。

使用 Terraform 创建 Kubernetes 集群非常简单,因为最终在 GKE 中创建 Kubernetes 集群非常简单,您只需使用 google_container_clustergoogle_container_node_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"]
}

为了获得更全面的体验,可以使用像 this one

这样的地形模块

转换现有集群要复杂得多。如果你想使用 terraform import

terraform import google_container_cluster.mycluster us-east1-a/my-cluster

但是,在您的评论中,您提到想要将区域集群转换为区域集群。可惜,此时that's not possible

You decide whether your cluster is zonal or regional when you create it. You cannot convert an existing zonal cluster to regional, or vice versa.

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

  • 使用 terraform 创建区域集群,为集群命名
  • 备份您现有的区域集群,使用 etcd 备份,或使用 heptio-ark
  • 更复杂的备份
  • 将该备份恢复到您的区域集群

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

我基本上找到并考虑了 2 个选项:

  1. terraform import (Documentation)

    由于以下限制terraform import没有达到我想要的效果,因为它需要手动创建资源。

    The current implementation of Terraform import can only import resources into the state. It does not generate configuration. A future version of Terraform will also generate configuration.

    Because of this, prior to running terraform import it is necessary to write manually a resource configuration block for the resource, to which the imported object will be mapped.

  2. 地球改造者 (GitHub Repo)

    A CLI tool that generates tf/json and tfstate files based on existing infrastructure (reverse Terraform).

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