可以透過變更節點數目水平調整 TKG 服務叢集,或透過變更主控節點的虛擬機器類別垂直調整該叢集。還可以調整附加到叢集節點的磁碟區。

支援的手動調整作業

下表列出了 TKG 叢集支援的調整作業。
表 1. 支援的 TKGS 叢集調整作業
節點 水平擴充 水平縮小 垂直調整 磁碟區縮放
控制平面 是*
Worker
請謹記以下考量事項:
  • 控制平面節點數目必須為奇數 (1 或 3)。支援擴充控制平面,但不支援縮小控制平面。請參閱擴充控制平面
  • 垂直調整叢集節點時,由於缺少可用資源,工作負載可能已無法在節點上執行。因此,水平調整通常是慣用方法。請參閱擴充 Worker 節點
  • 虛擬機器類別是不可變的。如果在編輯 TKG 叢集所使用的虛擬機器類別後對該叢集進行擴充,則新的叢集節點會使用更新的類別定義,但現有叢集節點會繼續使用初始類別定義,從而造成不相符情況。請參閱關於虛擬機器類別
  • worker 節點磁碟區可在佈建後變更;如果使用的是 vSphere 8 U3 或更高新版本以及相容的 TKr,則同樣可以變更控制平面節點。請參閱調整叢集節點磁碟區

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

若要調整 TKG 叢集,請使用命令 kubectl edit CLUSTER-KIND/CLUSTER-NAME 更新叢集資訊清單。儲存資訊清單變更時,將透過變更來更新叢集。請參閱為 Kubectl 設定文字編輯器

例如:
kubectl edit tanzukubernetescluster/tkg-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
若要取消變更,請關閉編輯器而無需儲存。
kubectl edit tanzukubernetescluster/tkg-cluster-1
Edit cancelled, no changes made.

擴充控制平面

可以透過將控制平面節點數目從 1 個增加到 3 個來擴充 TKG 叢集。
備註: 生產叢集需要 3 個控制平面節點。
  1. 登入 主管
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空間 中執行的 Kubernetes 叢集。

    使用下列語法:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如,對於 v1alpha3 API 叢集:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    例如,對於 v1beta1 API 叢集:
    kubectl get cluster -n tkg-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    TKG 叢集具有 1 個控制平面節點和 3 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    1               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    對於 v1beta1 API 叢集:

    kubectl get cluster tkg-cluster-1
  5. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。
    對於 v1alpha3 API 叢集:
    kubectl edit tanzukubernetescluster/tkg-cluster-1
    對於 v1beta1 API 叢集:
    kubectl edit cluster/tkg-cluster-1

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

  6. 在資訊清單的 spec.topology.controlPlane.replicas 區段中將控制平面節點數目從 1 個增加到 3 個。
    對於 v1alpha3 API 叢集:
    ...
    spec:
      topology:
        controlPlane:
          replicas: 1
    ...
    
    ...
    spec:
      topology:
        controlPlane:
          replicas: 3
    ...
    
    對於 v1beta1 API 叢集:
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 1
        variables:
    ...
    
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 3
        variables:
    ...
    
  7. 在文字編輯器中儲存檔案以套用變更。(若要取消,請關閉編輯器而無需儲存。)

    儲存資訊清單變更時,kubectl 會將變更套用至叢集。在背景中,主管 上的 虛擬機器服務 會佈建新的控制平面節點。

  8. 確認是否已新增節點。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    擴充的控制平面現在有 3 個節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    對於 v1beta1 API 叢集:

    kubectl get cluster tkg-cluster-1

擴充 Worker 節點

