GKE Terraformed 集群发布通道设置

Posted

技术标签:

【中文标题】GKE Terraformed 集群发布通道设置【英文标题】:GKE Terraformed Cluster Release Channel Setting 【发布时间】: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"
  

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

答案分为两部分:

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

【讨论】:

以上是关于GKE Terraformed 集群发布通道设置的主要内容,如果未能解决你的问题,请参考以下文章

为公共 GKE 集群设置 Cloud NAT

旧光泽的 GKE 集群自动扩缩器配置文件

更改 GKE 集群节点实例类型

如何为私有 GKE 集群启用 Gitlab CI/CD?

GKE 集群的维护时段

使用私有 IP 从不同 VPC 网络中的 GKE 集群连接到 Cloud SQL