gpt4 book ai didi

terraform - 为节点池指定 "dotted"k8s 标签?

转载 作者:行者123 更新时间:2023-12-01 19:33:56 24 4
gpt4 key购买 nike

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

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

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

有解决办法吗?

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

更新:如果有人在以后遇到同样的问题,我已经找到了问题的根源。我通过省略 = 错误地将 labels 参数指定为 block 。所以它看起来像这样:

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.

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

最佳答案

我验证了 @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"
}
}
}

编辑:我还验证了 terraform 0.12.3 也同样有效。

关于terraform - 为节点池指定 "dotted"k8s 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56777825/

24 4 0