可以透過增加 worker 節點數目來擴充 TKG 叢集。

  1. 登入 主管
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空間 中執行的 Kubernetes 叢集。

    使用下列語法:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如,對於 v1alph3 API 叢集:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    例如,對於 v1beta1 API 叢集:
    kubectl get cluster -n tkg-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    例如,以下叢集具有 3 個控制平面節點和 3 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    
    對於 v1beta1 API 叢集:
    kubectl get cluster tkg-cluster-1
  5. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。

    對於 v1alpha3 API 叢集:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    對於 v1beta1 API 叢集:
    kubectl edit cluster/tkg-cluster-1

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

  6. 可以透過編輯目標 worker 節點集區的 spec.topology.nodePools.NAME.replicas 值來增加 worker 節點數目。
    對於 v1alpha3 API 叢集:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    對於 v1beta1 API 叢集:
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 3
    ...
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 4
    ...
  7. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。

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

  8. 確認是否已新增節點。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    擴充後,叢集有 4 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    對於 v1beta1 API 叢集:

    kubectl get cluster tkg-cluster-1

縮小 Worker 節點

可以透過減少 worker 節點數目來縮小 TKG 叢集。

  1. 登入 主管
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空間 中執行的 Kubernetes 叢集。

    使用下列語法:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如,對於 v1alph3 API 叢集:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    例如,對於 v1beta1 API 叢集:
    kubectl get cluster -n tkg-cluster-ns
  4. 取得目標叢集中正在執行的節點數目。
    kubectl get tanzukubernetescluster tkg-cluster-1
  5. 取得目標叢集中正在執行的節點數目。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    例如,以下叢集具有 3 個控制平面節點和 4 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.24.9---vmware.1-tkg.4   5d12h   True
    
    對於 v1beta1 API 叢集:
    kubectl get cluster tkg-cluster-1
  6. 載入叢集資訊清單,以使用 kubectl edit 命令進行編輯。

    對於 v1alpha3 API 叢集:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    對於 v1beta1 API 叢集:
    kubectl edit cluster/tkg-cluster-1

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

  7. 可以透過編輯目標 worker 節點集區的 spec.topology.nodePools.NAME.replicas 值來減少 worker 節點數目。
    對於 v1alpha3 API 叢集:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    對於 v1beta1 API 叢集:
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 4
    ...
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 3
    ...
  8. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。

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

  9. 確認是否已移除 worker 節點。

    對於 v1alpha3 API 叢集:

    kubectl get tanzukubernetescluster tkg-cluster-1
    縮小後,叢集有 3 個 worker 節點。
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    對於 v1beta1 API 叢集:

    kubectl get cluster tkg-cluster-1

垂直調整叢集

主管 上的 TKG 支援叢集控制平面和 worker 節點的垂直調整。可以透過變更用於叢集節點的虛擬機器類別來垂直調整 TKG 叢集。您使用的虛擬機器類別必須繫結到佈建了 TKG 叢集的 vSphere 命名空間

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

  1. 登入 主管
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間
    kubectl config use-context tkg-cluster-ns
  3. 列出在 vSphere 命名空間 中執行的 Kubernetes 叢集。

    使用下列語法:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    例如,對於 v1alph3 API 叢集:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    例如,對於 v1beta1 API 叢集:
    kubectl get cluster -n tkg-cluster-ns
  4. 說明目標 TKG 叢集並檢查虛擬機器類別。

    對於 v1alpha3 API 叢集:

    kubectl describe tanzukubernetescluster tkg-cluster-1

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

    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: best-effort-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: best-effort-medium
          ...
    

    對於 v1beta1 API 叢集:

    kubectl describe cluster tkg-cluster-1

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

    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  best-effort-medium
        ...
    備註: 對於 v1beta1 API 叢集,依預設會將 vmClass 全域設定為單一變數。您可以覆寫此設定,為控制平面和 worker 節點使用不同的虛擬機器類別。請參閱 API 參考中的 vmClass
  5. 列出並說明可用的虛擬機器類別。
    kubectl get virtualmachineclass
    kubectl describe virtualmachineclass
    備註: 虛擬機器類別必須繫結到 vSphere 命名空間。請參閱 對 TKG 服務 叢集使用虛擬機器類別
  6. 開啟以編輯目標叢集資訊清單。

    對於 v1alpha3 API 叢集:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    對於 v1beta1 API 叢集:
    kubectl edit cluster/tkg-cluster-1

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

  7. 變更虛擬機器類別以編輯資訊清單。
    對於 v1alpha3 API 叢集,將控制平面的虛擬機器類別變更為 guaranteed-medium,並將 worker 節點的虛擬機器類別變更為 guaranteed-large
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-large
          ...
    
    對於 v1beta API 叢集,將虛擬機器類別變更為 guaranteed-large
    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  guaranteed-large
        ...
  8. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。

    儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管 上的 TKG 將對 TKG 叢集執行輪流更新。

  9. 確認 TKG 叢集已使用新的虛擬機器類別進行了更新。

    對於 v1alpha3 API 叢集:

    kubectl describe tanzukubernetescluster tkg-cluster-1

    對於 v1beta1 API 叢集:

    kubectl describe cluster tkg-cluster-1

