維護 Kubernetes 叢集

建立 Kubernetes 叢集後,您可以使用 GDC 上的 GKE,透過 Google Distributed Cloud (GDC) 實體隔離方案管理叢集。這項服務可讓您因應不斷變化的容器工作負載需求,並透過下列工作流程維護現有的叢集節點:

本文適用於平台管理員群組中的 IT 管理員,他們負責管理託管於多個專案叢集中的容器工作負載,以及應用程式操作員群組中的開發人員,他們負責在單一專案中建立應用程式工作負載。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。

事前準備

如要完成本文件中的工作,您必須要求必要權限並準備環境。

要求 IAM 角色

您必須具備特定角色,才能取得維護 Kubernetes 叢集所需的權限。所需角色取決於您是在組織範圍的共用叢集,還是專案範圍的標準叢集內作業。詳情請參閱「Kubernetes 叢集設定」。

共用叢集角色

如要查看及維護共用的 Kubernetes 叢集及其資源,請要求 IAM 機構組織管理員根據要執行的工作,授予您下列角色:

  • 專案建立者 (project-creator):建立或查看專案資源。必須具備這個角色,才能將共用叢集附加至專案。

  • 專案編輯者 (project-editor):刪除、更新或查看專案資源。必須具備這個角色,才能將共用叢集與專案中斷連結。

  • 使用者叢集檢視者 (user-cluster-viewer):查看共用叢集及其資源。這個角色可讓您存取管理 API 伺服器中託管的共用叢集管理層 API。

這些角色不會繫結至專案命名空間。

標準叢集角色

如要查看標準 Kubernetes 叢集及其資源,請要求 IAM 專案管理員授予標準叢集檢視者 (standard-cluster-viewer) 角色。這個角色可存取管理 API 伺服器中託管的標準叢集管理層 API。

這個角色會繫結至專案命名空間。

準備環境

如要使用 API 對 Kubernetes 叢集執行指令,請確認您具備下列資源:

  • 找出 Kubernetes 叢集名稱,或向平台管理員群組成員詢問叢集名稱。

  • 請使用 Kubernetes 叢集名稱取代這些操作說明中的 CLUSTER_NAME。

  • 登入並產生管理 API 伺服器的 kubeconfig 檔案。

  • 請使用 Management API 伺服器的 kubeconfig 路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER。

在專案階層中移動叢集

專案可將服務執行個體進行邏輯群組。您可以從 GDC 專案階層中新增及移除共用 Kubernetes 叢集,適當分組服務。標準叢集僅限於單一專案,因此無法在專案階層中移動。

將專案附加至共用叢集

從 GDC 控制台建立共用叢集時,必須至少附加一項專案,才能成功將容器工作負載部署至該叢集。如需在現有叢集中新增其他專案,請完成下列步驟:

控制台

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」。
  2. 在叢集清單中,按一下叢集名稱,開啟「Cluster details」(叢集詳細資料) 頁面。
  3. 選取「附加專案」。
  4. 在可用專案清單中,按一下要附加至叢集的專案名稱。
  5. 按一下 [儲存]。

API

  • 為叢集建立新的 ProjectBinding 自訂資源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
    • CLUSTER_NAME:叢集名稱。
    • PROJECT_NAME:要將叢集繫結至的專案名稱。每個 ProjectBinding 資源只能對應至一個叢集。如果專案需要存取多個叢集,則必須為每個叢集建立專屬的 ProjectBinding。

Terraform

  1. 在 Terraform 設定檔中,插入下列程式碼片段,建立 ProjectBinding 自訂資源:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
    • PROJECT_BINDING_RESOURCE_NAME:專案繫結的 Terraform 資源名稱,例如 CLUSTER_NAME-PROJECT_NAME-binding。Terraform 會使用這個名稱來識別專案繫結,GDC 則不會使用。
    • CLUSTER_NAME:叢集名稱。每個 ProjectBinding 資源只能對應至一個叢集。如果專案需要存取多個叢集,則必須為每個叢集建立專屬的 ProjectBinding。
    • PROJECT_NAME:要繫結的專案名稱。每項 ProjectBinding 資源只能對應至一個叢集。如果專案需要存取多個叢集,則必須為每個叢集建立專屬的 ProjectBinding。
  2. 套用新的專案繫結:

    terraform apply
    

