Tanzu Kubernetes Grid 服務 API 提供智慧預設值和一組用於自訂 Tanzu Kubernetes 叢集的選項。請參閱範例,以根據您的需求使用不同組態和自訂佈建各種類型的叢集。

用於佈建 Tanzu Kubernetes 叢集的最小 YAML

以下範例 YAML 是叫用 Tanzu Kubernetes Grid 服務和佈建使用所有預設設定的 Tanzu Kubernetes 叢集所需的最小組態。

最小範例 YAML 的特性包括:
  • 列為 v1.19 的 Tanzu Kubernetes 版本版本將會解析為與該次要版本相符的最新發行版,例如 v1.19.7+vmware.1-tkg.1.xxxxxx。請參閱驗證 Tanzu Kubernetes 叢集的更新相容性
  • 虛擬機器類別 best-effort-<size> 沒有保留區。如需詳細資訊,請參閱 Tanzu Kubernetes 叢集的虛擬機器類別
  • 該叢集不包含容器的持續性儲存區。如果需要,將在 spec.settings.storage 中進行設定。請參閱以下儲存區範例。
  • 某些工作負載 (例如 Helm) 可能需要 spec.settings.storage.defaultClass。請參閱以下儲存區範例。
  • 未指定 spec.settings.network 區段。這表示該叢集使用下列預設網路設定:
    • 預設 CNI:antrea
    • 預設網繭 CIDR:192.168.0.0/16
    • 預設服務 CIDR:10.96.0.0/12
    • 預設服務網域:cluster.local
    備註: 網繭的預設 IP 範圍為 192.168.0.0/16。如果此子網路已在使用中,則必須指定不同的 CIDR 範圍。請參閱以下自訂網路範例。
apiVersion: run.tanzu.vmware.com/v1alpha1      #TKGS API endpoint
kind: TanzuKubernetesCluster                   #required parameter
metadata:
  name: tkgs-cluster-1                         #cluster name, user defined
  namespace: tgks-cluster-ns                   #vsphere namespace
spec:
  distribution:
    version: v1.20                             #Resolves to latest TKR 1.20
  topology:
    controlPlane:
      count: 1                                 #number of control plane nodes
      class: best-effort-medium                #vmclass for control plane nodes
      storageClass: vwt-storage-policy         #storageclass for control plane
    workers:
      count: 3                                 #number of worker nodes
      class: best-effort-medium                #vmclass for worker nodes
      storageClass: vwt-storage-policy         #storageclass for worker nodes

使用單獨磁碟和儲存參數的叢集

以下範例 YAML 顯示如何為叢集控制平面和 worker 節點佈建使用單獨磁碟和儲存參數的叢集。

對頻繁變換的資料使用單獨的磁碟和儲存參數,有助於盡可能減少與使用連結複製相關的讀取寫入額外負荷,並且還有其他優勢。有兩個主要使用案例:
  • 在 etcd 資料庫的控制平面節點上自訂儲存區效能
  • 為 worker 節點上的容器映像自訂磁碟大小

此範例具有下列特性:

  • spec.topology.controlPlane.volumes 設定會為 etcd 資料庫指定單獨的磁碟區。
  • spec.topology.workers.volumes 設定會為容器映像指定單獨的磁碟區。
  • Tanzu Kubernetes 1.17 版及更新版本支援容器映像的 mountPath: /var/lib/containerd
apiVersion: run.tanzu.vmware.com/v1alpha1      
kind: TanzuKubernetesCluster                   
metadata:
  name: tkgs-cluster-5                         
  namespace: tgks-cluster-ns                   
spec:
  distribution:
    version: v1.20                            
  topology:
    controlPlane:
      count: 3                                 
      class: best-effort-medium                 
      storageClass: vwt-storage-policy
      volumes:
        - name: etcd
          mountPath: /var/lib/etcd
          capacity:
            storage: 4Gi       
    workers:
      count: 3                                 
      class: best-effort-medium                 
      storageClass: vwt-storage-policy        
      volumes:
        - name: containerd
          mountPath: /var/lib/containerd
          capacity:
            storage: 16Gi       

具有自訂 Antrea 網路的叢集

下列 YAML 說明如何使用 Antrea CNI 的自訂網路範圍佈建 Tanzu Kubernetes 叢集。
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: tkg-cluster-3-antrea
  namespace: tkgs-cluster-ns