調整叢集節點磁碟區

在節點的 TKG 叢集規格中,可以選擇為節點宣告一或多個持續性磁碟區。宣告節點磁碟區對於頻繁變換的元件非常有用,例如 worker 節點上的容器執行階段和 kubelet。

如果要在建立叢集後新增或變更一或多個節點磁碟區,請謹記以下考量事項:
磁碟區節點 說明

允許變更 worker 節點磁碟區

佈建 TKG 叢集後,可以新增或更新 worker 節點磁碟區。起始輪流更新時,叢集將使用新磁碟區或變更的磁碟區進行更新。

警告: 如果使用新磁碟區或變更的磁碟區擴展 worker 節點,則在輪流更新期間將刪除目前磁碟區中的資料。請參閱下列說明。

為 TKG 叢集節點宣告的磁碟區會被視為暫時磁碟區。TKG 叢集會在 vSphere 命名空間中使用持續性磁碟區宣告 (PVC),以便根據 TKG 叢集的儲存區配額計算磁碟區容量。如果增加 TKC 磁碟區的容量,則 Kubernetes 叢集 API (CAPI) 將推出具有新 PVC 的新 worker 節點。在此情況下,TKG 不會執行任何資料移轉,但 Kubernetes 會相應地 (重新) 排程工作負載網繭。

如果使用的是 vSphere 8 U3 或更新版本,則允許進行控制平面節點磁碟區變更

如果使用的是 vSphere 8 U3 或更新版本以及相容的 Tanzu Kubernetes 版本,則可以在佈建 TKG 服務叢集後新增或更新控制平面節點磁碟區。

如果使用的不是 vSphere 8 U3 或更新版本,則 Kubernetes 叢集 API (CAPI) 禁止對 spec.toplogy.controlPlane.volumes 進行建立後變更。

如果在建立叢集後嘗試新增或變更控制平面磁碟區,請求將遭拒,並顯示錯誤訊息 [不允許更新不可變欄位]。

以下是基於包含所宣告節點磁碟區的 v1alpha3 API 的叢集規格摘錄。請根據需要參閱包含此摘錄的完整 TKG 叢集範例:v1alpha3 範例:具有預設儲存區和節點磁碟區的 TKC。如需 v1beta1 API 叢集範例,請參閱 v1beta1 範例:以預設 ClusterClass 為基礎的自訂叢集

apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TanzuKubernetesCluster
...
spec:
   topology:
     controlPlane:
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-medium
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
     nodePools:
     - name: worker-nodepool-a1
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-large
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
       volumes:
       - name: containerd
         mountPath: /var/lib/containerd
         capacity:
           storage: 50Gi
       - name: kubelet
         mountPath: /var/lib/kubelet
         capacity:
           storage: 50Gi
     - name: worker-nodepool-a2
       ...
   settings:
     ...