可以透過變更節點數目水平調整 Tanzu Kubernetes 叢集,或透過變更主控節點的虛擬機器類別垂直調整該叢集。

支援的調整作業

下表列出了支援的 Tanzu Kubernetes 叢集調整作業。
表 1. 支援的 Tanzu Kubernetes 叢集調整作業
節點 水平擴充 水平縮小 垂直調整 磁碟區縮放
控制平面
Worker
請謹記以下考量事項:
  • 垂直調整叢集節點時,由於缺少可用資源,工作負載可能已無法在節點上執行。因此,水平調整可能是慣用方法。
  • 虛擬機器類別是不可變的。如果在編輯 Tanzu Kubernetes 叢集所使用的虛擬機器類別後對該叢集進行擴充,則新的叢集節點會使用更新的類別定義,但現有叢集節點會繼續使用初始類別定義,從而造成不相符情況。請參閱Tanzu Kubernetes 叢集的虛擬機器類別
  • Worker 節點磁碟區在佈建後可以變更,但控制平面節點磁碟區不能。

調整必要條件:設定 Kubectl 編輯

若要縮放 Tanzu Kubernetes 叢集,請使用命令 kubectl edit tanzukubernetescluster/CLUSTER-NAME 更新叢集資訊清單。kubectl edit 命令會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟叢集資訊清單。如需設定環境變數的相關指示,請參閱為 Kubectl 指定預設文字編輯器

儲存資訊清單變更時, kubectl 報告已成功記錄編輯,並且將透過變更來更新叢集。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkgs-cluster-1 edited
若要取消,只需關閉編輯器而無需儲存。
kubectl edit tanzukubernetescluster/tkgs-cluster-1
Edit cancelled, no changes made.

擴充控制平面

可以透過將控制平面節點數目從 1 個增加到 3 個來擴充 Tanzu Kubernetes 叢集。控制平面節點數目必須為奇數。您無法縮小控制平面。
  1. 使用 主管叢集 進行驗證。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 Tanzu Kubernetes 叢集所在的 vSphere 命名空間
    kubectl config use-context tkgs-cluster-ns
  3. 列出命名空間中正在執行的 Kubernetes 叢集。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下叢集具有 1 個控制平面節點和 3 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     1               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。

  6. 找到 spec.topology.controlPlane.count 參數,並將節點數目從 1 個增加到 3 個。
    ...
    controlPlane:
        replicas: 1
    ...
    
    ...
    ControlPlane:
        replicas: 3
    ...
    
  7. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消,請關閉編輯器而無需儲存。

    儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管叢集 上的 虛擬機器服務 會佈建新的工作節點。

  8. 確認是否已新增節點。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    擴充的控制平面現在有 3 個節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

擴充 Worker 節點

可以透過使用 kubectl 增加 worker 節點數目來擴充 Tanzu Kubernetes 叢集。

  1. 使用 主管叢集 進行驗證。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 Tanzu Kubernetes 叢集所在的 vSphere 命名空間
    kubectl config use-context tkgs-cluster-ns
  3. 列出命名空間中正在執行的 Kubernetes 叢集。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下叢集具有 3 個控制平面節點和 3 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。

  6. 找到 spec.topology.workers.count 參數並增加節點數目。
    ...
    workers:
        replicas: 3
    ...
    
    ...
    workers:
        replicas: 4
    ...
    
  7. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消,請關閉編輯器而無需儲存。

    儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管叢集 上的 虛擬機器服務 會佈建新的工作節點。

  8. 確認是否已新增 worker 節點。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    擴充後,叢集有 4 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

縮小 Worker 節點

可以透過減少 worker 節點數目來縮小 Tanzu Kubernetes 叢集。不支援縮小控制平面。

  1. 使用 主管叢集 進行驗證。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 Tanzu Kubernetes 叢集所在的 vSphere 命名空間
    kubectl config use-context tkgs-cluster-ns
  3. 列出命名空間中正在執行的 Kubernetes 叢集。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    例如,以下叢集具有 3 個控制平面節點和 4 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。
    kubectl edit tanzukubernetescluster/tkgs-cluster-1

    叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。

  6. 找到 spec.topology.workers.count 參數並減少節點數目。
    ...
    workers:
        replicas: 4
    ...
    
    ...
    workers:
        replicas: 2
    ...
    
  7. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消,請關閉編輯器而無需儲存。

    儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管叢集 上的 虛擬機器服務 會佈建新的工作節點。

  8. 確認是否已移除 worker 節點。
    kubectl get tanzukubernetescluster tkgs-cluster-1
    縮小後,叢集有 2 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               2        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

