建立自訂 ClusterClass

本主題說明如何為 Tanzu Kubernetes Grid (TKG) 獨立管理叢集建立自訂 ClusterClass 資源,如何使用它建立以類別為基礎的工作負載叢集,以及使用基於自訂 ClusterClass 的叢集。

若要使叢集以自訂 ClusterClass 為基礎,請將其 spec.topology.class 設定為自訂 ClusterClass 名稱。

這些程序不適用於具有 vSphere with Tanzu 主管的 TKG。

注意

根據上游叢集 API 說明文件,自訂 ClusterClass 是一種實驗性 Kubernetes 功能。由於自訂 ClusterClass 可用的自訂範圍,VMware 無法測試或驗證所有可能的自訂。客戶負責測試、驗證其自訂 ClusterClass 叢集以及進行疑難排解。客戶可以開啟有關其自訂 ClusterClass 叢集的支援票證,VMware 支援會盡量提供協助,但無法保證解決針對自訂 ClusterClass 叢集提出的每個問題。在生產環境中部署自訂 ClusterClass 叢集之前,客戶應瞭解這些風險。要使用預設 ClusterClass 資源建立工作負載叢集,請按照叢集部署步驟中的程序操作。

需求

如要建立自訂 ClusterClass,您需要在本機安裝 yttimgpkg、Tanzu CLI 和 kubectl。有關如何下載和安裝 yttimgpkg 的資訊,請參見安裝 Carvel 工具

選項: 範本與新物件規格

如要建立自訂 ClusterClass,VMware 建議從現有的預設 ClusterClass 資訊清單或 YTT 範本開始,如建立基本 ClusterClass 資訊清單中所述。發佈新版本的預設 ClusterClass 物件時,可以將覆疊套用至該新版本,例如新版本的 TKG,以便實作相同的自訂。本主題中的程序說明了這種建立自訂 ClusterClass 物件的方法。

如要在不使用現有範本的情況下編寫全新的 ClusterClass 物件,請按照叢集 API 說明文件中的寫入 ClusterClass中的程序進行操作。

建立基本 ClusterClass 資訊清單

您可以根據預設 ClusterClass 資訊清單或 Tanzu Kubernetes Grid 提供的 YTT 範本建立基本 ClusterClass 資訊清單。您建立的任何自訂叢集都應基於此基本 ClusterClass 資訊清單。該程序有 3 個步驟:

  1. 取得目標平臺的預設 ClusterClass 資訊清單或 YTT 範本。
  2. 使用預設 ClusterClass 資訊清單或 YTT 範本產生自訂的基本 ClusterClass 資訊清單,其中包含有關基礎架構的資訊。
  3. 使用此基本 ClusterClass 資訊清單作為從中建立自訂叢集的範本。

有三種方法可用於為叢集建立基本 ClusterClass 資訊清單。

  • 方法 1:直接從管理叢集取得基本資訊清單。這是最簡單的方法。部署管理叢集時會自動產生預設基本資訊清單。此基本資訊清單包括部署管理叢集時提供的基礎架構組態。您可以直接將此當成基本 ClusterClass 資訊清單。
  • 方法 2:從 Tanzu CLI 取得 YTT 範本 (進階)。安裝 Tanzu CLI 時,將在機器上安裝 YTT 範本。如要從這些 YTT 範本建立基本資訊清單,必須建立提供基礎架構組態的 YTT 覆疊。
  • 方法 3:從 TKG 映像登錄取得 YTT 範本 (進階)。您還可以從 TKG 映像登錄中取得 YTT 範本。如要從這些 YTT 範本建立基本資訊清單,必須建立提供基礎架構組態的 YTT 覆疊。
重要

方法 2 和 3 適用於需要符合以下使用案例的進階使用者:

  • 您希望為 CI 系統產生自訂的 ClusterClass 定義,而不必部署獨立的管理叢集。
  • 您希望工作負載叢集使用與管理叢集不同的基礎架構。

方法 1:直接從管理叢集獲取基本資訊清單

在 Tanzu Kubernetes Grid v2.3.0 及更新版本中,部署管理叢集後,可以在 ~/.config/tanzu/tkg/clusterclassconfigs 資料夾中找到預設 ClusterClass 資訊清單。

