gpt4 book ai didi

kubernetes - 与依赖提供者进行地形改造

转载 作者:行者123 更新时间:2023-12-02 12:05:15 25 4
gpt4 key购买 nike

在我的 Terraform 基础架构中,我根据参数启动了几个 Kubernetes 集群,然后使用 kubernetes 提供程序将一些标准内容安装到这些 Kubernetes 集群。

当我更改参数并且不再需要其中一个集群时,terraform 无法将其拆除,因为提供程序和资源都在模块中。但是,我没有看到替代方案,因为我在同一个模块中创建了 kubernetes 集群,而 kubernetes 对象都是每个 kubernetes 集群。

我能想到的所有解决方案都涉及向我的 Terraform 配置添加一堆样板。我应该考虑从脚本生成我的 Terraform 配置吗?


我制作了一个 git 存储库,它准确地显示了我遇到的问题:

https://github.com/bukzor/terraform-gke-k8s-demo

最佳答案

长话短说

两种解决方案:

  1. 使用 Terraform 创建两个独立的模块
  2. 在创建 Kubernetes 集群的代码和 kubernetes 资源之间使用插值和 depends_on:

    resource "kubernetes_service" "example" {
    metadata {
    name = "my-service"
    }

    depends_on = ["aws_vpc.kubernetes"]
    }

    resource "aws_vpc" "kubernetes" {
    ...
    }

销毁资源时

您遇到了依赖生命周期问题

PS:我不知道您用来创建/配置 Kubernetes 集群的代码,但我猜它看起来像这样

  1. 为 Kubernetes 集群编写代码(创建 VPC)
  2. 应用它
  3. 编写配置 Kubernetes 的代码(创建创建 ELB 的服务)
  4. 应用它
  5. 尝试摧毁一切=>错误

发生的事情是通过创建一个 LoadBalancer Service , Kubernetes 会在 AWS 上提供一个 ELB。但是 Terraform 不知道这一点,并且创建的 ELB 与 Terraform 管理的任何其他资源之间没有链接。因此,当 Terraform 试图破坏代码中的资源时,它会尝试破坏 VPC。但它不能,因为在那个 VPC 中有一个 terraform 不知道的 ELB。首先要确保 Terraform“取消配置”Kubernetes 集群,然后销毁集群本身。

这里有两种解决方案:

  1. 使用不同的模块,因此没有依赖生命周期。例如,第一个模块可以是 k8s-infra,另一个可以是 k8s-resources。第一个管理 Kubernetes 的所有 squeleton,首先应用/最后销毁。第二个管理集群内部的内容,最后应用/首先销毁。

  2. 使用 depends_on显式写入依赖生命周期的参数

创建资源时

terraform apply 无法创建资源时,即使尚未应用任何资源,您也可能会遇到依赖性问题。我将用 postgres 给出另一个例子

  1. 编写代码创建 RDS PostgreSQL 服务器
  2. 将其应用于 Terraform
  3. 在同一模块中编写代码,以使用 postgres terraform 提供程序配置该 RDS 实例
  4. 将其应用于 Terraform
  5. 摧毁一切
  6. 尝试应用一切 => 错误

通过稍微调试 Terraform,我了解到所有提供程序都在 plan/apply 开始时初始化,因此如果配置无效(错误的 API keys/unreachable endpoint) 那么 Terraform 将会失败。

这里的解决方案是使用 target parameter plan/apply 命令。Terraform 只会初始化与所应用的资源相关的提供程序。

  1. 通过 AWS 提供商应用 RDS 代码:terraform apply -target=aws_db_instance
  2. 应用所有内容terraform apply。由于 RDS 实例已经可达,PostgreSQL 提供程序也可以自行启动

关于kubernetes - 与依赖提供者进行地形改造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com