×

您可以创建不同的计算机器集来满足您在 Red Hat OpenStack Platform (RHOSP) 上的 OpenShift Container Platform 集群中的特定用途。例如,您可以创建基础设施机器集和相关机器,以便您可以将支持的工作负载迁移到新机器。

您只能在 Machine API 运行的集群中使用高级机器管理和缩放功能。具有用户预配基础设施的集群需要额外的验证和配置才能使用 Machine API。

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

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

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

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

此示例 YAML 定义了一个在 Red Hat OpenStack Platform (RHOSP) 上运行的计算机器集,并创建用node-role.kubernetes.io/<role>: ""标记的节点。

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

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
    machine.openshift.io/cluster-api-machine-role: <role> (2)
    machine.openshift.io/cluster-api-machine-type: <role> (2)
  name: <infrastructure_id>-<role> (3)
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (3)
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
        machine.openshift.io/cluster-api-machine-role: <role> (2)
        machine.openshift.io/cluster-api-machine-type: <role> (2)
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (3)
    spec:
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          serverGroupID: <optional_UUID_of_server_group> (4)
          kind: OpenstackProviderSpec
          networks: (5)
          - filter: {}
            subnets:
            - filter:
                name: <subnet_name>
                tags: openshiftClusterID=<infrastructure_id> (1)
          primarySubnet: <rhosp_subnet_UUID> (6)
          securityGroups:
          - filter: {}
            name: <infrastructure_id>-worker (1)
          serverMetadata:
            Name: <infrastructure_id>-worker (1)
            openshiftClusterID: <infrastructure_id> (1)
          tags:
          - openshiftClusterID=<infrastructure_id> (1)
          trunk: true
          userDataSecret:
            name: worker-user-data (2)
          availabilityZone: <optional_openstack_availability_zone>
1 指定基于您在预配集群时设置的集群 ID 的基础设施 ID。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取基础设施 ID
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 指定要添加的节点标签。
3 指定基础设施 ID 和节点标签。
4 要为 MachineSet 设置服务器组策略,请输入从创建服务器组返回的值。对于大多数部署,建议使用anti-affinitysoft-anti-affinity策略。
5 对于多网络部署是必需的。要指定多个网络,请在 networks 数组中添加另一个条目。此外,您必须包含用作primarySubnet值的网络。
6 指定您希望节点的端点在其上发布的 RHOSP 子网。通常,这与install-config.yaml文件中machinesSubnet的值相同。

在 RHOSP 上使用 SR-IOV 的计算机器集自定义资源的示例 YAML

如果您已将集群配置为单根 I/O 虚拟化 (SR-IOV),则可以创建使用该技术的计算机器集。

此示例 YAML 定义了一个使用 SR-IOV 网络的计算机器集。它创建的节点用node-role.openshift.io/<node_role>: ""标记。

在此示例中,infrastructure_id 是基于您在预配集群时设置的集群 ID 的基础设施 ID 标签,node_role 是要添加的节点标签。

此示例假设两个名为“radio”和“uplink”的 SR-IOV 网络。这些网络在spec.template.spec.providerSpec.value.ports列表中的端口定义中使用。

本示例中仅描述了 SR-IOV 部署特有的参数。要查看更通用的示例,请参阅“RHOSP 上计算机器集自定义资源的示例 YAML”。

使用 SR-IOV 网络的示例计算机器集
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
    machine.openshift.io/cluster-api-machine-role: <node_role>
    machine.openshift.io/cluster-api-machine-type: <node_role>
  name: <infrastructure_id>-<node_role>
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <node_role>
        machine.openshift.io/cluster-api-machine-type: <node_role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
    spec:
      metadata:
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          serverGroupID: <optional_UUID_of_server_group>
          kind: OpenstackProviderSpec
          networks:
            - subnets:
              - UUID: <machines_subnet_UUID>
          ports:
            - networkID: <radio_network_UUID> (1)
              nameSuffix: radio
              fixedIPs:
                - subnetID: <radio_subnet_UUID> (2)
              tags:
                - sriov
                - radio
              vnicType: direct (3)
              portSecurity: false (4)
            - networkID: <uplink_network_UUID> (1)
              nameSuffix: uplink
              fixedIPs:
                - subnetID: <uplink_subnet_UUID> (2)
              tags:
                - sriov
                - uplink
              vnicType: direct (3)
              portSecurity: false (4)
          primarySubnet: <machines_subnet_UUID>
          securityGroups:
          - filter: {}
            name: <infrastructure_id>-<node_role>
          serverMetadata:
            Name: <infrastructure_id>-<node_role>
            openshiftClusterID: <infrastructure_id>
          tags:
          - openshiftClusterID=<infrastructure_id>
          trunk: true
          userDataSecret:
            name: <node_role>-user-data
          availabilityZone: <optional_openstack_availability_zone>
