# #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:
Ответ состоял из двух частей:
- Файл состояния имел набор версий, который ранее поддерживался, но больше не поддерживался. Версия продолжала устанавливаться на эту ранее поддерживаемую версию, и поэтому БЫСТРАЯ настройка не могла вступить в силу.
- Для правильной настройки канала GKE требуется минимальная настройка версии, соответствующая одной из этих поддерживаемых версий. Это противоречит цели терраформирования и инфраструктуры как кода, поскольку в конечном итоге придется изменить эту версию в терраформе, чтобы применить канал. Это всегда означает дрейф в TF. Это очевидный недостаток GKE. В идеале он должен просто установить версию на то, что поддерживается.