將專案與共用叢集分離

將專案從共用叢集卸載可能會導致重大變更,例如刪除在叢集中執行的工作負載。請務必瞭解將專案從共用叢集卸載的後果,再執行這項操作。

如要從現有的共用叢集卸載專案,請完成下列步驟:

控制台

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」。
  2. 在叢集清單中按一下叢集,開啟「Cluster details」(叢集詳細資料) 頁面。
  3. 按一下 「Detach」(卸離),將專案從叢集卸離。

API

  • 刪除連結專案和叢集的 ProjectBinding 資源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
    • CLUSTER_NAME:叢集名稱。
    • PROJECT_NAME:要從叢集卸載的專案名稱。

Terraform

  • 刪除專案繫結資源:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    將 PROJECT_BINDING_RESOURCE_NAME 替換為要刪除的專案繫結 Terraform 資源名稱,例如 CLUSTER_NAME-PROJECT_NAME-binding。Terraform 會使用這個名稱來識別專案繫結,GDC 則不會使用。

查看專案或組織中的所有叢集

您可以查看專案或組織中所有可用的 Kubernetes 叢集,包括狀態、Kubernetes 版本和其他詳細資料。

Kubernetes 叢集是可用區資源,因此只能依可用區列出叢集。

控制台

  1. 在專案挑選器中,選取專案或組織。

    標準叢集的範圍為專案,共用叢集的範圍則為組織。選取正確的範圍,即可查看適當的 Kubernetes 叢集類型。

  2. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」。

    系統會顯示組織中所有可用的共用叢集,以及其狀態和其他資訊:

    「叢集詳細資料」頁面:顯示組織中各個共用叢集的狀態和其他資訊。

gdcloud

  • 列出可用可用區的 Kubernetes 叢集:

    gdcloud clusters list
    

    輸出結果會與下列內容相似:

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

  • 列出可用可用區的 Kubernetes 叢集:

    kubectl get clusters.cluster.gdc.goog -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
    • KUBERNETES_CLUSTER_NAMESPACE:叢集的命名空間。如果是共用叢集,請使用 platform 命名空間。如果是標準叢集,請使用叢集的專案命名空間。

    輸出結果會與下列內容相似:

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

列出叢集可用的 Kubernetes 版本

您可以列出 GDC 可用區中可用的 Kubernetes 版本,確認叢集中可存取的 Kubernetes 功能。

  • 列出可用可用區中的 Kubernetes 版本:

    kubectl get userclustermetadata.upgrade.private.gdc.goog \
        -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
        --kubeconfig MANAGEMENT_API_SERVER
    

    將 MANAGEMENT_API_SERVER 替換為叢集可用區 API 伺服器的 kubeconfig 檔案。

    輸出看起來類似以下內容:

    K8S-VERSION
    1.25.10-gke.2100
    1.26.5-gke.2100
    1.27.4-gke.500
    

查看可更新的屬性

建立 Kubernetes 叢集後,您可以變更一組屬性。您只能變更 Cluster 自訂資源 spec 中的可變動屬性。叢集佈建完成後,spec 中的部分屬性無法更新。如要查看這些可更新的屬性,請完成下列步驟:

控制台

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」。

  2. 在 Kubernetes 叢集清單中,按一下叢集名稱即可查看其屬性。

  3. 可編輯的屬性會顯示「編輯」圖示 。

API

  • 查看 Cluster 規格的屬性清單,以及各屬性對應的有效值:

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig MANAGEMENT_API_SERVER
    

    將 MANAGEMENT_API_SERVER 替換為可用區 API 伺服器的 kubeconfig 路徑。

    輸出結果會與下列內容相似:

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDC air-gapped version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDC maintains the cluster versions for
        users. Optional. Mutable.
    

    如要更新這些設定,請使用 GDC 控制台或 kubectl CLI。例如,您可以調整節點集區的大小。

後續步驟