spec:
  distribution:
    version: v1.20
  topology:
    controlPlane:
      class: guaranteed-medium
      count: 3
      storageClass: vwt-storage-policy
    workers:
      class: guaranteed-medium
      count: 5
      storageClass: vwt-storage-policy
  settings:
    network:
      cni:
        name: antrea                       #Use Antrea CNI
      pods:
        cidrBlocks:
        - 193.0.2.0/16                     #Must not overlap with SVC
      services:
        cidrBlocks:
        - 195.51.100.0/12                  #Must not overlap with SVC
      serviceDomain: managedcluster.local

具有自訂 Calico 網路的叢集

下列 YAML 示範了如何佈建具有自訂 Calico 網路的 Tanzu Kubernetes 叢集。
apiVersion: run.tanzu.vmware.com/v1alpha1    
kind: TanzuKubernetesCluster                 
metadata:
  name: tkgs-cluster-2                                
  namespace: tkgs-cluster-ns                     
spec:
  distribution:
    version: v1.20                              
  topology:
    controlPlane:
      count: 3                                                        
      class: guaranteed-large                  
      storageClass: vwt-storage-policy        
    workers:
      count: 5                                                      
      class: guaranteed-xlarge                           
      storageClass: vwt-storage-policy      
  settings:
    network:
      cni:
        name: calico                           #Use Calico CNI for this cluster
      services:
        cidrBlocks: ["198.51.100.0/12"]        #Must not overlap with SVC
      pods:
        cidrBlocks: ["192.0.2.0/16"]           #Must not overlap with SVC
      serviceDomain: managedcluster.local

具有儲存區類別和預設持續性磁碟區類別的叢集

以下範例 YAML 示範了如何佈建具有用於動態 PVC 佈建之儲存區類別和預設儲存區類別的叢集。
  • spec.settings.storage.classes 設定為叢集中容器的持續性儲存區指定了兩個儲存區類別。
  • 已指定 spec.settings.storage.defaultClass。某些應用程式需要預設類別。例如,如果要使用 Helm 或 Kubeapps 作為 defaultClass (由多個圖表參考)。
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: default-storage-spec
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      count: 3
      class: best-effort-medium
      storageClass: vwt-storage-policy
    workers:
      count: 3
      class: best-effort-medium
      storageClass: vwt-storage-policy
  distribution:
    version: v1.20
  settings:
    network:
      cni:
        name: antrea
      services:
        cidrBlocks: ["198.51.100.0/12"]
      pods:
        cidrBlocks: ["192.0.2.0/16"]
      serviceDomain: "tanzukubernetescluster.local"
    storage:
      classes: ["gold", "silver"]              #Array of named PVC storage classes
      defaultClass: silver                     #Default PVC storage class

具有 Proxy 伺服器的叢集

可以透過將 Proxy 伺服器組態套用至叢集資訊清單,以將 Proxy 伺服器與個別 Tanzu Kubernetes 叢集搭配使用。

請注意下列特性:

  • spec.settings.network.proxy 區段將為此 Tanzu Kubernetes 叢集指定 HTTP(s) Proxy 組態。
  • 用於兩個 proxy 伺服器值的語法是 http://<user>:<pwd>@<ip>:<port>
  • 特定端點不會自動代理,包括 localhost127.0.0.1,以及 Tanzu Kubernetes 叢集的網繭和服務 CIDR。無需在 noProxy 欄位中包括這些內容。
  • noProxy 欄位接受不進行代理的一組 CIDR。從主管叢集上的工作負載網路取得所需的值。請參閱位於 使用 Tanzu Kubernetes Grid 服務 v1alpha1 API 之 Tanzu Kubernetes 叢集的組態參數的映像。
  • 如果在 TkgServiceConfiguration 上設定了全域 Proxy,該 Proxy 資訊將在初始部署該叢集後散佈到叢集資訊清單。只有在建立叢集時不存在 Proxy 組態欄位的情況下,全域 Proxy 組態才會新增至叢集資訊清單。換句話說,每個叢集的組態優先,而且將覆寫全域 Proxy 組態。
apiVersion: run.tanzu.vmware.com/v1alpha1    
kind: TanzuKubernetesCluster                 
metadata:
  name: tkgs-cluster-with-proxy                                
  namespace: tkgs-cluster-ns                     
