指定节点池的“点” k8s标签?

时间:2019-06-26 17:01:11

标签: terraform google-kubernetes-engine

Kubernetes支持元数据标签键中的点(例如app.role),实际上这似乎是一个常见约定。

terraform配置语言(0.12)不支持参数名称中的点,因此无法指定此形式的标签。例如,在google_container_node_pool配置中,我要指定以下内容:

resource "google_container_node_pool" "my-node-pool" {
  ...
  labels = {
    app.role = web
  }
}

有解决方法吗?

请注意:在k8s标签中,斜杠(/)也很常见。

更新:万一有人偶然发现同一问题,我想出了问题的根源。我通过省略labels错误地将=参数指定为一个块。所以看起来像这样:

labels {
  "app.role" = "web"
}

这产生了以下错误,向我指出了错误的方向:

Error: Invalid argument name

  on main.tf line 45, in resource "google_container_node_pool" "primary_preemptible_nodes":
  45:       "app.role" = "web"

Argument names must not be quoted.

我注意到并修复了丢失的=,但是我并没有将映射键的语法与参数名称的语法放在一起。

1 个答案:

答案 0 :(得分:1)

我验证了@ydaetskcoR的建议,即将标签用引号引起来。这是定义我创建的节点池(使用Terraform v0.11.13)的代码段:

resource "google_container_node_pool" "node_pool" {
  cluster = "${google_container_cluster.cluster.name}"
  zone = "${var.cluster_location}"

  initial_node_count = "${var.node_count}"
  autoscaling {
    min_node_count = 1
    max_node_count = 5
  }
  management {
    auto_repair = true
    auto_upgrade = true
  }
  node_config {
    machine_type = "${var.machine_type}"

    oauth_scopes = [
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
      "https://www.googleapis.com/auth/devstorage.read_only",
    ]

    metadata {
      disable-legacy-endpoints = "true"
    }
    labels = {
      "app.role" = "web"
    }
  }
}

edit:我还验证了terraform 0.12.3的效果。