vSphere 上的集群

以下几节介绍了如何配置 Tanzu Kubernetes Grid (TKG) 工作负载集群以使用特定于具有独立管理集群的 vSphere 的功能。这些功能在集群的平面配置文件或 Kubernetes 样式对象规范中无法完全配置。

有关如何使用配置文件和对象规范在 vSphere 上配置工作负载集群的信息,请参见:

使用自定义 OVA 映像部署集群

如果对每个版本的 Kubernetes 使用单个自定义 OVA 映像,以在一个操作系统上部署集群,请将 OVA 导入到 vSphere,然后使用 --tkr 选项将其指定为 tanzu cluster create

但是,如果要将多个自定义 OVA 映像用于同一 Kubernetes 版本,则 --tkr 值不明确。当 OVA 用于相同的 Kubernetes 版本时会发生这种情况:

  • 例如,通过 make build-node-ova-vsphere-ubuntu-1804make build-node-ova-vsphere-photon-3make build-node-ova-vsphere-rhel-7 创建不同的操作系统。
  • 名称相同,但驻留在不同的 vCenter 文件夹中。

要解决此不明确性,请先将 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:

    1. 安装 govc。有关安装说明,请参见 GitHub 上的 govmomi 存储库。
    2. govc 设置环境变量以访问 vCenter:
      • export GOVC_USERNAME=VCENTER-USERNAME
      • export GOVC_PASSWORD=VCENTER-PASSWORD
      • export GOVC_URL=VCENTER-URL
      • export GOVC_INSECURE=1
    3. 运行 govc find / -type m 并在输出中查找映像名称,该输出按对象的完整清单路径列出对象。

有关自定义 OVA 映像的详细信息,请参见构建计算机映像

使用 CSI 的地域标记和区域标记部署集群

您可以为工作负载集群指定地域和区域,以将其与为 vSphere CSI(云存储接口)配置的地域标记和区域标记集成在一起。对于跨多个区域的集群,这允许工作节点查找并使用共享存储,即使这些节点在没有存储单元的区域中运行,例如在电信无线访问网络 (RAN) 中运行。

要部署具有启用共享存储的地域标记和区域标记的工作负载集群 vSphere CSI:

  1. 在 vCenter Server 上创建标记:

    1. 遵循创建和编辑标记类别在 vCenter Server 上创建标记类别。例如,k8s-regionk8s-zone
    2. 按照创建和编辑 vSphere 标记在数据中心内的地域和区域类别中创建标记,如下表所示:

      类别 标记
      k8s-zone zone-a
      zone-b
      zone-c
      k8s-region region-1

  2. 按照表中所示分配或移除 vSphere 标记为数据中心创建集群的相应标记。

    vSphere 对象 标记
    datacenter region-1
    cluster1 zone-a
    cluster2 zone-b
    cluster3 zone-c
  3. 要为 vSphere 工作负载集群的 CSI 驱动程序启用自定义地域和区域,请将集群配置文件中的变量 VSPHERE_REGIONVSPHERE_ZONE 设置为上面的标记。例如:

    VSPHERE_REGION: region-1
    VSPHERE_ZONE: zone-a
    

    当 Tanzu CLI 使用这些变量集创建工作负载集群时,其会使用拓扑键 failure-domain.beta.kubernetes.io/zonefailure-domain.beta.kubernetes.io/region 标记每个集群节点。

  4. 运行 tanzu cluster create 以创建工作负载集群,如创建基于计划的集群或 TKC 集群中所述。

  5. 创建集群并将 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 驱动程序 - 使用拓扑的部署

不同 vSphere 帐户上的集群

Tanzu Kubernetes Grid 可以在多个目标平台帐户上运行工作负载集群,例如在不同的团队之间拆分云使用情况,或者将不同的安全配置文件应用于生产、转储和开发工作负载。

要将工作负载集群部署到备用 vSphere 帐户(不同于用于部署其管理集群的帐户),请执行以下操作:

  1. kubectl 的上下文设置为管理集群:

    kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
    

    其中,MY-MGMT-CLUSTER 是管理集群的名称。

  2. 使用以下内容创建 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-USERNAMEVSPHERE-PASSWORD 是可访问备用 vSphere 帐户的登录凭据。
  3. 使用该文件创建 Secret 对象:

    kubectl apply -f secret.yaml
    
  4. 创建包含以下内容的 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 是您在上面为客户端密钥提供的名称。
  5. 使用该文件创建 VsphereClusterIdentity 对象:

    kubectl apply -f identity.yaml
    

管理集群现在可以将工作负载集群部署到备用帐户。

要将工作负载集群部署到帐户,请执行以下操作:

  1. 运行 tanzu cluster create --dry-run 来创建集群清单。

  2. 编辑清单中的 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
    ...
    
  3. 运行 kubectl apply -f my-cluster-manifest.yaml 以创建工作负载集群。

创建工作负载集群后,使用备用帐户凭据登录到 vSphere,您应该会看到其正在运行。

有关详细信息,请参见集群 API 提供程序 vSphere 存储库中的身份管理

部署使用数据存储集群的集群

注意

此功能无法按预期工作;如果标记数据存储集群中的多个数据存储作为工作负载集群存储策略的基础,则工作负载集群仅使用其中一个数据存储。

