Настройка канала выпуска GKE с терраформированным кластером

# #terraform #google-kubernetes-engine

Вопрос:

В соответствии с ЭТОЙ документацией прямо здесь я могу установить канал выпуска в кластере. И все же это совсем не работает. Он «видит», что параметр присутствует во время сводки о применении, но в конечном итоге он фактически не применяется к новому кластеру. Чего мне не хватает? В документации нет примеров, приведенных в документации, поэтому мне остается только догадываться. В консоли я вижу это:

введите описание изображения здесь

Не установлен, даже не могу установить его вручную:

введите описание изображения здесь

Я пытаюсь настроить его на БЫСТРЫЙ

   release_channel {
    channel = "RAPID"
  }
 

Вот мой полный TF:

 resource "google_container_cluster" "standard-cluster" {
  enable_binary_authorization = false
  enable_kubernetes_alpha     = false
  enable_legacy_abac          = false
  enable_shielded_nodes       = false
  initial_node_count          = 0
  location                    = local.ws_vars["zone"]
  logging_service             = "logging.googleapis.com/kubernetes"
  monitoring_service          = "monitoring.googleapis.com/kubernetes"
  name                        = local.ws_vars["cluster-name"]
  network                     = "projects/${local.ws_vars["project-id"]}/global/networks/${local.ws_vars["environment"]}"
  project                     = local.ws_vars["project-id"]
  subnetwork                  = "projects/${local.ws_vars["project-id"]}/regions/us-east4/subnetworks/${local.ws_vars["environment"]}"
  
  release_channel {
    channel = local.ws_vars["channel"]
  }            
  
  ip_allocation_policy {
    #cluster_ipv4_cidr_block = local.ws_vars["cidr-block"]
    cluster_secondary_range_name  = "subnet-pods"
    services_secondary_range_name = "subnet-services"
  }

  addons_config {

    horizontal_pod_autoscaling {
      disabled = false
    }

    http_load_balancing {
      disabled = false
    }

    network_policy_config {
      disabled = false
    }
  }

  database_encryption {
    state = "DECRYPTED"
  }

  maintenance_policy {
    daily_maintenance_window {
      start_time = "01:00"
    }
  }

  network_policy {
    enabled  = true
    provider = "CALICO"
  }

  node_pool {
    initial_node_count = 1
    name               = "scoped-two-cpu-high-mem-preemptible"
    node_locations = [
      local.ws_vars["zone"],
    ]

    autoscaling {
      max_node_count = 30
      min_node_count = 0
    }

    management {
      auto_repair  = true
      auto_upgrade = true
    }

    node_config {
      disk_size_gb      = 100
      disk_type         = "pd-standard"
      guest_accelerator = []
      image_type        = "COS"
      labels            = {}
      local_ssd_count   = 0
      machine_type      = "n1-highmem-4"
      metadata = {
        "disable-legacy-endpoints" = "true"
        workload_metadata_config   = "GKE_METADATA_SERVER"
      }
      oauth_scopes = [
        "https://www.googleapis.com/auth/devstorage.read_only",
        "https://www.googleapis.com/auth/logging.write",
        "https://www.googleapis.com/auth/monitoring",
        "https://www.googleapis.com/auth/ndev.clouddns.readwrite",
        "https://www.googleapis.com/auth/service.management.readonly",
        "https://www.googleapis.com/auth/servicecontrol",
        "https://www.googleapis.com/auth/trace.append",
      ]
      preemptible     = true
      service_account = "default"
      tags            = []
      taint           = []

      shielded_instance_config {
        enable_integrity_monitoring = true
        enable_secure_boot          = false
      }
    }

    upgrade_settings {
      max_surge       = 1
      max_unavailable = 0
    }
  }

  private_cluster_config {
    enable_private_endpoint = false
    enable_private_nodes    = true
    master_ipv4_cidr_block  = "172.16.0.0/28"
  }

  vertical_pod_autoscaling {
    enabled = true
  }

  workload_identity_config {
    identity_namespace = "${local.ws_vars["project-id"]}.svc.id.goog"
  }
}
 

Ответ №1:

Я думаю, что ключ в сообщении об ошибке, которое выдает вам графический интерфейс. Установка канала выпуска на «БЫСТРЫЙ» сегодня означала бы переход на GKE 1.20, который на 2 основные версии новее, чем ваш кластер, и об этом, похоже, не сообщается.

Что произойдет, если вы установите его на «СТАБИЛЬНЫЙ» ? Это все еще 1.18 и не должно не сработать.

Комментарии:

1. Ответом была проблема как с файлом состояния, так и с GKE. Установка его на стабильный приводила как к ошибкам, так и к регулярным. Поддерживаются только определенные версии, что означает, что вы должны установить минимальную поддерживаемую версию для канала. Это противоречит цели терраформирования, так как вам придется обновлять терраформу каждый раз, когда вы хотите создать кластер, и поддерживаемая версия изменилась.

Ответ №2:

Ответ состоял из двух частей:

  1. Файл состояния имел набор версий, который ранее поддерживался, но больше не поддерживался. Версия продолжала устанавливаться на эту ранее поддерживаемую версию, и поэтому БЫСТРАЯ настройка не могла вступить в силу.
  2. Для правильной настройки канала GKE требуется минимальная настройка версии, соответствующая одной из этих поддерживаемых версий. Это противоречит цели терраформирования и инфраструктуры как кода, поскольку в конечном итоге придется изменить эту версию в терраформе, чтобы применить канал. Это всегда означает дрейф в TF. Это очевидный недостаток GKE. В идеале он должен просто установить версию на то, что поддерживается.