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 范围。请参见下面的自定义网络示例。 - 默认 CNI:
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 集群。
- 由于应用了自定义网络设置,即便使用默认 Antrea CNI,也需要
cni.name
参数。- CNI 名称:
antrea
- 自定义 Pod CIDR:
193.0.2.0/16
- 自定义服务 CIDR:
195.51.100.0/12
- 自定义服务域:
managedcluster.local
- CNI 名称:
- 自定义 CIDR 块不能与 主管集群 重叠。有关详细信息,请参见使用 Tanzu Kubernetes Grid 服务 v1alpha1 API 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 集群。
- Calico 不是默认 CNI,因此在清单中明确命名。要更改服务级别的默认 CNI,请参见配置 Tanzu Kubernetes Grid 服务 v1alpha1 API 的示例。
- CNI 名称:
calico
- 自定义 Pod CIDR:
198.51.100.0/12
- 自定义服务 CIDR:
192.0.2.0/16
- 自定义服务域:
managedcluster.local
- CNI 名称:
- 网络使用自定义 CIDR 范围,而不是默认值。这些范围不得与 主管集群 重叠。请参见使用 Tanzu Kubernetes Grid 服务 v1alpha1 API 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>
。 - 某些特定端点不会自动代理,其中包括
localhost
和127.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"]