可以透過變更節點數目水平調整 TKG 服務叢集,或透過變更主控節點的虛擬機器類別垂直調整該叢集。還可以調整附加到叢集節點的磁碟區。
支援的手動調整作業
節點 | 水平擴充 | 水平縮小 | 垂直調整 | 磁碟區縮放 |
---|---|---|---|---|
控制平面 | 是 | 否 | 是 | 是* |
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.
擴充控制平面
- 登入 主管。
kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
- 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間。
kubectl config use-context tkg-cluster-ns
- 列出在 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
- 取得目標叢集中正在執行的節點數目。
對於 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
- 載入叢集資訊清單,以使用
kubectl edit
命令進行編輯。對於 v1alpha3 API 叢集:kubectl edit tanzukubernetescluster/tkg-cluster-1
對於 v1beta1 API 叢集:kubectl edit cluster/tkg-cluster-1
叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。
- 在資訊清單的
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: ...
- 在文字編輯器中儲存檔案以套用變更。(若要取消,請關閉編輯器而無需儲存。)
儲存資訊清單變更時,kubectl 會將變更套用至叢集。在背景中,主管 上的 虛擬機器服務 會佈建新的控制平面節點。
- 確認是否已新增節點。
對於 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 叢集。
- 登入 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間。
kubectl config use-context tkg-cluster-ns
- 列出在 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
- 取得目標叢集中正在執行的節點數目。
對於 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
- 載入叢集資訊清單,以使用
kubectl edit
命令進行編輯。對於 v1alpha3 API 叢集:
kubectl edit tanzukubernetescluster/tkg-cluster-1
對於 v1beta1 API 叢集:kubectl edit cluster/tkg-cluster-1
叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。
- 可以透過編輯目標 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 ...
- 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。
儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管 上的 虛擬機器服務 會佈建新的 worker 節點。
- 確認是否已新增節點。
對於 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 叢集。
- 登入 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間。
kubectl config use-context tkg-cluster-ns
- 列出在 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
- 取得目標叢集中正在執行的節點數目。
kubectl get tanzukubernetescluster tkg-cluster-1
- 取得目標叢集中正在執行的節點數目。
對於 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
- 載入叢集資訊清單,以使用
kubectl edit
命令進行編輯。對於 v1alpha3 API 叢集:
kubectl edit tanzukubernetescluster/tkg-cluster-1
對於 v1beta1 API 叢集:kubectl edit cluster/tkg-cluster-1
叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。
- 可以透過編輯目標 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 ...
- 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。
儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管 上的 虛擬機器服務 會佈建新的 worker 節點。
- 確認是否已移除 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 服務叢集。
- 登入 主管。
kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
- 將內容切換至執行 TKG 叢集所在的 vSphere 命名空間。
kubectl config use-context tkg-cluster-ns
- 列出在 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
- 說明目標 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。 - 列出並說明可用的虛擬機器類別。
kubectl get virtualmachineclass
kubectl describe virtualmachineclass
- 開啟以編輯目標叢集資訊清單。
對於 v1alpha3 API 叢集:
kubectl edit tanzukubernetescluster/tkg-cluster-1
對於 v1beta1 API 叢集:kubectl edit cluster/tkg-cluster-1
叢集資訊清單會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的文字編輯器中開啟。
- 變更虛擬機器類別以編輯資訊清單。
對於 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 ...
- 若要套用變更,請在文字編輯器中儲存該檔案。若要取消變更,請關閉編輯器而無需儲存。
儲存檔案時,kubectl 會將變更套用至叢集。在背景中,主管 上的 TKG 將對 TKG 叢集執行輪流更新。
- 確認 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) 禁止對 如果在建立叢集後嘗試新增或變更控制平面磁碟區,請求將遭拒,並顯示錯誤訊息 [不允許更新不可變欄位]。 |
以下是基於包含所宣告節點磁碟區的 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: ...