1 为每个端口输入网络 UUID。
2 为每个端口输入子网 UUID。
3 每个端口的vnicType参数的值必须为direct
4 每个端口的portSecurity参数的值必须为false

禁用端口安全性时,您无法为端口设置安全组和允许的地址对。在实例上设置安全组会将这些组应用于附加到它的所有端口。

部署支持 SR-IOV 的计算机器后,您必须对其进行相应标记。例如,从命令行输入

$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"

为 networks 和 subnets 列表中的条目创建的端口启用了 Trunk 功能。从这些列表创建的端口名称遵循模式<machine_name>-<nameSuffix>nameSuffix字段在端口定义中是必需的。

您可以为每个端口启用 Trunk 功能。

或者,您可以将标签添加到端口作为其tags列表的一部分。

禁用端口安全性的 SR-IOV 部署的示例 YAML

要在已禁用端口安全性的网络上创建单根 I/O 虚拟化 (SR-IOV) 端口,请定义一个计算机器集,其中包含作为spec.template.spec.providerSpec.value.ports列表中项目的端口。这与标准 SR-IOV 计算机器集的不同之处在于,使用网络和子网接口创建的端口会自动进行安全组和允许的地址对配置。

为机器子网定义的端口需要:

  • API 和入站虚拟 IP 端口的允许地址对

  • 计算安全组

  • 连接到机器网络和子网

本示例中仅描述了在禁用端口安全性的 SR-IOV 部署中特有的参数。要查看更通用的示例,请参阅“使用 RHOSP 上的 SR-IOV 的计算机器集自定义资源的示例 YAML”。

使用 SR-IOV 网络且已禁用端口安全性的计算机器集示例
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
    machine.openshift.io/cluster-api-machine-role: <node_role>
    machine.openshift.io/cluster-api-machine-type: <node_role>
  name: <infrastructure_id>-<node_role>
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <node_role>
        machine.openshift.io/cluster-api-machine-type: <node_role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
    spec:
      metadata: {}
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          kind: OpenstackProviderSpec
          ports:
            - allowedAddressPairs: (1)
              - ipAddress: <API_VIP_port_IP>
              - ipAddress: <ingress_VIP_port_IP>
              fixedIPs:
                - subnetID: <machines_subnet_UUID> (2)
              nameSuffix: nodes
              networkID: <machines_network_UUID> (2)
              securityGroups:
                  - <compute_security_group_UUID> (3)
            - networkID: <SRIOV_network_UUID>
              nameSuffix: sriov
              fixedIPs:
                - subnetID: <SRIOV_subnet_UUID>
              tags:
                - sriov
              vnicType: direct
              portSecurity: False
          primarySubnet: <machines_subnet_UUID>
          serverMetadata:
            Name: <infrastructure_ID>-<node_role>
            openshiftClusterID: <infrastructure_id>
          tags:
          - openshiftClusterID=<infrastructure_id>
          trunk: false
          userDataSecret:
            name: worker-user-data
1 指定 API 和入口端口的允许地址对。
2 指定机器网络和子网。
3 指定计算机器安全组。

为 networks 和 subnets 列表中的条目创建的端口启用了 Trunk 功能。从这些列表创建的端口名称遵循模式<machine_name>-<nameSuffix>nameSuffix字段在端口定义中是必需的。

您可以为每个端口启用 Trunk 功能。

或者,您可以将标签添加到端口作为其tags列表的一部分。

创建计算机器集

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

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

  • 安装 OpenShift CLI (oc)。

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

步骤
  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. 通过运行以下命令创建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参数指定此标签的值。有关更多信息,请参阅“集群自动缩放器资源定义”。