Tanzu Kubernetes 叢集規格自動轉換為 v1alpha2 API 格式後,若要對 Tanzu Kubernetes 叢集執行輪流更新 (通常透過變更 Tanzu Kubernetes 發行版本完成),可能需要對叢集規格進行一些預先處理以避免出現錯誤。

自動轉換叢集規格

若要將 vSphere with Tanzu 環境更新至 Tanzu Kubernetes Grid 服務 v1alpha2 API,請更新在其中執行服務的主管叢集

Tanzu Kubernetes Grid 服務 執行 v1alpha2 API 後,系統會自動將所有現有的 Tanzu Kubernetes 叢集規格從 v1alpha1 格式轉換為 v1alpha2 格式。在自動轉換期間,系統會為每個叢集資訊清單建立並填入預期的欄位。API 取代和新增 列出 v1alpha2 API 中新增和已過時的叢集規格欄位。

若要為其資訊清單已自動轉換為 v1alpha2 格式的叢集更新 Tanzu Kubernetes 版本,需要執行一些手動預先處理以避免錯誤。叢集更新範例 列出了多個選項。

API 取代和新增

下表列出了在 v1alpha2 API 中已過時並取代為新設定的叢集規格設定。
已過時的設定 新設定 註解

spec.distribution.version

spec.distribution.fullVersion

spec.topology.controlPlane.tkr.refernece.name

spec.topology.nodePools[*].tkr.reference.name

必須使用 TKR NAME 格式。請參閱下列範例。

spec.topology.workers

spec.topology.nodePools[*]

在轉換的叢集中,區塊 spec.topology.workers 會變成 spec.topology.nodePools[0]

nodePools 清單中的第一個項目是 name: workers

spec.topology.controlPlane.count

spec.topology.workers.count

spec.topology.controlPlane.replicas

spec.topology.nodePools[*].replicas

count 將取代為 replicas

spec.topology.controlPlane.class

spec.topology.workers.class

spec.topology.controlPlane.vmClass

spec.topology.nodePools[*].vmClass

class 將取代為 vmClass

不適用

spec.topology.nodePools[*].labels

用於組織整理和分類物件的選擇性金鑰配對值;標籤會傳播到已建立的節點

不適用

spec.topology.nodePools[*].taints

用於節點向其登錄的選擇性污點;使用者定義的污點會傳播到已建立的節點

TKR NAME 格式為必填

除了要被取代的 spec.distribution.version 欄位之外,不支援指定 Tanzu Kubernetes 發行版本的 DISTRIBUTION 格式。這表示您無法使用下列字串格式來參考目標版本:1.21.2+vmware.1-tkg.1.ee25d551.21.21.21

在 v1alpha2 API 叢集規格中參考 Tanzu Kubernetes 發行版本時,您必須使用 TKR NAME 格式,而不是已過時的 DISTRIBUTION 格式。雖然已過時的格式會顯示在 UPDATES AVAILABLE 資料行中,但唯一支援的格式是 TKR NAME 資料行中列出的格式。
kubectl get tanzukubernetescluster
NAMESPACE        NAME            CONTROL PLANE   WORKER   TKR NAME                             AGE    READY   TKR COMPATIBLE   UPDATES AVAILABLE
tkgs-cluster-1   test-cluster    3               3        v1.21.2---vmware.1-tkg.1.ee25d55     38h    True    True             [1.21.2+vmware.1-tkg.1.ee25d55]

使用 kubectl edit 更新叢集規格

如果需要對叢集規格進行編輯,使其符合 TKGS v1alpha2 API,請使用 kubectl edit 方法。請勿嘗試對此類型的更新使用 kubectl patch 方法。請參閱編輯叢集資訊清單的方法。若要使用編輯器設定 kubectl,請參閱為 Kubectl 指定預設文字編輯器

叢集更新範例

由於變更 spec.distribution.version 是觸發叢集輪流更新的最常見方式 (請參閱 更新 Tanzu Kubernetes 叢集),且此欄位在 v1alpha2 API 中已過時,因此需要注意一些考慮事項並遵循一些預先處理建議,以避免發生潛在的叢集更新問題。