垂直調整叢集

可以透過變更用於主控叢集節點的虛擬機器類別來垂直調整 Tanzu Kubernetes 叢集。控制平面和 worker 節點均支援垂直調整。

Tanzu Kubernetes Grid 服務 支援透過服務內建的輪流更新機制垂直調整叢集節點。如果變更 VirtualMachineClass 定義,則服務會推出具有該新類別的新節點,並停止舊節點。請參閱更新 Tanzu Kubernetes 叢集

  1. 使用 主管叢集 進行驗證。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 Tanzu Kubernetes 叢集所在的 vSphere 命名空間
    kubectl config use-context tkgs-cluster-ns
  3. 列出命名空間中正在執行的 Kubernetes 叢集。
    kubectl get tanzukubernetescluster -n tkgs-cluster-ns
  4. 說明目標 Tanzu Kubernetes 叢集並檢查虛擬機器類別。
    kubectl describe tanzukubernetescluster tkgs-cluster-2

    例如,以下叢集使用的是 best-effort-medium 虛擬機器類別。

    Spec:
      ...
      Topology:
        Control Plane:
          Class:          best-effort-medium
          ...
        nodePool-a1:
          Class:          best-effort-medium
          ...
    
  5. 列出並說明可用的虛擬機器類別。
    kubectl get virtualmachineclassbinding
    kubectl describe virtualmachineclassbinding
    備註: 要使用的虛擬機器類別必須繫結到 vSphere 命名空間。請參閱 Tanzu Kubernetes 叢集的虛擬機器類別
  6. 開啟以編輯目標叢集資訊清單。
    kubectl edit tanzukubernetescluster/tkgs-cluster-2

    叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。

  7. 變更虛擬機器類別以編輯資訊清單。
    例如,編輯叢集資訊清單,以對控制平面和 worker 節點使用 guaranteed-large 虛擬機器類別。
    spec:
      topology:
        controlPlane:
          class: guaranteed-large
          ...
        nodePool-a1:
          class: guaranteed-large
          ...
    
  8. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消,請關閉編輯器而無需儲存。

    儲存檔案時,kubectl 會將變更套用至叢集。在背景中,Tanzu Kubernetes Grid 服務會佈建新節點並刪除舊節點。如需輪流更新程序的說明,請參閱關於 Tanzu Kubernetes Grid 服務 叢集更新

  9. 確認叢集是否已更新。
    kubectl get tanzukubernetescluster
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkgs-cluster-ns       test-cluster     3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

縮放節點磁碟區

在節點的 Tanzu Kubernetes 叢集規格中,您可以選擇宣告一或多個持續性磁碟區。宣告節點磁碟區對於頻繁變換的元件非常有用,例如控制平面上的 ectd 資料庫和 worker 節點上的容器執行階段。下面提供了宣告這兩個節點磁碟區的叢集規格摘要,以供參考。(完整的範例叢集規格可從此處取得。)

如果要在建立叢集後新增或變更一或多個節點磁碟區,請謹記以下考量事項:
磁碟區節點 說明
允許變更 worker 節點磁碟區。
佈建 Tanzu Kubernetes 叢集後,可以新增或更新 worker 節點磁碟區。起始輪流更新時,叢集將使用新磁碟區或變更的磁碟區進行更新。
警告: 如果使用新磁碟區或變更的磁碟區擴展 worker 節點,則在輪流更新期間將刪除目前磁碟區中的資料。
不允許變更控制平面節點磁碟區。 佈建 Tanzu Kubernetes 叢集後,無法新增或更新控制平面節點磁碟區。Kubernetes 叢集 API (CAPI) 禁止對 spec.toplogy.controlPlane.volumes 進行建立後變更。如果在建立叢集後嘗試新增或變更控制平面磁碟區,請求將遭拒,並顯示錯誤訊息 [不允許更新不可變欄位]。
spec:
  topology:
    controlPlane:
      replicas: 3
      vmClass: guaranteed-medium
      storageClass: vwt-storage-policy
      volumes:
        - name: etcd
          mountPath: /var/lib/etcd
          capacity:
            storage: 4Gi
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: worker-nodepool-a1
      replicas: 3
      vmClass: guaranteed-large
      storageClass: vwt-storage-policy
      volumes:
        - name: containerd
          mountPath: /var/lib/containerd
          capacity:
            storage: 16Gi