請參閱以下指示,根據自訂 ClusterClass 佈建 TKG 叢集。請注意,這些指示特定於 vSphere 8 U2 及更新版本的環境。
必要條件
在 vSphere 8 U2 版本中,更新了基於自訂 ClusterClass 佈建 TKG 叢集的程序。
請遵循以下必要條件。
- vSphere 8 U2+ 環境
- 工作負載管理已啟用
- 主管 已設定
- 安裝了 vSphere 適用的 Kubernetes CLI 工具 的 Ubuntu 用戶端
小心: 根據上游叢集 API
說明文件,自訂 ClusterClass 是一種實驗性 Kubernetes 功能。由於自訂 ClusterClass 可用的自訂範圍,VMware 無法測試或驗證所有可能的自訂。客戶負責測試、驗證其自訂 ClusterClass 叢集以及進行疑難排解。客戶可以開啟有關其自訂 ClusterClass 叢集的支援票證,VMware 支援會盡量提供協助,但無法保證解決針對自訂 ClusterClass 叢集提出的每個問題。在生產環境中部署自訂 ClusterClass 叢集之前,客戶應瞭解這些風險。
高階工作流程
高階工作流程如下所示。
只需使用以下工作流程即可開始。
請參閱以下工作流程,對自訂 ClusterClass 進行變更,並開始對自訂 ClusterClass 叢集節點進行輪流更新。
步驟 | 工作 | 指示 |
---|---|---|
1 | 複製預設 ClusterClass,建立自訂 ClusterClass。 | 1:建立自訂 ClusterClass |
2 | 根據自訂 ClusterClass 佈建新的 TKG 叢集,並確認所有叢集節點均正確啟動。 | 2:根據自訂 ClusterClass 建立 TKG 叢集 |
備註: 以下工作流程中所示的作業只是可以對自訂 ClusterClass 執行的作業範例。您的使用案例可能會有所不同,但一般工作流程應適用。
步驟 | 工作 | 指示 |
---|---|---|
3 | 透過 SSH 登入其中一個 worker 節點,以確認有要更新的套件。 | 3:驗證是否存在套件更新 |
4 | 更新自訂 ClusterClass,在其中新增執行更新的新命令。 | 4:更新自訂 ClusterClass |
5 | 確認更新已經執行的新節點推出。 | 5:驗證叢集節點的輪流更新 |
1:建立自訂 ClusterClass
第一部分涉及透過複製名為
tanzukubernetescluster
的預設 ClusterClass 建立名為
ccc
(
customclusterclass
的縮寫) 的自訂 ClusterClass。
備註: 自訂 ClusterClass 名稱是使用者定義的。如果您使用其他名稱,請相應地調整指示。
- 建立並設定一個名為 ccc-ns 的 vSphere 命名空間。
設定權限、儲存區、內容程式庫和虛擬機器類別。根據需要,請參閱說明文件。
備註: vSphere 命名空間 名稱是使用者定義的。如果您使用其他名稱,請相應地調整指示。 - 登入 主管。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
- 將預設 ClusterClass 的輸出寫入名為 ccc.yaml 的檔案。
kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
或者,捷徑版本:kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
- 開啟以編輯複製的 ClusterClass 檔案。
vim ccc.yaml
- 編輯檔案
ccc.yaml
。- 刪除
metadata.creationTimestamp
一行。 - 刪除
metadata.generation
一行。 - 刪除
metadata.resourceVersion
一行。 - 刪除
metadata.uid
一行。 - 將
metadata.name
值從tanzukubernetescluster
變更為ccc
- 按原樣將
metadata.namespace
值保留:ccc-ns
- 對於
metadata.annotations
,按原樣將run.tanzu.vmware.com/resolve-tkr: ""
值保留。TKR 資料/解決方案需要此註解。
- 刪除
- 儲存並確認變更。
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" name: ccc namespace: ccc-ns spec: ...
- 建立自訂 ClusterClass 物件。
kubectl apply -f ccc.yaml -n ccc-ns
預期的結果:clusterclass.cluster.x-k8s.io/ccc created
- 列出自訂 ClusterClass。
kubectl get cc -n ccc-ns
預期的結果:NAME AGE ccc 3m14s tanzukubernetescluster 29m
2:根據自訂 ClusterClass 建立 TKG 叢集
使用
叢集 v1beta1 API 基於 ClusterClass 建立叢集。
- 構建
ccc-cluster.yaml
資訊清單以佈建叢集。#ccc-cluster.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: ccc-cluster spec: clusterNetwork: pods: cidrBlocks: - 192.0.2.0/16 services: cidrBlocks: - 198.51.100.0/12 serviceDomain: cluster.local topology: class: ccc version: v1.26.5---vmware.2-fips.1-tkg.1 controlPlane: replicas: 1 workers: machineDeployments: - class: node-pool name: tkgs-node-pool-1 replicas: 1 variables: - name: vmClass value: guaranteed-small - name: storageClass value: tkg-storage-profile
其中:metadata.name
值是叢集的名稱:ccc-cluster
spec.topology.class
值是自訂 ClusterClass 的名稱:ccc
spec.topology.version
值是 TKR 版本spec.topology.variables.storageClass
值是持續性儲存區類別的名稱
備註: 對於測試,控制平面和 worker 節點集區使用 1 個複本足以滿足要求。在生產環境中,控制平面使用 3 個複本,每個 worker 節點集區至少使用 3 個複本。 - 根據自訂 ClusterClass 建立 TKG 叢集。
kubectl apply -f ccc-cluster.yaml -n ccc-ns
預期的結果:cluster.cluster.x-k8s.io/ccc-cluster created
- 驗證叢集佈建。
執行下列命令。等待所有叢集節點正確啟動。
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
備註: 在單獨的工作階段中執行此命令會很有幫助,這樣可以在步驟 5 中監控輪流更新進度。
3:驗證是否存在套件更新
透過 SSH 登入其中一個 worker 節點,以確認有要更新的套件。
備註: 此步驟的目的只是確認有要更新的套件,而不是實際進行更新。推出新的叢集節點時,將由自訂 ClusterClass 更新這些套件 (此步驟後的步驟)。此步驟和後續步驟只是可以對自訂 ClusterClass 執行的作業範例。
- 執行下列命令以取得 SSH 密碼。
export CC=ccc-cluster && kubectl get secret -n ccc-ns ${CC}-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d > ${CC}-ssh && chomd 4000 ${CC}-ssh
- 執行以下命令,取得 worker 節點虛擬機器的 IP 位址。
kubectl -n ccc-ns get vm -o wide
備註: 如果您部署了多個工作節點,請選擇一個節點。請勿使用控制平面節點。 - 執行以下命令,透過 SSH 登入 worker 節點虛擬機器。
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
例如:ssh -i ${CC}-ssh [email protected]
備註: 輸入「yes」以繼續連線。預期結果:透過 SSH 登入主機後,您應該會看到以下訊息。tdnf update info not availble yet!
- 執行下列命令並檢查更新。
sudo -i
tdnf update
- 在提示字元中,輸入「N」表示否 (不更新)。
預期的結果:
Operation aborted
備註: 此處的目的只是檢查是否存在更新,而不是起始更新。在下一部分中,將透過向自訂 ClusterClass 新增命令來起始更新。 - 輸入「exit」以登出 SSH 工作階段,然後再次輸入「exit」。
4:更新自訂 ClusterClass
更新自訂 ClusterClass,在其中新增執行 tdnf 更新的新命令。
- 開啟名為
ccc
的自訂 ClusterClass 以進行編輯。kubectl edit cc ccc -n ccc-ns
- 向下捲動至包含
postKubeadmCommands
的以下部分。- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
將以下命令新增到兩個valueFrom.template
欄位中。- tdnf update -y
例如:- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
- 儲存對自訂 ClusterClass 所做的變更並關閉編輯器。
wq
預期的結果:clusterclass.cluster.x-k8s/ccc edited
5:驗證叢集節點的輪流更新
更新自訂 ClusterClass 會觸發對基於該 ClusterClass 佈建的叢集的叢集節點執行輪流更新。套用了上述命令後,會出現新節點。
- 透過執行下列命令來確認叢集佈建。
等待所有叢集節點正確啟動。
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
- 您應該會看到部署了具有新 UUID 的新節點。
- 執行以下命令,透過 SSH 登入 worker 節點虛擬機器。
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
預期結果:透過 SSH 登入主機後,您應該會看到以下訊息。tdnf update info not availble yet!
- 執行下列命令。
sudo -i
tdnf update
預期結果:應該會看到需要更新的套件較少。
- 在提示字元中,輸入「N」表示否 (不更新)。
預期的結果:
Operation aborted
- 執行以下命令以確認 tdnf 已執行。
cat /var/log/cloud-init-output.log | grep -i tdnf
- 輸入「exit」以登出 SSH 工作階段,然後再次輸入「exit」。
維護自訂 ClusterClass
將 TKG 服務 升級到新版本後,必須確保使用對新 TKG 服務 版本附帶的預設 ClusterClass 所做的變更更新從先前 TKG 服務 版本的預設 ClusterClass 衍生的自訂 ClusterClass。
使用以下工作流程使自訂 ClusterClass 與系統提供的 ClusterClass 保持同步。請注意,這些指示假定您已按照本文所述建立初始自訂 ClusterClass。
- 升級 TKG 服務 版本。
例如,從 TKG 服務 v3.0 升級到 v3.1。
請參閱安裝和升級 TKG 服務。
- 遵循此處的指示建立新的自訂 ClusterClass。
透過在新自訂 ClusterClass 的名稱後面附加 TKG 服務 版本 (例如
ccc-3.1
) 來手動對其進行版本控制。 - 將先前自訂 ClusterClass 中的自訂修補程式和變數新增至新的自訂 ClusterClass。
為此,請新增
cat ccc.yaml
,並將自訂修補程式和變數從其複製到ccc-3.1.yaml
。 - 套用新的自訂 ClusterClass 並等待重新調整成功。
- 透過編輯 Cluster 物件中的
spec.topology.class
欄位,使用先前的自訂 ClusterClass 將 TKG 叢集更新為新的自訂 ClusterClass。
未受管理的 ClusterClass
對於 vSphere 8 U2+,提供一個註解,如果您不希望 TKG 控制器管理自訂 ClusterClass,則可以將該註解新增到自訂 ClusterClass。請注意,如果新增此註解,您將負責手動建立所有基礎 Kubernetes 物件 (例如憑證、密碼等)。如需有關執行此操作的指引,請參閱 vSphere 8 U1 自訂 ClusterClass 說明文件。
註解如下所示:
以下範例說明如何將註解新增到名為
註解金鑰 | 值 |
---|---|
run.tanzu.vmware.com/unmanaged-clusterclass | " " |
ccc
的自訂 ClusterClass:
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" run.tanzu.vmware.com/unmanaged-clusterclass: "" name: ccc namespace: ccc-ns spec: ...