維護叢集

Google Distributed Cloud air-gapped 裝置 (GDC) 可讓您在建立 Kubernetes 叢集後進行管理,以因應不斷變化的容器工作負載需求。

執行節點維護作業

如要維修或維護節點,請先將節點設為維護模式。如將節點設為維護模式,系統會以安全的方式清空 Pod/工作負載,並從 Pod 排程中排除節點。在維護模式下,您可以處理節點,而且不會有 Pod 流量中斷的風險。

運作方式

GDC 的維護模式與針對特定節點執行 kubectl cordonkubectl drain 類似。以下是與維護模式相關的幾項詳細資訊:

  • 系統會將指定的節點標示為不可排程。這項操作由 kubectl cordon 執行。
  • 系統會將節點 taint 新增至指定節點,表示節點上無法排程或執行任何 Pod。這項操作與 kubectl drain 類似。
  • 系統會強制執行 20 分鐘的逾時設定,確保節點不會因等待 Pod 終止而停滯。如果 Pod 設定為容許所有汙點,或有終結器,可能不會終止。GDC 叢集會嘗試終止所有 Pod,但如果超過逾時時間,節點就會進入維護模式。這項逾時設定可避免執行中的 Pod 阻礙升級。
  • 如果節點上執行以 VM 為基礎的工作負載,GDC 叢集會將 NodeSelector 套用至虛擬機器執行個體 (VMI) Pod,然後停止該 Pod。NodeSelector 可確保節點從維護模式移除時,VMI Pod 會在同一節點上重新啟動。

讓節點進入維護模式

在叢集設定檔的 maintenanceBlocks 區段中,為所選節點指定 IP 位址範圍,選擇要進入維護模式的節點。所選節點必須處於 Ready 狀態,且在叢集中運作。

如要讓節點進入維護模式,請按照下列步驟操作:

  1. 編輯叢集設定檔,選取要進入維護模式的節點。

    您可以使用所選的編輯器編輯設定檔,也可以執行下列指令,直接編輯叢集自訂資源:

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
    

    更改下列內容:

    • CLUSTER_NAMESPACE:叢集的命名空間。
    • CLUSTER_NAME:叢集名稱。
  2. maintenanceBlocks 區段新增至叢集設定檔,為要進入維護模式的節點指定單一 IP 位址或位址範圍。

    下列範例說明如何指定 IP 位址範圍,選取多個節點:

    ...
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    ...
    
  3. 儲存並套用更新後的叢集設定:

    kubectl apply -f my-cluster.yaml
    

    套用叢集設定後,叢集會將適用的節點設為維護模式。

  4. 執行下列指令,取得叢集中節點的狀態:

    kubectl get nodes -n CLUSTER_NAME
    

    回應內容如下所示:

    NAME                STATUS                     ROLES    AGE     VERSION
    user-gdch-01        Ready                      master   2d22h   v1.23.5-gke.1502
    user-gdch-04        Ready                      none     2d22h   v1.23.5-gke.1502
    user-gdch-05        Ready,SchedulingDisabled   none     2d22h   v1.23.5-gke.1502
    user-gdch-06        Ready                      none     2d22h   v1.23.5-gke.1502
    

    SchedulingDisabled 狀態表示節點處於維護模式。

  5. 執行下列指令,取得處於維護模式的節點數量:

    kubectl get nodepools
    

    回應類似下列輸出內容:

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    這個範例中的 UNDERMAINTENANCE 欄顯示一個節點處於維護模式。

    叢集也會在節點進入維護模式時,將下列汙點新增至節點:

  • baremetal.cluster.gke.io/maintenance:NoExecute
  • baremetal.cluster.gke.io/maintenance:NoSchedule

調整節點集區大小

GDC 環境中的任何使用者叢集都可以調整節點集區大小,以因應工作負載變化。如要在使用者叢集中管理節點集區,您必須具備「使用者叢集管理員」 (user-cluster-admin) 角色。

如要調度現有叢集中的節點集區,請完成下列步驟:

主控台

  1. 在資訊主頁中,選取要編輯的叢集所在專案。
  2. 在導覽選單中,選取「叢集」
  3. 選取節點集區相關聯的叢集名稱。「叢集詳細資料」頁面隨即顯示。
  4. 按一下「節點集區」分頁標籤。
  5. 選取要調整大小的節點集區的「編輯」圖示,系統會顯示「編輯節點集區」提示。
  6. 更新「節點數量」欄位,反映節點集區中所需的新節點數量。您可以增加或減少節點數量,以符合工作負載需求。

  7. 按一下 [儲存]

  8. 返回叢集的「節點集區」分頁,確認調整大小後的節點集區狀態為 Ready,且節點數量正確無誤。節點集可能需要幾分鐘的時間,才能根據您的規格進行調整。

    使用控制台確認節點集區是否已準備就緒。

API

  1. 使用互動式編輯器,透過 kubectl CLI 開啟 Cluster 自訂資源規格:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
          --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    
  2. 更新要調整大小的節點集區的 nodeCount 欄位:

    nodePools:
    ...
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    NUMBER_OF_WORKER_NODES 換成要在節點集區中佈建的更新工作站節點數量。

  3. 儲存檔案並結束編輯器。

  4. 檢查節點集區的設定,確認節點擴縮作業已完成:

    kubectl get clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform -o json \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG | jq .status.workerNodePoolStatuses
    

    確認 readyNodes 數字反映您為節點集區設定的節點數量。節點集區可能需要幾分鐘的時間,才能按照您的規格調整大小。

查看機構中的所有叢集

您可以查看機構中的所有可用使用者叢集,包括狀態、Kubernetes 版本和其他詳細資料。

主控台

  • 在導覽選單中,選取「叢集」

    系統會顯示機構中所有可用的叢集,以及這些叢集的狀態和其他資訊:

    叢集詳細資料頁面,顯示機構中每個使用者叢集的狀態和其他資訊。

kubectl

  • 列出機構中可用的使用者叢集:

    kubectl get clusters.cluster.gdc.goog -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

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

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

查看可更新的屬性

建立每個使用者叢集後,您都可以變更一組屬性。您只能變更 Cluster 自訂資源中的可變更屬性。spec叢集佈建完成後,並非所有 spec 中的屬性都可更新。如要查看這些可更新的屬性,請完成下列步驟:

主控台

  1. 在導覽選單中,選取「叢集」

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

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

kubectl

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

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig ORG_ADMIN_CLUSTER_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 GDCH 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, GDCH maintains the cluster versions for
        users. Optional. Mutable.
    

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

調整 Ingress 服務 IP 位址大小

建立使用者叢集後,您可以調整 Ingress 服務 IP 位址大小。

  1. 使用互動式編輯器,透過 kubectl CLI 開啟 Cluster 自訂資源規格:

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  2. 將「ingressServiceIPSize」欄位更新為新的 IP 位址大小:

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    INGRESS_SERVICE_IP_SIZE 替換為更新後的 Ingress 服務 IP 位址大小。

  3. 儲存檔案並結束編輯器。

沒有設定 Ingress 服務 IP 位址大小的限制。我們會根據貴機構的需求,提供您要求的 IP 位址數量。如果無法完成要求,叢集會回報錯誤。