如要查看已部署管理叢集的目標平台的資訊清單,請執行以下命令:

tree ~/.config/tanzu/tkg/clusterclassconfigs/

例如,如果您將管理叢集部署到 vSphere,您將看到以下 YAML 檔案。

.config/tanzu/tkg/clusterclassconfigs/
└── tkg-vsphere-default-v1.1.0.yaml
 
1 directory, 1 file

產生的資訊清單包含已從管理叢集部署擷取之目標平臺的相關資訊。您可以直接將它當成自訂 ClusterClass 建立的基本資訊清單。有關後續步驟,請參閱自訂基本 ClusterClass 資訊清單

方法 2:從 Tanzu CLI 取得 YTT 範本

安裝 Tanzu CLI v1.0.0 或更新版本後,但在部署管理叢集之前,可以在 ~/.config/tanzu/tkg/providers/infrastructure-<provider name>/<provider version>/cconly 資料夾中找到預設 ClusterClass 的 YTT 範本。您可以使用這些範本建立用於建立自訂基本的 ClusterClass 資訊清單。

  1. 如要尋找範本,請為您的目標平台執行相應的命令。

    vSphere
    tree ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
    
    您將看到以下 YAML 檔。
    .config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
    1 directory, 3 files
    
    AWS
    tree ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
    
    您將看到以下 YAML 檔。
    .config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
    Azure
    tree ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
    
    您將看到以下 YAML 檔。
    .config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly/
    ├── base.yaml
    ├── overlay-kube-apiserver-admission.yaml
    └── overlay.yaml
    
  2. 建立一個名為 user_input.yaml 的 YTT 資料值檔案,其中包含以下內容。

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    
  3. 將適用於目標平台的組態值新增到 user_input.yaml

    您可以使用部署管理叢集部署時使用的組態值。例如,vSphere 的 user_input.yaml 檔案將類似於以下內容:

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    ENABLE_MHC: true
    ENABLE_MHC_CONTROL_PLANE: true
    ENABLE_MHC_WORKER_NODE: true
    MHC_UNKNOWN_STATUS_TIMEOUT: 5m
    MHC_FALSE_STATUS_TIMEOUT: 12m
    MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
    MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
    NODE_STARTUP_TIMEOUT: 20m
    VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
    VSPHERE_DATACENTER: /dc0
    VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
    VSPHERE_FOLDER: /dc0/vm
    VSPHERE_NETWORK: /dc0/network/VM Network
    VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
    VSPHERE_SERVER: xxx.xxx.xxx.xxx
    VSPHERE_USERNAME: administrator@vsphere.local
    VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
    VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
    VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
    VSPHERE_WORKER_MEM_MIB: "8192"
    VSPHERE_WORKER_NUM_CPUS: "4"
    VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0"       # change it to the version in TKG BOM
    NAMESPACE: "tkg-system"                       # DO NOT change it
    
  4. 使用 ytt 為您的目標平台產生基本 ClusterClass 資訊清單。

    vSphere
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-vsphere/v1.7.0/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    
    AWS
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-aws/v2.1.3/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    
    Azure
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    

現在,您已為基礎架構產生基本資訊清單,有關後續步驟,請參見自訂基本 ClusterClass 資訊清單

方法 3:從 TKG 映像登錄取得 YTT 範本