要使工作负载集群能够使用数据存储集群而不是单个数据存储,请设置以数据存储集群中的所有数据存储为目标的存储策略,如下所示:

  1. 创建标记并将其与相关数据存储相关联:

    1. 遵循创建、编辑或删除标记类别在 vCenter Server 上创建标记类别。确保类别将 Datastore 作为可关联的对象类型。
    2. 按照创建标记在上一步中创建的类别中创建标记。
    3. 按照分配或移除标记将新标记与属于数据存储集群的所有数据存储相关联。
  2. 按照为基于标记的放置创建虚拟机存储策略创建基于标记的存储策略。

  3. 在集群配置文件中:

    • VSPHERE_STORAGE_POLICY_ID 设置为在上一步中创建的存储策略的名称。
    • 确保未设置 VSPHERE_DATASTOREVSPHERE_DATASTORE 设置将替代存储策略设置。

部署多操作系统工作负载集群

要部署同时具有基于 Windows 和 Linux 的工作节点的多操作系统工作负载集群,请创建自定义 Windows 计算机映像,部署 Windows 工作负载集群,然后添加 Linux MachineDeployment 以将仅 Windows 工作负载集群转换为多操作系统集群。

多操作系统集群可以托管 Windows 和 Linux 工作负载,同时在它们所属的工作节点上运行基于 Linux 的 TKG 组件。

  1. 按照 Windows 自定义计算机映像中的所有过程创建 Windows 计算机映像。
  2. 创建 YAML 文件(例如,win-osimage.yaml),以便在创建 Windows 计算机映像时在管理集群中添加指向模板的 OSImage。

    您可以使用以下 YAML 文件示例。将 spec.image.ref.template 值更改为您创建的 Windows 模板的位置。路径特定于 vSphere 环境。

    apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: OSImage
    metadata:
     name: v1.24.10---vmware.1-tkg.1-windows
    spec:
     image:
       ref:
         template: /dc0/vm/windows-2019-kube-v1.24.10+vmware.1-tkg.1
         version: v1.24.10+vmware.1-tkg.1-windows
       type: ova
     kubernetesVersion: v1.24.10+vmware.1
     os:
       arch: amd64
       name: windows
       type: windows
       version: "2019"
    
  3. 运行 kubectl apply -f win-osimage.yaml 以添加 OSImage。

  4. 将 TKR 版本添加到 spec.osImages,以便成功执行 TKR 解析和 Webhook 验证。使用以下命令将 TKR 版本添加到 spec.osImages

    $ kubectl edit tkr v1.24.10---vmware.x-tkg.x
    apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: TanzuKubernetesRelease
    metadata:
      name: v1.24.10---vmware.x-tkg.x
    spec:
      bootstrapPackages:
      # Keep the other packages listed here.
      - name: tkg-windows.tanzu.vmware.com.0.28.1+vmware.1
      osImages:
      # Keep the other images listed here.
      - name: v1.24.10---vmware.1-tkg.1-windows
    

    在 TKR 上,通过在 tkg-windows 中添加新项来启用 spec.bootstrapPackages 软件包。可以使用 tanzu package available list tkg-windows.tanzu.vmware.com 在官方存储库中找到软件包。以下是有效 TKR 的示例:

  5. 通过运行以下命令创建基于类的集群对象规范:

    tanzu cluster create my-cluster --file my-cluster-config.yaml --dry-run > my-cluster-spec.yaml
    

    其中: * WINDOWS-CLUSTER 是 Windows 集群的名称。* CLUSTER-CONFIG 是配置文件的名称。

  6. 将新的 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
    
  7. 通过运行以下命令,部署多操作系统集群:

    tanzu cluster create my-cluster -f my-cluster-spec.yaml

节点使用众所周知的标签、注释和染色中的操作系统信息进行标记和染色。

注意

不支持备份和还原多操作系统工作负载集群。

Windows Antrea CNI 可靠性

HNS 网络在 Windows 上不持久。Windows 节点重新引导后,将移除 antrea-agent 创建的 HNS 网络,并且默认情况下禁用 Open vSwitch 扩展。因此,Windows 节点重新引导后,请移除失效的 OVS 网桥和端口。您可以使用帮助脚本 Clean-AntreaNetwork.ps1 清理 OVS 网桥。

使用以下方法之一安装帮助脚本:

  • 手动安装
  • 自动安装

手动安装

要在每个隔离的工作负载节点上手动安装帮助脚本,请执行以下操作:

  1. 本代码示例中下载 Clean-AntreaNetwork.ps1 安装脚本。下载的安装脚本 snippet.ps1 将安装 Clean-AntreaNetwork.ps1
  2. 通过 SSH 登录到节点,然后运行以下命令。

    powershell snippet.ps1
    

自动安装

要创建自定义 ClusterClass 以在每个新的工作负载节点上自动安装帮助脚本,请执行以下操作:

  1. 按照创建 ClusterClass 中的步骤创建自定义 ClusterClass 对象。
  2. 使用 YTT 从以下代码示例应用修补程序,并在管理集群上应用规范:

    ytt -f custom-cluster-class.yaml -f snippet.yaml | kubectl apply -f -
    

分布式端口组安全性说明

如果部署 Windows 或 MultiOS 集群,必须确保分布式端口组将某些安全策略设置为 Reject。例如,如果混杂模式设置为 Accept,节点可以在 ReadyNotReady 状态之间交替使用。

在 vSphere Client 中,选择用于 Windows 节点的网络,转到虚拟分布式交换机 > 分布式端口组安全策略设置,然后将这些策略设置为 Reject

  • 混杂模式
  • MAC 地址更改
  • 伪信号
check-circle-line exclamation-circle-line close-line
Scroll to top icon