×

您可以创建不同的计算机器集以在您的VMware vSphere上的OpenShift Container Platform集群中服务特定目的。例如,您可以创建基础架构机器集和相关机器,以便您可以将支持的工作负载移动到新机器。

您只能在Machine API正在运行的集群中使用高级机器管理和扩展功能。具有用户配置基础架构的集群需要额外的验证和配置才能使用Machine API。

基础架构平台类型为none的集群无法使用Machine API。即使连接到集群的计算机器安装在支持此功能的平台上,此限制也适用。此参数安装后无法更改。

要查看集群的平台类型,请运行以下命令

$ oc get infrastructure cluster -o jsonpath='{.status.platform}'

vSphere上计算机器集自定义资源的示例YAML

此示例YAML定义在VMware vSphere上运行的计算机器集,并创建标有node-role.kubernetes.io/<role>: ""的节点。

在此示例中,<infrastructure_id>是基于您在配置集群时设置的集群ID的基础架构ID标签,<role>是要添加的节点标签。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  creationTimestamp: null
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
  name: <infrastructure_id>-<role> (2)
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (2)
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
        machine.openshift.io/cluster-api-machine-role: <role> (3)
        machine.openshift.io/cluster-api-machine-type: <role> (3)
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (2)
    spec:
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/<role>: "" (3)
      providerSpec:
        value:
          apiVersion: vsphereprovider.openshift.io/v1beta1
          credentialsSecret:
            name: vsphere-cloud-credentials
          diskGiB: 120
          kind: VSphereMachineProviderSpec
          memoryMiB: 8192
          metadata:
            creationTimestamp: null
          network:
            devices:
            - networkName: "<vm_network_name>" (4)
          numCPUs: 4
          numCoresPerSocket: 1
          snapshot: ""
          template: <vm_template_name> (5)
          userDataSecret:
            name: worker-user-data
          workspace:
            datacenter: <vcenter_data_center_name> (6)
            datastore: <vcenter_datastore_name> (7)
            folder: <vcenter_vm_folder_path> (8)
            resourcepool: <vsphere_resource_pool> (9)
            server: <vcenter_server_ip> (10)
1 指定基于您在配置集群时设置的集群ID的基础架构ID。如果您已安装OpenShift CLI (oc),则可以通过运行以下命令获取基础架构ID
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 指定基于集群ID的基础架构ID和节点标签。
3 指定要添加的节点标签。
4 指定要将计算机器集部署到的vSphere虚拟机网络。此虚拟机网络必须是集群中其他计算机器所在的位置。
5 指定要使用的vSphere虚拟机模板,例如user-5ddjd-rhcos
6 指定部署计算机器集的vCenter数据中心。
7 指定部署计算机器集的vCenter数据存储。
8 指定vCenter中vSphere虚拟机文件夹的路径,例如/dc1/vm/user-inst-5ddjd
9 指定虚拟机的vSphere资源池。
10 指定vCenter服务器IP地址或完全限定域名。

管理计算机器集所需的最低vCenter权限

要在vCenter上的OpenShift Container Platform集群中管理计算机器集,您必须使用具有读取、创建和删除所需资源权限的帐户。使用具有全局管理员权限的帐户是访问所有必要权限的最简单方法。

如果您无法使用具有全局管理员权限的帐户,则必须创建角色以授予所需的最低权限。下表列出了创建、扩展和删除计算机器集以及删除OpenShift Container Platform集群中机器所需的最低vCenter角色和权限。

管理计算机器集所需的最低vCenter角色和权限
角色的vSphere对象 何时需要 所需权限

vSphere vCenter

始终

InventoryService.Tagging.AttachTag
InventoryService.Tagging.CreateCategory
InventoryService.Tagging.CreateTag
InventoryService.Tagging.DeleteCategory
InventoryService.Tagging.DeleteTag
InventoryService.Tagging.EditCategory
InventoryService.Tagging.EditTag
Sessions.ValidateSession
StorageProfile.Update1
StorageProfile.View1

vSphere vCenter集群

始终

Resource.AssignVMToPool

vSphere数据存储

始终

Datastore.AllocateSpace
Datastore.Browse

vSphere端口组

始终

Network.Assign

虚拟机文件夹

始终

VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.CPUCount
VirtualMachine.Config.DiskExtend
VirtualMachine.Config.Memory
VirtualMachine.Config.Settings
VirtualMachine.Interact.PowerOff
VirtualMachine.Interact.PowerOn
VirtualMachine.Inventory.CreateFromExisting
VirtualMachine.Inventory.Delete
VirtualMachine.Provisioning.Clone

vSphere vCenter数据中心

如果安装程序创建虚拟机文件夹

Resource.AssignVMToPool
VirtualMachine.Provisioning.DeployTemplate