預設 ClusterClass 的 YTT 範本也可以從 TKG 映像存放庫下載。您可以使用這些範本建立用於建立自訂基本的 ClusterClass 資訊清單。

  1. 從官方 TKG 登錄中的 providerTemplate 映像中提取 YTT 範本。

    對於 TKG v2.3.1,providerTemplate 映像標記為 v0.30.2。您可以透過搜尋 providerTemplateImage 在 TKG BOM 檔案中尋找標記版本。

    imgpkg pull -i projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates:v0.30.2 -o providers
    

    您會看到類似下列內容的輸出:

    Pulling image 'projects.registry.vmware.com/tkg/tanzu_core/provider/provider-templates@sha256:b210d26c610800f5da4b3aa55bfbc8ffae9275fa2c4073a2b1332e2045a6e1da'
    Extracting layer 'sha256:3ba336232c0e616b2b6c8f263593497c5a059a645f4c6137ea0eb658f4a8538a' (1/1)
    
    Succeeded
    

    YAML 範本檔將下載到 providers資料夾中。

  2. 建立一個名為 user_input.yaml 的 YTT 資料值檔案,其中包含以下內容。

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    
  3. 將適用於目標平台的組態值新增到 user_input.yaml

    您可以使用部署管理叢集部署時使用的組態值。例如,vSphere 的 user_input.yaml 檔案將類似於以下內容:

    #@data/values
    
    #@overlay/match-child-defaults missing_ok=True
    ---
    ENABLE_MHC: true
    ENABLE_MHC_CONTROL_PLANE: true
    ENABLE_MHC_WORKER_NODE: true
    MHC_UNKNOWN_STATUS_TIMEOUT: 5m
    MHC_FALSE_STATUS_TIMEOUT: 12m
    MHC_MAX_UNHEALTHY_CONTROL_PLANE: 100%
    MHC_MAX_UNHEALTHY_WORKER_NODE: 100%
    NODE_STARTUP_TIMEOUT: 20m
    VSPHERE_TLS_THUMBPRINT: 0A:B4:8F:2E:E4:34:82:90:D5:6A:F8:77:8C:8C:51:24:D2:49:3B:E8
    VSPHERE_DATACENTER: /dc0
    VSPHERE_DATASTORE: /dc0/datastore/sharedVmfs-0
    VSPHERE_FOLDER: /dc0/vm
    VSPHERE_NETWORK: /dc0/network/VM Network
    VSPHERE_RESOURCE_POOL: /dc0/host/cluster0/Resources
    VSPHERE_SERVER: xxx.xxx.xxx.xxx
    VSPHERE_USERNAME: administrator@vsphere.local
    VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
    VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
    VSPHERE_CONTROL_PLANE_NUM_CPUS: "4" VSPHERE_WORKER_DISK_GIB: "20"
    VSPHERE_WORKER_MEM_MIB: "8192"
    VSPHERE_WORKER_NUM_CPUS: "4"
    VSPHERE_CLUSTER_CLASS_VERSION: "v1.1.0"       # change it to the version in TKG BOM
    NAMESPACE: "tkg-system"                       # DO NOT change it
    
  4. 使用 ytt 為您的目標平台產生基本 ClusterClass 資訊清單。

    vSphere
    ytt -f providers/infrastructure-vsphere/v1.7.0/cconly -f providers/config_default.yaml -f user_input.yaml
    
    AWS
    ytt -f providers/infrastructure-aws/v2.1.3/cconly -f providers/config_default.yaml -f user_input.yaml
    
    Azure
    ytt -f ~/.config/tanzu/tkg/providers/infrastructure-azure/v1.9.2/cconly -f ~/.config/tanzu/tkg/providers/config_default.yaml -f user_input.yaml
    

現在,您已為基礎架構產生基本資訊清單,有關後續步驟,請參見自訂基本 ClusterClass 資訊清單

自訂基本 ClusterClass 資訊清單