下列範例示範了如何將使用 v1alpha1 API 佈建的 Tanzu Kubernetes 叢集版本更新至執行 v1alpha2 API 的系統。

叢集升級範例 1:在控制平面中使用單一 TKR NAME 參考

建議方法是從轉換後的規格中移除所有 nodePools[*].tkr.reference.name 區塊,並使用目標版本的 TKR NAME 更新 controlPlane.tkr.reference.name。在此情況下,會將同一 Tanzu Kubernetes 版本散佈到所有 nodePools[*] 節點。

未來,controlPlanenodePools[*] 之間的 Tanzu Kubernetes 版本可能會有所不同。但是,目前叢集中的所有版本都必須相符,因此在 controlPlane 中放置單一 TKR NAME 參考就已足夠。

例如:
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-update-example1
  namespace: tkgs-cluster-ns
spec:
  settings:
    network:
      cni:
        name: antrea
      pods:
        cidrBlocks:
        - 192.0.2.0/16
      serviceDomain: cluster.local
      services:
        cidrBlocks:
        - 198.51.100.0/12
  topology:
    controlPlane:
      replicas: 3
      storageClass: vwt-storage-policy
      tkr:
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
      vmClass: best-effort-medium
    nodePools:
    - name: workers
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium

叢集升級範例 2:針對每個節點集區使用 TKR NAME 參考

第二個範例是在 controlPlanenodePools[*] 拓撲的 tkr.reference.name 區塊中放置 TKR NAME。

如果 Tanzu Kubernetes 版本在節點集區之間有所不同,則此方法的優點是可供未來版本使用。目前,它們必須相符。

例如:
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-update-example2
  namespace: tkgs-cluster-ns
spec:
  settings:
    network:
      cni:
        name: antrea
      pods:
        cidrBlocks:
        - 192.0.2.0/16
      serviceDomain: cluster.local
      services:
        cidrBlocks:
        - 198.51.100.0/12
  topology:
    controlPlane:
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
      tkr:
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: workers
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
      tkr:
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55

叢集升級範例 3:使用已過時的散佈欄位

最後一個選項是使用已過時的欄位 spec.distribution.fullVersionspec.distribution.version,然後手動移除所有 tkr.reference.name 區塊。您必須包含兩個欄位,其中一個欄位使用 TKR NAME 格式,另一個欄位為 null。不支援版本捷徑,例如 v1.21.2v1.21
備註: 對於 Ubuntu 上的 Tanzu Kubernetes 版本,不支援使用 spec.distribution.version
下列範例將 fullVersion 與 TKR NAME 搭配使用,並在 version 欄位中使用 null (空白) 值。會移除所有 tkr.reference.name 項目。
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-update-example3a
  namespace: tkgs-cluster-ns
spec:
  distribution:
    fullVersion: v1.21.2---vmware.1-tkg.1.ee25d55
    version: ""
  settings:
    network:
      cni:
        name: antrea
      pods:
        cidrBlocks:
        - 192.0.2.0/16
      serviceDomain: cluster.local
      services:
        cidrBlocks:
        - 198.51.100.0/12
  topology:
    controlPlane:
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
    nodePools:
    - name: workers
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
或者,您可以在 version 欄位中使用 TKR NAME,並在 fullVersion 欄位中使用 null (空白) 值。即使您使用的是 version 欄位,版本捷徑仍不受支援。會移除所有 tkr.reference.name 項目。
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-update-example3b
  namespace: tkgs-cluster-ns
spec:
  distribution:
    fullVersion: ""
    version: v1.21.2---vmware.1-tkg.1.ee25d55
  settings:
    network:
      cni:
        name: antrea
      pods:
        cidrBlocks:
        - 192.0.2.0/16
      serviceDomain: cluster.local
      services:
        cidrBlocks:
        - 198.51.100.0/12
  topology:
    controlPlane:
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
    nodePools:
    - name: workers
      replicas: 3
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium