如何 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_cluster
和 google_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 个选项:
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.
地球改造者 (GitHub Repo)
A CLI tool that generates tf/json and tfstate files based on existing infrastructure (reverse Terraform).
此工具与提供者无关,并遵循 terraform 的流程,即 plan
和 import
。它能够导入整个工作区的特定资源并将其转换为 *.tf
个文件。
目前我们将 kubernetes 集群主机设置为区域性,并要求它是区域性的。我的想法是将现有集群和所有 workloads/nodes/resources 转换为一些基础设施即代码——最好是 terraform(但可以像一组 gcloud
命令一样简单)。
我知道使用 GCP 我可以为即将执行的命令生成原始命令行 运行,但我不知道如何(或者如果我可以)将现有基础架构转换为相同的。
根据我的研究,[以直截了当的方式] 似乎完全不可能做我想做的事情。所以我正在寻找任何建议,即使只是阅读一些其他文档(对于我可能不熟悉的工具)。
TL;DR:我正在寻找现有的 Google Cloud Platform Kubernetes 集群并重建它,以便将位置类型从区域更改为主 - 我实际上并不关心这是怎么回事完毕。目前公认的最佳实践方法是什么?如果没有,有什么快速而肮脏的方法可以做到这一点?
如果您需要我进一步说明,我会 - 我故意省略了与我所做的具体研究的链接。
使用 Terraform 创建 Kubernetes 集群非常简单,因为最终在 GKE 中创建 Kubernetes 集群非常简单,您只需使用 google_container_cluster
和 google_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 个选项:
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.
地球改造者 (GitHub Repo)
A CLI tool that generates tf/json and tfstate files based on existing infrastructure (reverse Terraform).
此工具与提供者无关,并遵循 terraform 的流程,即
plan
和import
。它能够导入整个工作区的特定资源并将其转换为*.tf
个文件。