若要自訂 ClusterClass 資訊清單,請在該資訊清單旁建立 ytt 覆疊檔。以下範例顯示了如何在 ClusterClass 定義中修改 Linux 核心參數。

  1. 建立 custom 資料夾,結構如下所示:

    tree custom
    custom
    |-- overlays
        |-- filter.yaml
        |-- kernels.yaml
    
  2. 編輯 custom/overlays/kernels.yaml

    例如,將 nfConntrackMax 新增為變數,然後為其定義一個修補程式,該修補程式會將其值新增控制平面節點的核心參數 net.netfilter.nf_conntrack_max

    此覆疊在 preKubeadmCommands 欄位附加一個命令,以將組態寫入到 sysctl.conf。若要使設定生效,可以附加命令 sysctl -p 以套用此變更。預設 ClusterClass 定義不可變,因此此覆疊還會透過新增 -extended 來變更自訂 ClusterClass 及其所有範本的名稱。

    cat custom/overlays/kernels.yaml
    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.subset({"kind":"ClusterClass"})
    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      name: tkg-vsphere-default-v1.1.0-extended
    spec:
      variables:
      - name: nfConntrackMax
        required: false
        schema:
          openAPIV3Schema:
            type: string
      patches:
      - name: nfConntrackMax
        enabledIf: '{{ not (empty .nfConntrackMax) }}'
        definitions:
          - selector:
              apiVersion: controlplane.cluster.x-k8s.io/v1beta1
              kind: KubeadmControlPlaneTemplate
              matchResources:
                controlPlane: true
            jsonPatches:
              - op: add
                path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
                valueFrom:
                  template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
              - op: add
                path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
                value: sysctl -p
    
  3. 移除不希望變更的資源。

    在此範例中,所有範本都將在自訂和預設 ClusterClass 之間共用,以便全部移除。您也可以以同樣的方式基於預設範本建立自訂範本,在這種情況下,請確保不排除 kind

    cat custom/overlays/filter.yaml
    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.not_op(overlay.subset({"kind": "ClusterClass"})),expects="0+"
    ---
    #@overlay/remove
    
  4. 使用預設 ClusterClass 資訊清單產生基本 ClusterClass。

    ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/overlays/filter.yaml > default_cc.yaml
    
  5. 產生自訂 ClusterClass。

    ytt -f tkg-vsphere-default-v1.1.0.yaml -f custom/ > custom_cc.yaml
    
  6. (可選) 檢查預設 ClusterClass 與自訂 ClusterClass 之間的差異,以確認變更已套用。

    diff default_cc.yaml custom_cc.yaml
    

    您會看到類似下列內容的輸出:

    4c4
    <   name: tkg-vsphere-default-v1.1.0
    ---
    >   name: tkg-vsphere-default-v1.1.0-extended
    638a639,643
    >   - name: nfConntrackMax
    >     required: false
    >     schema:
    >       openAPIV3Schema:
    >         type: string
    2607a2613,2628
    >   - name: nfConntrackMax
    >     enabledIf: '{{ not (empty .nfConntrackMax) }}'
    >     definitions:
    >     - selector:
    >         apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    >         kind: KubeadmControlPlaneTemplate
    >         matchResources:
    >           controlPlane: true
    >       jsonPatches:
    >       - op: add
    >         path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
    >         valueFrom:
    >           template: echo "net.netfilter.nf_conntrack_max={{ .nfConntrackMax }}" >> /etc/sysctl.conf
    >       - op: add
    >         path: /spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-
    >         value: sysctl -p
    

在此範例中,您可以看到已將 -extended 新增到叢集名稱中。

在管理叢集中安裝自訂 ClusterClass

如要使管理叢集能夠使用自訂 ClusterClass,請透過套用新資訊清單來安裝它。

  1. 套用 ClusterClass 資訊清單。

    kubectl apply -f custom_cc.yaml
    

    您應會看到以下輸出。

    clusterclass.cluster.x-k8s.io/tkg-vsphere-default-v1.1.0-extended created
    
  2. 檢查自訂 ClusterClass 是否已散佈到預設命名空間,例如:

    kubectl get clusterclass
    

    您應會看到以下輸出。

    NAME                                  AGE
    tkg-vsphere-default-v1.1.0            2d23h
    tkg-vsphere-default-v1.1.0-extended   11s
    

產生自訂工作負載叢集資訊清單

