Tanzu Kubernetes Grid 服务 API 提供了用于自定义 Tanzu Kubernetes 集群的智能默认值和一系列选项。请根据需求参阅相关示例,了解如何置备具有不同配置和自定义的各种类型的集群。

用于置备 Tanzu Kubernetes 集群的最小 YAML

以下示例 YAML 是调用 Tanzu Kubernetes Grid 服务 和置备使用所有默认设置的 Tanzu Kubernetes 集群所需的最小配置。

最小示例 YAML 的特性包括:
  • Tanzu Kubernetes 版本(列为 v1.19)解析为与该次版本匹配的最新分发版,例如 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
    • 默认 Pod CIDR:192.168.0.0/16
    • 默认服务 CIDR:10.96.0.0/12
    • 默认服务域:cluster.local
    注: Pods 的默认 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 展示了如何为集群控制平面和工作节点置备具有单独磁盘和存储参数的集群。

对频繁更改的数据使用单独的磁盘和存储参数不仅有助于最大程度地减少使用链接克隆带来的读写开销,还有其他好处。有两个主要用例:
  • 在 etcd 数据库的控制平面节点上自定义存储性能
  • 自定义工作节点上容器映像的磁盘大小

该示例具有以下特性:

  • spec.topology.controlPlane.volumes 设置为 etcd 数据库指定单独的卷。
  • spec.topology.workers.volumes 设置为容器映像指定单独的卷。
  • Tanzu Kuberentes 版本 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

具有代理服务器的集群

通过将代理服务器配置应用于集群清单,可以使用具有单个 Tanzu Kubernetes 集群的代理服务器。

请注意以下特性:

  • spec.settings.network.proxy 部分为此 Tanzu Kubernetes 集群指定 HTTP(s) 代理配置。
  • 这两个 proxy 服务器值的语法为 http://<user>:<pwd>@<ip>:<port>
  • 某些特定端点不会自动代理,其中包括 localhost127.0.0.1 以及 Tanzu Kubernetes 集群的 Pod 和服务 CIDR。无需在 noProxy 字段中包括这些信息。
  • noProxy 字段接受不作为代理的 CIDR 阵列。从 主管集群 上的工作负载网络获取所需的值。请参阅使用 Tanzu Kubernetes Grid 服务 v1alpha1 API Tanzu Kubernetes 集群的配置参数中的映像。
  • 如果在 TkgServiceConfiguration 上配置了全局代理,则会在集群初始部署后,将该代理信息传播到集群清单中。仅当创建集群时未显示代理配置字段的情况下,才会向集群清单中添加全局代理配置。换句话说,每个集群的配置优先,并将覆盖全局代理配置。
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 自定义证书的集群

与在 trust.additionalTrustedCAs 中指定 TkgServiceConfiguration 的方式类似(请参见 用于 Tanzu Kubernetes Grid 服务 v1alpha1 API 的配置参数),可以在 trust.additionalTrustedCAs 规范中的 spec.settings.network 下包含 TanzuKubernetesCluster。例如:
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。
要置备从 Tanzu Kubernetes 继承全局设置的 TkgServiceConfiguration 集群,请为该集群配置未指定或清除的全局设置。

例如,如果要配置继承 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
  

要置备不从 Tanzu Kubernetes 继承默认值的 TkgServiceConfiguration 集群,请将集群规范配置为包含除空值以外的所有元素。

例如,如果 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"]