請參閱以下指示,根據自訂 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 叢集之前,客戶應瞭解這些風險。

高階工作流程

高階工作流程如下所示。

只需使用以下工作流程即可開始。
步驟 工作 指示
1 複製預設 ClusterClass,建立自訂 ClusterClass。 1:建立自訂 ClusterClass
2 根據自訂 ClusterClass 佈建新的 TKG 叢集,並確認所有叢集節點均正確啟動。 2:根據自訂 ClusterClass 建立 TKG 叢集
請參閱以下工作流程,對自訂 ClusterClass 進行變更,並開始對自訂 ClusterClass 叢集節點進行輪流更新。
備註: 以下工作流程中所示的作業只是可以對自訂 ClusterClass 執行的作業範例。您的使用案例可能會有所不同,但一般工作流程應適用。
步驟 工作 指示
3 透過 SSH 登入其中一個 worker 節點,以確認有要更新的套件。 3:驗證是否存在套件更新
4 更新自訂 ClusterClass,在其中新增執行更新的新命令。 4:更新自訂 ClusterClass
5 確認更新已經執行的新節點推出。 5:驗證叢集節點的輪流更新

1:建立自訂 ClusterClass

第一部分涉及透過複製名為 tanzukubernetescluster 的預設 ClusterClass 建立名為 ccc ( customclusterclass 的縮寫) 的自訂 ClusterClass。
備註: 自訂 ClusterClass 名稱是使用者定義的。如果您使用其他名稱,請相應地調整指示。
  1. 建立並設定一個名為 ccc-nsvSphere 命名空間

    設定權限、儲存區、內容程式庫和虛擬機器類別。根據需要,請參閱說明文件

    備註: vSphere 命名空間 名稱是使用者定義的。如果您使用其他名稱,請相應地調整指示。
  2. 登入 主管
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
  3. 將預設 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
  4. 開啟以編輯複製的 ClusterClass 檔案。
    vim ccc.yaml
  5. 編輯檔案 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 資料/解決方案需要此註解。
  6. 儲存並確認變更。
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      annotations:
        run.tanzu.vmware.com/resolve-tkr: ""
      name: ccc
      namespace: ccc-ns
    spec:
    ...
  7. 建立自訂 ClusterClass 物件。
    kubectl apply -f ccc.yaml -n ccc-ns
    預期的結果:
    clusterclass.cluster.x-k8s.io/ccc created
  8. 列出自訂 ClusterClass。
    kubectl get cc -n ccc-ns
    預期的結果:
    NAME                     AGE
    ccc                      3m14s
    tanzukubernetescluster   29m
    

2:根據自訂 ClusterClass 建立 TKG 叢集

使用 叢集 v1beta1 API 基於 ClusterClass 建立叢集。
  1. 構建 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 個複本。
  2. 根據自訂 ClusterClass 建立 TKG 叢集。
    kubectl apply -f ccc-cluster.yaml -n ccc-ns
    預期的結果:
    cluster.cluster.x-k8s.io/ccc-cluster created
  3. 驗證叢集佈建。
    執行下列命令。等待所有叢集節點正確啟動。
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
    備註: 在單獨的工作階段中執行此命令會很有幫助,這樣可以在步驟 5 中監控輪流更新進度。

3:驗證是否存在套件更新

透過 SSH 登入其中一個 worker 節點,以確認有要更新的套件。
備註: 此步驟的目的只是確認有要更新的套件,而不是實際進行更新。推出新的叢集節點時,將由自訂 ClusterClass 更新這些套件 (此步驟後的步驟)。此步驟和後續步驟只是可以對自訂 ClusterClass 執行的作業範例。
  1. 執行下列命令以取得 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
  2. 執行以下命令,取得 worker 節點虛擬機器的 IP 位址。
    kubectl -n ccc-ns get vm -o wide
    備註: 如果您部署了多個工作節點,請選擇一個節點。請勿使用控制平面節點。
  3. 執行以下命令,透過 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!
  4. 執行下列命令並檢查更新。
    sudo -i
    tdnf update
  5. 在提示字元中,輸入「N」表示否 (不更新)。
    預期的結果:
    Operation aborted
    備註: 此處的目的只是檢查是否存在更新,而不是起始更新。在下一部分中,將透過向自訂 ClusterClass 新增命令來起始更新。
  6. 輸入「exit」以登出 SSH 工作階段,然後再次輸入「exit」。

4:更新自訂 ClusterClass

更新自訂 ClusterClass,在其中新增執行 tdnf 更新的新命令。
  1. 開啟名為 ccc 的自訂 ClusterClass 以進行編輯。
    kubectl edit cc ccc -n ccc-ns
  2. 向下捲動至包含 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
    
  3. 儲存對自訂 ClusterClass 所做的變更並關閉編輯器。
    wq
    預期的結果:
    clusterclass.cluster.x-k8s/ccc edited

5:驗證叢集節點的輪流更新

更新自訂 ClusterClass 會觸發對基於該 ClusterClass 佈建的叢集的叢集節點執行輪流更新。套用了上述命令後,會出現新節點。
  1. 透過執行下列命令來確認叢集佈建。
    等待所有叢集節點正確啟動。
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
  2. 您應該會看到部署了具有新 UUID 的新節點。
  3. 執行以下命令,透過 SSH 登入 worker 節點虛擬機器。
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    預期結果:透過 SSH 登入主機後,您應該會看到以下訊息。
    tdnf update info not availble yet!
  4. 執行下列命令。
    sudo -i
    tdnf update

    預期結果:應該會看到需要更新的套件較少。

  5. 在提示字元中,輸入「N」表示否 (不更新)。
    預期的結果:
    Operation aborted
  6. 執行以下命令以確認 tdnf 已執行。
    cat /var/log/cloud-init-output.log | grep -i tdnf
  7. 輸入「exit」以登出 SSH 工作階段,然後再次輸入「exit」。

維護自訂 ClusterClass

TKG 服務 升級到新版本後,必須確保使用對新 TKG 服務 版本附帶的預設 ClusterClass 所做的變更更新從先前 TKG 服務 版本的預設 ClusterClass 衍生的自訂 ClusterClass。

使用以下工作流程使自訂 ClusterClass 與系統提供的 ClusterClass 保持同步。請注意,這些指示假定您已按照本文所述建立初始自訂 ClusterClass。
  1. 升級 TKG 服務 版本。

    例如,從 TKG 服務 v3.0 升級到 v3.1。

    請參閱安裝和升級 TKG 服務

  2. 遵循此處的指示建立新的自訂 ClusterClass。

    透過在新自訂 ClusterClass 的名稱後面附加 TKG 服務 版本 (例如 ccc-3.1) 來手動對其進行版本控制。

  3. 將先前自訂 ClusterClass 中的自訂修補程式和變數新增至新的自訂 ClusterClass。

    為此,請新增 cat ccc.yaml,並將自訂修補程式和變數從其複製到 ccc-3.1.yaml

  4. 套用新的自訂 ClusterClass 並等待重新調整成功。
  5. 透過編輯 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:
...