1 StorageProfile.UpdateStorageProfile.View 权限仅对于使用容器存储接口 (CSI) 的存储后端才需要。

下表详细说明了管理计算机器集所需的权限和传播设置。

所需的权限和传播设置
vSphere对象 文件夹类型 传播到子项 所需权限

vSphere vCenter

始终

不需要

列出的所需权限

vSphere vCenter数据中心

现有文件夹

不需要

只读权限

安装程序创建文件夹

需要

列出的所需权限

vSphere vCenter集群

始终

需要

列出的所需权限

vSphere vCenter数据存储

始终

不需要

列出的所需权限

vSphere交换机

始终

不需要

只读权限

vSphere端口组

始终

不需要

列出的所需权限

vSphere vCenter虚拟机文件夹

现有文件夹

需要

列出的所需权限

有关仅创建具有所需权限的帐户的更多信息,请参阅vSphere文档中的vSphere权限和用户管理任务

使用计算机器集的用户自备基础架构集群的要求

要在具有用户自备基础架构的集群上使用计算机器集,您必须确保集群配置支持使用Machine API。

获取基础架构ID

要创建计算机器集,您必须能够提供集群的基础架构ID。

步骤
  • 要获取集群的基础架构ID,请运行以下命令

    $ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'

满足vSphere凭据要求

要使用计算机器集,Machine API必须能够与vCenter交互。授权Machine API组件与vCenter交互的凭据必须存在于openshift-machine-api命名空间中的密钥中。

步骤
  1. 要确定所需凭据是否存在,请运行以下命令

    $ oc get secret \
      -n openshift-machine-api vsphere-cloud-credentials \
      -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
    示例输出
    <vcenter-server>.password=<openshift-user-password>
    <vcenter-server>.username=<openshift-user>

    其中<vcenter-server>是vCenter服务器的IP地址或完全限定域名(FQDN),<openshift-user><openshift-user-password>是要使用的OpenShift Container Platform管理员凭据。

  2. 如果密钥不存在,请通过运行以下命令创建它

    $ oc create secret generic vsphere-cloud-credentials \
      -n openshift-machine-api \
      --from-literal=<vcenter-server>.username=<openshift-user> --from-literal=<vcenter-server>.password=<openshift-user-password>

满足Ignition配置要求

预配虚拟机 (VM) 需要有效的Ignition配置。Ignition配置包含machine-config-server地址和用于从Machine Config Operator获取更多Ignition配置的系统信任捆绑包。

默认情况下,此配置存储在machine-api-operator命名空间中的worker-user-data密钥中。计算机器集在机器创建过程中引用该密钥。

步骤
  1. 要确定所需密钥是否存在,请运行以下命令

    $ oc get secret \
      -n openshift-machine-api worker-user-data \
      -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
    示例输出
    disableTemplating: false
    userData: (1)
      {
        "ignition": {
          ...
          },
        ...
      }
    1 此处省略完整输出,但应具有此格式。
  2. 如果密钥不存在,请通过运行以下命令创建它

    $ oc create secret generic worker-user-data \
      -n openshift-machine-api \
      --from-file=<installation_directory>/worker.ign

    其中<installation_directory>是在集群安装期间用于存储安装资源的目录。

创建计算机器集

除了安装程序创建的计算机器集之外,您还可以创建自己的计算机器集,以动态管理您选择的特定工作负载的机器计算资源。

使用用户自备基础架构安装的集群与安装程序预配的基础架构集群具有不同的网络堆栈。由于这种差异,在具有用户自备基础架构的集群上不支持自动负载均衡器管理。对于这些集群,计算机器集只能创建workerinfra类型的机器。

先决条件
  • 部署OpenShift Container Platform集群。

  • 安装OpenShift CLI (oc)。

  • 以具有cluster-admin权限的用户身份登录到oc

  • 具有在您的vCenter实例中部署虚拟机的必要权限,并具有对指定数据存储的所需访问权限。

  • 如果您的集群使用用户自备基础架构,则您已满足该配置的特定Machine API要求。

