【问题标题】:GKE Terraformed Cluster Release Channel SettingGKE Terraformed 集群发布通道设置
【发布时间】:2021-10-03 15:01:39
【问题描述】:

根据THIS documentation 就在这里,我可以在集群上设置发布通道。然而它根本不起作用。它在应用摘要期间“看到”该设置,但它最终并未实际应用于新集群。我错过了什么?文档中没有给出示例,所以我只需要在这里猜测。在控制台中我看到了这个:

没有设置,甚至不能手动设置:

我正在尝试将其设置为 RAPID

  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"
  }
}

【问题讨论】:

    标签: terraform google-kubernetes-engine


    【解决方案1】:

    我认为关键在于 GUI 给你的错误信息。今天将发布通道设置为“RAPID”意味着跳转到 GKE 1.20,这是比您的集群新的 2 个主要版本,这似乎不受支持。

    如果将其设置为 "STABLE" 会发生什么?这仍然是 1.18,应该不会设置失败。

    【讨论】:

    • 答案是状态文件和 GKE 的问题。将其设置为稳定会导致错误和常规错误。仅支持特定版本,这意味着您必须为频道设置最低支持版本。这违背了 terraform 的目的,因为您必须在每次要构建集群并且支持的版本发生变化时更新 terraform。
    【解决方案2】:

    答案分为两部分:

    1. 状态文件有一个以前支持但不再支持的版本集。版本一直设置为以前支持的版本,因此 RAPID 设置无法生效。
    2. GKE 需要与这些受支持版本之一匹配的最低版本设置,才能正确设置通道。这违背了 terraform 和基础设施即代码的目的,因为最终必须在 terraform 中更改此版本才能应用通道。这总是意味着 TF 中的漂移。这是 GKE 的一个明显缺陷。理想情况下,它应该将版本设置为支持的任何版本。

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 2020-07-01
      • 1970-01-01
      • 2019-03-31
      • 2022-01-04
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多