spec:
  distribution:
    version: v1.20                              
  topology:
    controlPlane:
      count: 3                                                        
      class: guaranteed-medium                  
      storageClass: vwt-storage-policy        
    workers:
      count: 5                                                      
      class: guaranteed-xlarge                           
      storageClass: vwt-storage-policy       
  settings:
    storage:
      classes: ["gold", "silver"]              
      defaultClass: silver                     
    network:
      cni:
        name: antrea 
      pods:
        cidrBlocks:
        - 193.0.2.0/16
      services:
        cidrBlocks:
        - 195.51.100.0/12           
      serviceDomain: managedcluster.local
      proxy:
        httpProxy: http://10.186.102.224:3128  #Proxy URL for HTTP connections
        httpsProxy: http://10.186.102.224:3128 #Proxy URL for HTTPS connections
        noProxy: [10.246.0.0/16,192.168.144.0/20,192.168.128.0/20] #SVC Pod, Egress, Ingress CIDRs

具有 TLS 自訂憑證的叢集

與如何在 TkgServiceConfiguration 中指定 trust.additionalTrustedCAs 類似 (請參閱 Tanzu Kubernetes Grid 服務 v1alpha1 API 的組態參數),您可以在 TanzuKubernetesCluster 規格中將 trust.additionalTrustedCAs 包含在 spec.settings.network 下。例如:
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-with-custom-certs-tls
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      count: 3
      class: guaranteed-medium
      storageClass: vwt-storage-profile
    workers:
      count: 3
      class: guaranteed-large
      storageClass: vwt-storage-profile
  distribution:
    version: 1.20.2
  settings:
    network:
      cni:
        name: antrea
      services:
        cidrBlocks: ["198.51.100.0/12"]
      pods:
        cidrBlocks: ["192.0.2.0/16"]
      serviceDomain: "managedcluster.local"
      trust:
        additionalTrustedCAs:
          - name: custom-selfsigned-cert-for-tkc
            data: |
              LS0aaaaaaaaaaaaaaabase64...

從 TkgServiceConfiguration 規格繼承全域設定或不繼承全域設定的叢集

備註: 下列範例叢集組態需要 vCenter Server 7.0U2a 版或更新版本以及至少 主管叢集 1.18.10 版。
若要佈建從 TkgServiceConfiguration 繼承全域設定的 Tanzu Kubernetes 叢集,請使用未指定或未設為 Null 的全域設定來設定叢集。

例如,如果您要設定會繼承 proxy 設定的叢集,可以使用下列任一方法:

選項 1:不要在叢集規格中包含 proxy 設定:
...
settings:
  network:
    cni:
      name: antrea
    services:
      cidrBlocks: ["198.51.100.0/12"]
    pods:
      cidrBlocks: ["192.0.2.0/16"]
    serviceDomain: "tanzukubernetescluster.local"
選項 2:在規格中包含 proxy 設定,但明確將其值設定為 null
settings:
  network:
    proxy: null
  

若要佈建不會從 TkgServiceConfiguration 繼承預設值的 Tanzu Kubernetes 叢集,請設定包含所有元素但為空白值的叢集規格。

例如,如果 TkgServiceConfiguration 設定了全域 proxy,而您要佈建不會繼承全域 proxy 設定的叢集,請在叢集規格中包含下列語法:
...
settings:
  network:
    proxy:
      httpProxy: ""
      httpsProxy: ""
      noProxy: null

使用本機內容程式庫的叢集

若要在氣隙環境中佈建 Tanzu Kubernetes 叢集,請使用從本機內容程式庫同步的虛擬機器映像建立叢集。

若要使用本機內容程式庫映像佈建叢集,則必須在叢集規格中指定該映像。針對 distribution.version 值,您可以輸入完整映像名稱,或如果您保留來自映像目錄的名稱格式,則可以將其縮短為 Kubernetes 版本。如果您想要使用完全限定的版本號碼,請將 ----- 取代為 +。例如,如果您有名為 photon-3-k8s-v1.20.2---vmware.1-tkg.1.1d4f79a 的 OVA 映像,則可接受下列格式。
spec:
  distribution:
    version: v1.20
spec:
  distribution:
    version: v1.20.2
spec:
  distribution:
    version: v1.20.2+vmware.1-tkg.1
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
    name: tgks-cluster-9
    namespace: tkgs-cluster-ns
spec:
   topology:
       controlPlane:
           count: 3
           class: best-effort-medium
           storageClass: vwt-storage-policy
       workers:
           count: 3
           class: best-effort-medium
           storageClass: vwt-storage-policy
   distribution:
        version: v1.20.2         
   settings:
        network:
          cni:
              name: antrea 
          services:
             cidrBlocks: ["198.51.100.0/12"]
          pods:
             cidrBlocks: ["192.0.2.0/16"]