步骤
  1. 创建一个包含计算机器集自定义资源 (CR) 示例的新YAML文件,并将其命名为<file_name>.yaml

    确保您设置了<clusterID><role>参数值。

  2. 可选:如果您不确定为特定字段设置哪个值,您可以检查集群中现有的计算机器集。

    1. 要列出集群中的计算机器集,请运行以下命令

      $ oc get machinesets -n openshift-machine-api
      示例输出
      NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
      agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1d   0         0                             55m
      agl030519-vplxk-worker-us-east-1e   0         0                             55m
      agl030519-vplxk-worker-us-east-1f   0         0                             55m
    2. 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令

      $ oc get machineset <machineset_name> \
        -n openshift-machine-api -o yaml
      示例输出
      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
        name: <infrastructure_id>-<role> (2)
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: (3)
              ...
      1 集群基础架构ID。
      2 默认节点标签。

      对于具有用户自备基础架构的集群,计算机器集只能创建workerinfra类型的机器。

      3 计算机器集CR的<providerSpec>部分中的值是特定于平台的。有关CR中<providerSpec>参数的更多信息,请参阅您的提供程序的示例计算机器集CR配置。
    3. 如果您要为具有用户自备基础架构的集群创建计算机器集,请注意以下重要值

      示例vSphere providerSpec
      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      ...
      template:
        ...
        spec:
          providerSpec:
            value:
              apiVersion: machine.openshift.io/v1beta1
              credentialsSecret:
                name: vsphere-cloud-credentials (1)
              diskGiB: 120
              kind: VSphereMachineProviderSpec
              memoryMiB: 16384
              network:
                devices:
                  - networkName: "<vm_network_name>"
              numCPUs: 4
              numCoresPerSocket: 4
              snapshot: ""
              template: <vm_template_name> (2)
              userDataSecret:
                name: worker-user-data (3)
              workspace:
                datacenter: <vcenter_data_center_name>
                datastore: <vcenter_datastore_name>
                folder: <vcenter_vm_folder_path>
                resourcepool: <vsphere_resource_pool>
                server: <vcenter_server_address> (4)
      1 包含所需vCenter凭据的openshift-machine-api命名空间中密钥的名称。
      2 安装期间创建的集群的RHCOS虚拟机模板的名称。
      3 包含所需Ignition配置凭据的openshift-machine-api命名空间中密钥的名称。
      4 vCenter 服务器的 IP 地址或完全限定域名 (FQDN)。
  3. 运行以下命令创建 MachineSet CR:

    $ oc create -f <file_name>.yaml
验证
  • 运行以下命令查看计算机器集列表:

    $ oc get machineset -n openshift-machine-api
    示例输出
    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-infra-us-east-1a    1         1         1       1           11m
    agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1d   0         0                             55m
    agl030519-vplxk-worker-us-east-1e   0         0                             55m
    agl030519-vplxk-worker-us-east-1f   0         0                             55m

    当新的计算机器集可用时,DESIREDCURRENT 值将匹配。如果计算机器集不可用,请等待几分钟,然后再次运行该命令。

为集群自动伸缩器标记 GPU 机器集

您可以使用机器集标签来指示集群自动伸缩器可以使用哪些机器来部署启用 GPU 的节点。

先决条件
  • 您的集群使用集群自动伸缩器。

步骤
  • 在您要为其创建机器的机器集上,以便集群自动伸缩器可以使用这些机器来部署启用 GPU 的节点,添加 cluster-api/accelerator 标签。

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      name: machine-set-name
    spec:
      template:
        spec:
          metadata:
            labels:
              cluster-api/accelerator: nvidia-t4 (1)
    1 指定您选择的标签,该标签由字母数字字符、-_. 组成,并且以字母数字字符开头和结尾。例如,您可以使用 nvidia-t4 来表示 Nvidia T4 GPU,或使用 nvidia-a10g 来表示 A10G GPU。

    您必须为 ClusterAutoscaler CR 中的 spec.resourceLimits.gpus.type 参数指定此标签的值。有关更多信息,请参见“集群自动伸缩器资源定义”。

使用机器集向机器添加标签

OpenShift Container Platform 会向其创建的每个虚拟机 (VM) 添加一个特定于集群的标签。安装程序使用这些标签来选择在卸载集群时要删除的 VM。

除了分配给 VM 的特定于集群的标签外,您还可以配置机器集,以便最多向其配置的 VM 添加 10 个 vSphere 标签。

先决条件
  • 您可以使用具有 cluster-admin 权限的帐户访问安装在 vSphere 上的 OpenShift Container Platform 集群。

  • 您可以访问与您的集群关联的 VMware vCenter 控制台。

  • 您已在 vCenter 控制台中创建了一个标签。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 使用 vCenter 控制台查找要添加到机器的任何标签的标签 ID。

    1. 登录到 vCenter 控制台。

    2. 从“主页”菜单中,单击“标签和自定义属性”。

    3. 选择要添加到机器的标签。

    4. 使用您选择的标签的浏览器 URL 来标识标签 ID。

      标签 URL 示例
      https://vcenter.example.com/ui/app/tags/tag/urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL/permissions
      标签 ID 示例
      urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL
  2. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。

  3. 编辑 providerSpec 字段下的以下行:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    # ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              tagIDs: (1)
              - <tag_id_value> (2)
    # ...
    1 指定最多 10 个要添加到此机器集配置的机器的标签列表。
    2 指定要添加到机器的标签的值。例如,urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL