以下几节介绍了如何配置 Tanzu Kubernetes Grid (TKG) 工作负载集群以使用特定于具有独立管理集群的 vSphere 的功能。这些功能在集群的平面配置文件或 Kubernetes 样式对象规范中无法完全配置。
有关如何使用配置文件和对象规范在 vSphere 上配置工作负载集群的信息,请参见:
如果对每个版本的 Kubernetes 使用单个自定义 OVA 映像,以在一个操作系统上部署集群,请将 OVA 导入到 vSphere,然后使用 --tkr
选项将其指定为 tanzu cluster create
。
但是,如果要将多个自定义 OVA 映像用于同一 Kubernetes 版本,则 --tkr
值不明确。当 OVA 用于相同的 Kubernetes 版本时会发生这种情况:
make build-node-ova-vsphere-ubuntu-1804
、make build-node-ova-vsphere-photon-3
和 make build-node-ova-vsphere-rhel-7
创建不同的操作系统。要解决此不明确性,请先将 VSPHERE_TEMPLATE
选项设置为所需的 OVA 映像,然后再运行 tanzu cluster create
:
如果 OVA 模板映像名称是唯一的,请将 VSPHERE_TEMPLATE
设置为仅映像名称。
如果多个映像具有相同的名称,请将 VSPHERE_TEMPLATE
设置为 vCenter 中映像的完整清单路径。此路径采用 /MY-DC/vm/MY-FOLDER-PATH/MY-IMAGE
形式,其中:
MY-DC
是包含 OVA 模板映像的数据中心。MY-FOLDER-PATH
是从数据中心指向映像的路径,如 vCenter 虚拟机和模板视图中所示。MY-IMAGE
是映像名称。例如:
VSPHERE_TEMPLATE: "/TKG_DC/vm/TKG_IMAGES/ubuntu-2004-kube-v1.29.9-vmware.1"
您可以手动确定映像的完整 vCenter 清单路径,也可以使用 govc
CLI:
govc
。有关安装说明,请参见 GitHub 上的 govmomi 存储库。govc
设置环境变量以访问 vCenter:
export GOVC_USERNAME=VCENTER-USERNAME
export GOVC_PASSWORD=VCENTER-PASSWORD
export GOVC_URL=VCENTER-URL
export GOVC_INSECURE=1
govc find / -type m
并在输出中查找映像名称,该输出按对象的完整清单路径列出对象。有关自定义 OVA 映像的详细信息,请参见构建计算机映像。
您可以为工作负载集群指定地理区域和区域,以将其与为 vSphere CSI(云存储接口)配置的地理区域标记和区域标记集成在一起。对于跨多个区域的集群,这允许工作节点查找并使用共享存储,即使这些节点在没有存储单元的区域中运行,例如在电信无线访问网络 (RAN) 中运行。
要部署具有启用共享存储的地理区域标记和区域标记的工作负载集群 vSphere CSI:
在 vCenter Server 上创建标记:
k8s-region
和 k8s-zone
。按照创建和编辑 vSphere 标记在数据中心内的地理区域和区域类别中创建标记,如下表所示:
类别 | 标记 |
---|---|
k8s-zone |
zone-a zone-b zone-c |
k8s-region |
region-1 |
按照表中所示分配或移除 vSphere 标记为数据中心创建集群的相应标记。
vSphere 对象 | 标记 |
datacenter |
region-1 |
cluster1 |
zone-a |
cluster2 |
zone-b |
cluster3 |
zone-c |
要为 vSphere 工作负载集群的 CSI 驱动程序启用自定义地理区域和区域,请将集群配置文件中的变量 VSPHERE_REGION
和 VSPHERE_ZONE
设置为上面的标记。例如:
VSPHERE_REGION: region-1
VSPHERE_ZONE: zone-a
当 Tanzu CLI 使用这些变量集创建工作负载集群时,其会使用拓扑键 failure-domain.beta.kubernetes.io/zone
和 failure-domain.beta.kubernetes.io/region
标记每个集群节点。
运行 tanzu cluster create
以创建工作负载集群,如创建基于计划的集群或 TKC 集群中所述。
创建集群并将 kubectl
上下文设置为集群后,可以通过执行以下操作之一检查地理区域和区域标签:
运行 kubectl get nodes -L failure-domain.beta.kubernetes.io/zone -L failure-domain.beta.kubernetes.io/region
,并确认输出列出了集群节点。
运行 kubectl get csinodes -o jsonpath='{range .items\[\*\]}{.metadata.name} {.spec}{"\\n"}{end}'
,并确认已在 vsphere-csi
上启用该地理区域和区域。
有关配置 vSphere CSI 的详细信息,请参见 vSphere CSI 驱动程序 - 使用拓扑的部署。
Tanzu Kubernetes Grid 可以在多个目标平台帐户上运行工作负载集群,例如在不同的团队之间拆分云使用情况,或者将不同的安全配置文件应用于生产、转储和开发工作负载。
要将工作负载集群部署到备用 vSphere 帐户(不同于用于部署其管理集群的帐户),请执行以下操作:
将 kubectl
的上下文设置为管理集群:
kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
其中,MY-MGMT-CLUSTER
是管理集群的名称。
使用以下内容创建 secret.yaml
文件:
apiVersion: v1
kind: Secret
metadata:
name: SECRET-NAME
namespace: CAPV-MANAGER-NAMESPACE
stringData:
username: VSPHERE-USERNAME
password: VSPHERE-PASSWORD
其中:
SECRET-NAME
是分配给客户端密钥的名称。CAPV-MANAGER-NAMESPACE
是运行 capv-manager
pod 的命名空间。默认值:capv-system
。VSPHERE-USERNAME
和 VSPHERE-PASSWORD
是可访问备用 vSphere 帐户的登录凭据。使用该文件创建 Secret
对象:
kubectl apply -f secret.yaml
创建包含以下内容的 identity.yaml
文件:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereClusterIdentity
metadata:
name: EXAMPLE-IDENTITY
spec:
secretName: SECRET-NAME
allowedNamespaces:
selector:
matchLabels: {}
其中:
EXAMPLE-IDENTITY
是用于 VSphereClusterIdentity
对象的名称。SECRET-NAME
是您在上面为客户端密钥提供的名称。使用该文件创建 VsphereClusterIdentity
对象:
kubectl apply -f identity.yaml
管理集群现在可以将工作负载集群部署到备用帐户。
要将工作负载集群部署到帐户,请执行以下操作:
运行 tanzu cluster create --dry-run
来创建集群清单。
编辑清单中的 VSphereCluster
定义,将其 VSphereClusterIdentity
对象的 spec.identityRef.name
值设置为您在上面创建的 EXAMPLE-IDENTITY
:
...
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereCluster
metadata:
name: new-workload-cluster
spec:
identityRef:
kind: VSphereClusterIdentity
name: EXAMPLE-IDENTITY
...
运行 kubectl apply -f my-cluster-manifest.yaml
以创建工作负载集群。
创建工作负载集群后,使用备用帐户凭据登录到 vSphere,您应该会看到其正在运行。
有关详细信息,请参见集群 API 提供程序 vSphere 存储库中的身份管理。
注意此功能无法按预期工作;如果标记数据存储集群中的多个数据存储作为工作负载集群存储策略的基础,则工作负载集群仅使用其中一个数据存储。
要使工作负载集群能够使用数据存储集群而不是单个数据存储,请设置以数据存储集群中的所有数据存储为目标的存储策略,如下所示:
创建标记并将其与相关数据存储相关联:
Datastore
作为可关联的对象类型。按照为基于标记的放置创建虚拟机存储策略创建基于标记的存储策略。
在集群配置文件中:
VSPHERE_STORAGE_POLICY_ID
设置为在上一步中创建的存储策略的名称。VSPHERE_DATASTORE
。VSPHERE_DATASTORE
设置将替代存储策略设置。要部署同时具有基于 Windows 和 Linux 的工作节点的多操作系统工作负载集群,请创建自定义 Windows 计算机映像,部署 Windows 工作负载集群,然后添加 Linux MachineDeployment
以将仅 Windows 工作负载集群转换为多操作系统集群。
多操作系统集群可以托管 Windows 和 Linux 工作负载,同时在它们所属的工作节点上运行基于 Linux 的 TKG 组件。
创建 YAML 文件(例如,win-osimage.yaml
),以便在创建 Windows 计算机映像时在管理集群中添加指向模板的 OSImage。
您可以使用以下 YAML 文件示例。将 spec.image.ref.template
值更改为您创建的 Windows 模板的位置。路径特定于 vSphere 环境。
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: OSImage
metadata:
name: v1.26.8---vmware.2-tkg.1-windows
spec:
image:
ref:
template: /dc0/vm/windows-2019-kube-v1.26.8
version: v1.26.8+vmware.2-tkg.1-windows
type: ova
kubernetesVersion: v1.26.8+vmware.2
os:
arch: amd64
name: windows
type: windows
version: "2019"
运行 kubectl apply -f win-osimage.yaml
以添加 OSImage。
将新的 OSImage 和 tkg-windows
软件包添加到要用于 MultiOS 集群的 TKR,以便成功执行 TKR 解析和 Webhook 验证,并且可以安装 Windows 组件。
使用以下命令编辑 TKR,在 spec.osImages
中将 OSImage 作为新项目添加,并将 tkg-windows
软件包在 spec.bootstrapPackages
中作为新项目添加。
$ kubectl edit tkr v1.26.8---vmware.2-tkg.1
可以在官方存储库中找到 tkg-windows
软件包,其中包含 tanzu package available list tkg-windows.tanzu.vmware.com
。以下是有效 Tkr 的示例:
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TanzuKubernetesRelease
metadata:
name: v1.26.8---vmware.2-tkg.1
spec:
bootstrapPackages:
# Add the tkg-windows package to this list AND keep the other packages already listed here under bootstrapPackages.
- name: tkg-windows.tanzu.vmware.com.0.30.2+vmware.1
osImages:
# Add the Windows OSImage name to this list AND keep the other images already listed here under osImages.
- name: v1.26.8---vmware.2-tkg.1-windows
注意TKR 控制器管理器不会覆盖对 TKR 的此编辑,即使 TKR 控制器管理器不断协调 TKG 存储库中的 TKR 与内部存储库,其重新协调不会导致编辑,而只会创建缺少的新 TKR
确认您的 MultiOS 集群配置文件具有以下参数:
IS_WINDOWS_WORKLOAD_CLUSTER: "true"
通过运行以下命令创建基于类的集群对象规范:
tanzu cluster create my-cluster --file my-cluster-config.yaml --dry-run > my-cluster-spec.yaml
其中:
WINDOWS-CLUSTER
是 Windows 集群的名称。CLUSTER-CONFIG
是配置文件的名称。将新的 tkg-worker
计算机部署类添加到 my-cluster-spec.yaml
中的集群对象。确保注释正确无误,以便 TKG 可以搜索 OSImage
对象。
您可以将新的 tkg-worker
规范添加到类似于以下示例的 spec.workers.machineDeployments
:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: WINDOWS-CLUSTER
spec:
workers:
machineDeployments:
- class: tkg-worker
metadata:
annotations:
run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=photon
name: md-0-l
replicas: 1
- class: tkg-worker-windows
metadata:
annotations:
run.tanzu.vmware.com/resolve-os-image: image-type=ova,os-name=windows
name: md-0
replicas: 1
通过运行以下命令,部署多操作系统集群:
tanzu cluster create my-cluster -f my-cluster-spec.yaml
节点使用众所周知的标签、注释和染色中的操作系统信息进行标记和染色。
注意不支持备份和还原多操作系统工作负载集群。
如果部署 Windows 或 MultiOS 集群,必须确保分布式端口组将某些安全策略设置为 Reject
。例如,如果混杂模式设置为 Accept
,节点可以在 Ready
和 NotReady
状态之间交替使用。
在 vSphere Client 中,选择用于 Windows 节点的网络,转到虚拟分布式交换机 > 分布式端口组安全策略设置,然后将这些策略设置为 Reject
: