【发布时间】:2019-07-08 06:34:45
【问题描述】:
过去一周我一直在考虑使用 Terraform 实施 Kubernetes,但我似乎遇到了生命周期问题。
虽然我可以使 Kubernetes 资源依赖于正在启动的集群,但 KUBECONFIG 文件不会在 terraform apply 中间更新。
kubernete
resource "kubernetes_service" "example" {
...
depends_on = ["digitalocean_kubernetes_cluster.example"]
}
resource "digitalocean_kubernetes_cluster" "example" {
name = "example"
region = "${var.region}"
version = "1.12.1-do.2"
node_pool {
name = "woker-pool"
size = "s-1vcpu-2gb"
node_count = 1
}
provisioner "local-exec" {
command = "sh ./get-kubeconfig.sh" // gets KUBECONFIG file from digitalocean API.
environment = {
digitalocean_kubernetes_cluster_id = "${digitalocean_kubernetes_cluster.k8s.id}"
digitalocean_kubernetes_cluster_name = "${digitalocean_kubernetes_cluster.k8s.name}"
digitalocean_api_token = "${var.digitalocean_token}"
}
}
虽然我可以使用 API 拉下 CONFIG 文件,但 terraform 不会使用此文件,因为 terraform plan 已经在运行
我见过一些使用三元运算符 (resource ? 1 : 0) 的示例,但除了 -target 之外,我还没有找到非 count 创建的集群的解决方法
理想情况下,我想用一个 terraform repo 来创建它。
【问题讨论】:
-
这可能最终会成为两个应用两个模块。
-
您可能可以通过将配置器移动到空资源和依赖于集群来做到这一点。在 null-resource 中设置一个触发器,仅当您运行应用时才执行。使用 data.external,您可以找出运行了什么命令,并以不同的方式处理计划和应用。
标签: kubernetes terraform digital-ocean