0

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

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

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

TL;DR:我希望利用我现有的 Google Cloud Platform Kubernetes 集群并重建它,以便将位置类型从区域更改为主 - 我实际上并不关心这是如何完成的。目前公认的最佳实践方法是什么?如果没有,那么一种快速而肮脏的方法是什么?

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

4

2 回答 2

2

使用 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"]
}

为了获得更全面的体验,可以使用类似这样的 terraform 模块

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

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

但是,在您的评论中,您提到想要将区域集群转换为区域集群。不幸的是,目前这是不可能

您在创建集群时决定它是区域性的还是区域性的。您不能将现有的区域集群转换为区域集群,反之亦然。

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

  • 使用 terraform 创建一个区域集群,给集群一个新名称
  • 使用 etcd 备份或更复杂的备份使用heptio-ark备份现有的区域集群
  • 将该备份恢复到您的区域集群
于 2019-01-16T20:45:16.760 回答
0

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

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

  1. terraform import文档

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

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

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

  2. Terraformer(GitHub 存储库

    基于现有基础架构(反向 Terraform)生成 tf/json 和 tfstate 文件的 CLI 工具。

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

于 2021-04-14T08:15:37.730 回答