建立自訂 ClusterClass 後,您可以使用它建立包含自訂的新工作負載叢集。

  1. 使用 --dry-run 選項執行 tanzu cluster create,從標準叢集組態檔產生叢集資訊清單。

    tanzu cluster create --file workload-1.yaml --dry-run > default_cluster.yaml
    
  2. 建立 ytt 覆疊或直接編輯叢集資訊清單。

    建議的選項是建立 ytt 覆疊 (例如,cluster_overlay.yaml) 以執行以下操作:

    • topology.class 值替換為自訂 ClusterClass 的名稱
    • 使用預設值將自訂變數新增到 variables 區塊

    與修改 ClusterClass 物件規格一樣,只要存在新的上游叢集版本,依照以下方式使用覆疊,即可自動將變更套用至新物件:

    #@ load("@ytt:overlay", "overlay")
    
    #@overlay/match by=overlay.subset({"kind":"Cluster"})
    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    spec:
      topology:
        class: tkg-vsphere-default-v1.1.0-extended
        variables:
        - name: nfConntrackMax
          value: "1048576
    
  3. 產生 custom_cluster.yaml 資訊清單:

    ytt -f default_cluster.yaml -f cluster_overlay.yaml > custom_cluster.yaml
    
  4. (選用) 與上方的 ClusterClass 一樣,可以執行 diff 以將自訂類別叢集資訊清單與以預設類別為基礎的叢集進行比較,例如:

    diff custom_cluster.yaml default_cluster.yaml
    

    您會看到類似下列內容的輸出:

    <     class: tkg-vsphere-default-v1.1.0
    ---
    >     class: tkg-vsphere-default-v1.1.0-extended
    142a143,144
    >     - name: nfConntrackMax
    >       value: "1048576"
    

建立自訂叢集

以上述產生的自訂資訊清單為基礎,來建立自訂工作負載叢集,如下所示。

  1. 建立叢集。

    tanzu cluster create -f custom_cluster.yaml
    
  2. 檢查建立的物件內容。

    例如,對於上述核心修改,請擷取 KubeadmControlPlane 物件並確認已設定核心組態:

    kubectl get kcp workload-1-jgwd9 -o yaml
    

    您會看到類似下列內容的輸出:

    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: KubeadmControlPlane
    ...
        preKubeadmCommands:
        - hostname "{{ ds.meta_data.hostname }}"
        - echo "::1         ipv6-localhost ipv6-loopback" >/etc/hosts
        - echo "127.0.0.1   localhost" >>/etc/hosts
        - echo "127.0.0.1   {{ ds.meta_data.hostname }}" >>/etc/hosts
        - echo "{{ ds.meta_data.hostname }}" >/etc/hostname
        - echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
        - sysctl -p
    ...
    
  3. 登入控制平面節點並確認其 sysctl.conf 已修改:

    capv@workload-1-jgwd9:~$ sudo cat /etc/sysctl.conf
    ...
    net.ipv6.neigh.default.gc_thresh3=16384
    fs.file-max=9223372036854775807
    net.netfilter.nf_conntrack_max=1048576
    

升級自訂叢集

如果使用先前版本建立了自訂叢集,則可以將其升級到最新的 TKG 版本。

準備升級叢集

升級叢集之前,需要執行一些準備步驟。

  1. 在升級管理叢集之前,請使用為上一版本建立的自訂資訊清單版本建立測試叢集。

    例如,建立一個名為 test-upgrade 的自訂叢集。

  2. 取得 TKG 2.2 管理叢集提供的 ClusterClass 版本的相關資訊。

    kubectl get clusterclass
    

    如果使用 TKG v2.2.0 建立自訂叢集,ClusterClass 版本應為 1.0.0。例如:

    NAME                                  AGE
    tkg-vsphere-default-extended-v1.0.0   21m
    tkg-vsphere-default-v1.0.0            10d
    
  3. 取得有關在 test-upgrade 叢集中執行的 ClusterClass 版本的資訊。

    kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
    

    輸出應為 tkg-vsphere-default-extended-v1.0.0

  4. 依照升級獨立管理叢集中的說明操作,將管理叢集升級到 TKG 2.3。

  5. 取得將管理叢集升級到 v.2.3 後可用的 ClusterClass 版本的相關資訊。

    kubectl get cluster mgmt-cluster-name -n tkg-system -o jsonpath='{.spec.topology.class}'
    

    如果管理叢集在 vSphere 上執行,輸出應為 tkg-vsphere-default-v1.1.0

  6. 按照建立基本 ClusterClass 資訊清單自訂基本 ClusterClass 資訊清單中的程序進行操作,以建立新版本的基本 ClusterClass 資訊清單。
    • 例如,將新的自訂 ClusterClass 命名為 tkg-vsphere-default-v1.1.0-extended 並包含與舊版本 tkg-vsphere-default-extended-v1.0.0 相同的自訂變數。
    • 為新覆疊 custom_cc.yaml 命名。
  7. 在管理叢集中安裝新的自訂 ClusterClass。

    kubectl apply -f custom_cc.yaml
    
  8. 取得管理叢集現在可用的 ClusterClass 版本的相關資訊。

    kubectl get clusterclass
    

    應同時顯示舊版本和較新版本。

    NAME                                  AGE
    tkg-vsphere-default-extended-v1.0.0   61m
    tkg-vsphere-default-v1.0.0            10d
    tkg-vsphere-default-v1.1.0            25m
    tkg-vsphere-default-v1.1.0-extended   15s
    

