Укажите «пунктирные» метки k8s для пулов узлов? - PullRequest
2 голосов
/ 26 июня 2019

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 Ответ

1 голос
/ 26 июня 2019

Я подтвердил предложение @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.

...