buk*_*zor 2 kubernetes terraform terraform-provider-kubernetes
在我的 terraform 基础设施中,我根据参数启动多个 Kubernetes 集群,然后使用 kubernetes 提供程序将一些标准内容安装到这些 Kubernetes 集群中。
当我更改参数并且不再需要其中一个集群时,terraform 无法将其拆除,因为提供程序和资源都在模块中。然而,我没有看到替代方案,因为我在同一模块中创建了 kubernetes 集群,并且 kubernetes 对象都是每个 kubernetes 集群的。
我能想到的所有解决方案都涉及在我的 terraform 配置中添加一堆样板。我应该考虑从脚本生成 terraform 配置吗?
我制作了一个 git 存储库,它准确地显示了我遇到的问题:
两种解决方案:
在创建 Kubernetes 集群的代码和 kubernetes 资源之间使用插值和 dependent_on:
resource "kubernetes_service" "example" {
metadata {
name = "my-service"
}
depends_on = ["aws_vpc.kubernetes"]
}
resource "aws_vpc" "kubernetes" {
...
}
Run Code Online (Sandbox Code Playgroud)您遇到依赖生命周期问题
PS:我不知道您用来创建/配置 Kubernetes 集群的代码,但我猜它看起来像这样
正在发生的事情是,通过创建LoadBalancer 服务,Kubernetes 将在 AWS 上配置 ELB。但 Terraform 不知道这一点,并且创建的 ELB 与 Terraform 管理的任何其他资源之间没有链接。因此,当 terraform 尝试销毁代码中的资源时,它会尝试销毁 VPC。但它不能,因为该 VPC 内有一个 terraform 不知道的 ELB。第一件事是确保 Terraform“取消配置”Kubernetes 集群,然后销毁集群本身。
这里有两个解决方案:
使用不同的模块,因此不存在依赖生命周期。例如,第一个模块可以是k8s-infra
,另一个模块可以是k8s-resources
。第一个管理 Kubernetes 的所有 squeleton,并且先应用/最后销毁。第二个管理集群内部的内容,最后应用/先销毁。
使用depends_on
参数显式编写依赖生命周期
terraform apply
当即使尚未应用任何内容也无法创建资源时,您可能还会遇到依赖性问题。我将给出另一个带有 postgres 的例子
plan
通过调试 Terraform 一点,我了解到所有提供程序都是在/开头初始化的,apply
因此如果一个提供程序有无效的配置(错误的 API 密钥/无法访问的端点),那么 Terraform 将失败。
这里的解决方案是使用/命令的target 参数。Terraform 将仅初始化与所应用的资源相关的提供程序。plan
apply
terraform apply -target=aws_db_instance
terraform apply
。由于 RDS 实例已经可达,因此 PostgreSQL 提供程序也可以自行启动 归档时间: |
|
查看次数: |
4634 次 |
最近记录: |