維護 Kubernetes 叢集

Google Distributed Cloud (GDC) 實體隔離方案可讓您在建立 Kubernetes 叢集後,使用 GKE on GDC 管理叢集。這項服務可讓您因應不斷變化的容器工作負載需求。

事前準備

如要查看及管理 Kubernetes 叢集中的節點集區,您必須具備下列角色:

  • 使用者叢集管理員 (user-cluster-admin)
  • 使用者叢集節點檢視者 (user-cluster-node-viewer)

這類角色不會繫結至命名空間。

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

  1. 找出 Kubernetes 叢集名稱,或詢問平台管理員叢集名稱。

  2. 如果沒有 Kubernetes 叢集的 kubeconfig 檔案,請登入並產生該檔案。

  3. 請使用 Kubernetes 叢集的 kubeconfig 路徑,替換這些操作說明中的 KUBERNETES_CLUSTER_KUBECONFIG

執行節點維護作業

如要維修或維護節點,請先將節點設為維護模式。如將節點設為維護模式,系統會以安全的方式清空 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 edit cluster KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    請替換 Kubernetes 叢集的下列項目:

    • KUBERNETES_CLUSTER_NAME:叢集名稱。
    • KUBERNETES_CLUSTER_NAMESPACE:叢集的命名空間。
    • KUBERNETES_CLUSTER_KUBECONFIG:kubeconfig 檔案的路徑。

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

  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 get nodes -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    回應內容如下所示:

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

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

  4. 取得處於維護模式的節點數量:

    kubectl get nodepools --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    回應類似下列輸出內容:

    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 環境中的任何 Kubernetes 叢集都可以調整節點集區大小,以因應工作負載變化。如要管理 Kubernetes 叢集中的節點集區,您必須具備使用者叢集管理員 (user-cluster-admin) 角色。這個角色不會繫結至命名空間。

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

主控台

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

  7. 按一下 [儲存]

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

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

API

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

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
          --kubeconfig MANAGEMENT_API_SERVER
    

    更改下列內容:

    • KUBERNETES_CLUSTER_NAME:代管節點集區的叢集名稱。
    • MANAGEMENT_API_SERVER:Kubernetes 叢集所在區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 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/KUBERNETES_CLUSTER_NAME -n platform -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

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

在專案階層中移動叢集

專案會提供服務執行個體的邏輯分組。您可以從 GDC 專案階層新增及移除 Kubernetes 叢集,適當分組服務。

將專案附加至叢集

從 GDC 控制台建立叢集時,您必須先附加至少一個專案,才能順利將容器工作負載部署至叢集。如要將其他專案新增至現有叢集,請完成下列步驟:

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」
  2. 在叢集清單中按一下叢集,開啟「叢集詳細資料」頁面。
  3. 選取「附加專案」
  4. 從專案清單中選取要新增的可用專案。按一下「Save」(儲存)

將專案從叢集卸離

如要將專案從現有 Kubernetes 叢集分離,請完成下列步驟:

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」
  2. 在叢集清單中按一下叢集,開啟「叢集詳細資料」頁面。
  3. 按一下「中斷連結」,中斷專案與叢集的連結。

查看機構中的所有叢集

您可以查看機構中的所有可用 Kubernetes 叢集,包括狀態、Kubernetes 版本和其他詳細資料。由於 Kubernetes 叢集是區域資源,因此您只能列出每個區域的叢集。

主控台

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

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

    叢集詳細資料頁面,可查看機構中每個 Kubernetes 叢集的狀態和其他資訊。

kubectl

  • 列出機構中區域可用的 Kubernetes 叢集:

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

    MANAGEMENT_API_SERVER 替換為區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。

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

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

查看可更新的屬性

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

主控台

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

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

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

kubectl

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

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

    MANAGEMENT_API_SERVER 替換為區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 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。例如,您可以調整節點集區的大小

調整 Ingress 服務 IP 位址大小

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

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

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME -n platform \
        --kubeconfig MANAGEMENT_API_SERVER
    

    更改下列內容:

    • KUBERNETES_CLUSTER_NAME:提供 IP 位址的叢集名稱。
    • MANAGEMENT_API_SERVER:Kubernetes 叢集所在區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱登入一文瞭解詳情。
  2. 將「ingressServiceIPSize」欄位更新為新的 IP 位址大小:

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

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

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

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

升級 Kubernetes 叢集

您可以自動或手動升級 Kubernetes 叢集。如需升級叢集的詳細操作說明,請參閱「叢集升級」一節。