執行升級

在執行準備步驟後,可以在升級生產叢集之前在測試叢集上測試升級。

  1. 將叢集 test-upgrade 從舊版本的自訂 ClusterClass 調整為新版本。

    kubectl patch cluster test-upgrade --type merge -p '{"spec": {"topology": {"class": "tkg-vsphere-default-v1.1.0-extended"}}}'   
    

    輸出應為 cluster.cluster.x-k8s.io/test-upgrade patched

  2. 取得有關現在在 test-upgrade 叢集中執行的 ClusterClass 版本的資訊。

    kubectl get cluster test-upgrade -o jsonpath='{.spec.topology.class}'
    

    輸出應為 tkg-vsphere-default-v1.1.0-extended。以前其為 tkg-vsphere-default-extended-v1.0.0

  3. 等待幾分鐘,然後執行 kubectl get cluster,直到看到 UpdatesAvailable 已更新為 true

    kubectl get cluster test-upgrade -o yaml
    

    準備就緒後,輸出中應顯示類似於以下內容的訊息:

    ...
    status:
      conditions:
    ...
      - lastTransitionTime: "2023-06-19T09:59:21Z"
        message: '[v1.25.9+vmware.1-tkg.1-20230609 v1.26.4+vmware.1-tkg.1-20230609]'
        status: "True"
        type: UpdatesAvailable
      controlPlaneReady: true
      infrastructureReady: true
      observedGeneration: 5
      phase: Provisioned
    
  4. 升級 test-upgrade 叢集。

    tanzu cluster upgrade test-upgrade    
    
  5. 檢查建立的物件內容。

    例如,對於上述核心修改,請擷取 KubeadmControlPlane 物件並確認已設定核心組態:

    kubectl get kcp test-upgrade-nsc6d -o yaml
    

    您會看到類似下列內容的輸出:

    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    kind: KubeadmControlPlane
    ...
        preKubeadmCommands:
        - hostname "{{ ds.meta_data.hostname }}"
        - echo "::1         ipv6-localhost ipv6-loopback" >/etc/hosts
        - echo "127.0.0.1   localhost" >>/etc/hosts
        - echo "127.0.0.1   {{ ds.meta_data.hostname }}" >>/etc/hosts
        - echo "{{ ds.meta_data.hostname }}" >/etc/hostname
        - sed -i 's|".*/pause|"projects-stg.registry.vmware.com/tkg/pause|' /etc/containerd/config.toml
        - systemctl restart containerd
        - echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
        - sysctl -p  
    

升級生產叢集

如果測試升級成功,請在生產叢集上重複執行升級中的步驟。

附註

如果在升級過程中遇到任何錯誤,可以透過將叢集從新版本的自訂 ClusterClass 重訂基底回退為舊版本。

將預設叢集重訂基底以使用自訂 ClusterClass

如果已建立具有預設 ClusterClass 的叢集,並且希望將其更新為使用自訂 ClusterClass,請使用 kubectl 編輯叢集物件:

  • spec.topology.class 更改為自訂 ClassClass 資訊清單的名稱。
  • 修改 spec.topology.variables 以附加自訂變數。

將自訂叢集重訂基底以使用預設 ClusterClass

如果要還原為新版本的預設 ClusterClass:

  • spec.topology.class 變更為新版本的預設 ClusterClass。
  • 修改 spec.topology.variables 以移除自訂變數。您可能需要新增在新版本的預設 ClusterClass 中定義的新變數。
check-circle-line exclamation-circle-line close-line
Scroll to top icon