【问题标题】:Terraform - staggered provider populationTerraform - 交错的提供者群体
【发布时间】: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


【解决方案1】:

原来digitalocean_kubernetes_cluster 资源有一个属性可以像这样传递给provider "kubernetes" {}

resource "digitalocean_kubernetes_cluster" "k8s" {
  name    = "k8s"
  region  = "${var.region}"
  version = "1.12.1-do.2"

  node_pool {
    name       = "woker-pool"
    size       = "s-1vcpu-2gb"
    node_count = 1
  }
}

provider "kubernetes" {
  host = "${digitalocean_kubernetes_cluster.k8s.endpoint}"

  client_certificate     = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_certificate)}"
  client_key             = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_key)}"
  cluster_ca_certificate = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate)}"
}

它导致一个提供者依赖另一个提供者,并采取相应的行动。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2021-03-08
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多