×

您可以创建不同的计算机器集以在 Google Cloud Platform (GCP) 上的 OpenShift Container Platform 集群中服务于特定目的。例如,您可以创建基础设施机器集和相关的机器,以便您可以将支持的工作负载迁移到新机器。

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

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

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

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

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

此 YAML 示例定义了一个在 Google Cloud Platform (GCP) 中运行的计算机器集,并创建带有标签 node-role.kubernetes.io/<role>: "" 的节点,其中 <role> 是要添加的节点标签。

使用 OpenShift CLI 获取的值

在以下示例中,您可以使用 OpenShift CLI 获取集群的一些值。

基础架构 ID

<infrastructure_id> 字符串是基于您在配置集群时设置的集群 ID 的基础架构 ID。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取基础架构 ID:

$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
镜像路径

<path_to_image> 字符串是用于创建磁盘的镜像的路径。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取镜像路径:

$ oc -n openshift-machine-api \
  -o jsonpath='{.spec.template.spec.providerSpec.value.disks[0].image}{"\n"}' \
  get machineset/<infrastructure_id>-worker-a
GCP MachineSet 示例值
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
  name: <infrastructure_id>-w-a
  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>-w-a
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <role> (2)
        machine.openshift.io/cluster-api-machine-type: <role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-w-a
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/<role>: ""
      providerSpec:
        value:
          apiVersion: gcpprovider.openshift.io/v1beta1
          canIPForward: false
          credentialsSecret:
            name: gcp-cloud-credentials
          deletionProtection: false
          disks:
          - autoDelete: true
            boot: true
            image: <path_to_image> (3)
            labels: null
            sizeGb: 128
            type: pd-ssd
          gcpMetadata: (4)
          - key: <custom_metadata_key>
            value: <custom_metadata_value>
          kind: GCPMachineProviderSpec
          machineType: n1-standard-4
          metadata:
            creationTimestamp: null
          networkInterfaces:
          - network: <infrastructure_id>-network
            subnetwork: <infrastructure_id>-worker-subnet
          projectID: <project_name> (5)
          region: us-central1
          serviceAccounts: (6)
          - email: <infrastructure_id>-w@<project_name>.iam.gserviceaccount.com
            scopes:
            - https://www.googleapis.com/auth/cloud-platform
          tags:
            - <infrastructure_id>-worker
          userDataSecret:
            name: worker-user-data
          zone: us-central1-a
1 对于 <infrastructure_id>,请指定基于您在配置集群时设置的集群 ID 的基础架构 ID。
2 对于 <node>,请指定要添加的节点标签。
3 指定当前计算机器集中使用的镜像路径。

要使用 GCP Marketplace 镜像,请指定要使用的产品:

  • OpenShift Container Platform:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-ocp-413-x86-64-202305021736

  • OpenShift Platform Plus:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-opp-413-x86-64-202305021736

  • OpenShift Kubernetes Engine:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-oke-413-x86-64-202305021736

4 可选:以 key:value 对的形式指定自定义元数据。有关用例,请参阅 GCP 关于设置自定义元数据的文档。
5 对于 <project_name>,请指定您用于集群的 GCP 项目的名称。
6 指定单个服务帐号。不支持多个服务帐号。

创建计算机器集

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

先决条件
  • 部署 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 参数指定此标签的值。有关更多信息,请参阅“集群自动缩放器资源定义”。

使用机器集配置持久性磁盘类型

您可以通过编辑机器集 YAML 文件来配置机器集在其上部署机器的持久性磁盘类型。

有关持久性磁盘类型、兼容性、区域可用性和限制的更多信息,请参阅 GCP Compute Engine 关于持久性磁盘的文档。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。

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

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              disks:
                type: <pd-disk-type> (1)
    1 指定持久性磁盘类型。有效值为 pd-ssdpd-standardpd-balanced。默认值为 pd-standard
验证
  • 使用 Google Cloud Console,查看机器集部署的机器的详细信息,并验证 Type 字段是否与配置的磁盘类型匹配。

使用机器集配置机密虚拟机

通过编辑机器集 YAML 文件,您可以配置机器集为其部署的机器使用的机密虚拟机选项。

有关机密虚拟机功能、函数和兼容性的更多信息,请参阅 GCP Compute Engine 关于机密虚拟机的文档。

目前,64 位 ARM 架构不支持机密虚拟机。

OpenShift Container Platform 4.17 不支持某些机密计算功能,例如具有 AMD 安全加密虚拟化安全嵌套分页 (SEV-SNP) 的机密虚拟机。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。

  2. 编辑 providerSpec 字段下的以下部分:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              confidentialCompute: Enabled (1)
              onHostMaintenance: Terminate (2)
              machineType: n2d-standard-8 (3)
    ...
    1 指定是否启用机密虚拟机。有效值为 DisabledEnabled
    2 指定在主机维护事件(例如硬件或软件更新)期间 VM 的行为。对于使用机密虚拟机的机器,此值必须设置为 Terminate,这将停止 VM。机密虚拟机不支持实时 VM 迁移。
    3 指定支持机密虚拟机的机器类型。机密虚拟机支持 N2D 和 C2D 系列机器类型。
验证
  • 在 Google Cloud 控制台中,查看机器集部署的机器详细信息,并验证保密 VM 选项是否与您配置的值匹配。

部署抢占式 VM 实例作为机器的机器集

您可以通过在 GCP 上创建运行抢占式 VM 实例的计算机器集来节省成本。抢占式 VM 实例利用 Compute Engine 的冗余容量,比普通实例更便宜。您可以将抢占式 VM 实例用于可以容忍中断的工作负载,例如批处理或无状态、横向可扩展的工作负载。

GCP Compute Engine 随时可以终止抢占式 VM 实例。Compute Engine 会向用户发送抢占通知,指示将在 30 秒后发生中断。当 Compute Engine 发出抢占通知时,OpenShift Container Platform 开始从受影响的实例中移除工作负载。如果在 30 秒后实例未停止,则会向操作系统发送 ACPI G3 机械关闭信号。然后,Compute Engine 将抢占式 VM 实例转换为TERMINATED状态。

使用抢占式 VM 实例时,可能会发生中断,原因如下:

  • 存在系统或维护事件

  • 抢占式 VM 实例的供应量减少

  • 实例达到抢占式 VM 实例分配的 24 小时期限

当 GCP 终止实例时,在抢占式 VM 实例节点上运行的终止处理程序会删除机器资源。为了满足计算机器集的replicas数量,计算机器集会创建请求抢占式 VM 实例的机器。

使用计算机器集创建抢占式 VM 实例

您可以通过在计算机器集 YAML 文件中添加preemptible来启动 GCP 上的抢占式 VM 实例。

步骤
  • providerSpec字段下添加以下行:

    providerSpec:
      value:
        preemptible: true

    如果将preemptible设置为true,则在启动实例后,该机器将被标记为interruptable-instance

使用机器集配置 Shielded VM 选项

通过编辑机器集 YAML 文件,您可以配置机器集对其部署的机器使用的 Shielded VM 选项。

有关 Shielded VM 功能和功能的更多信息,请参阅有关Shielded VM的 GCP Compute Engine 文档。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。

  2. 编辑 providerSpec 字段下的以下部分:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    # ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              shieldedInstanceConfig: (1)
                integrityMonitoring: Enabled (2)
                secureBoot: Disabled (3)
                virtualizedTrustedPlatformModule: Enabled (4)
    # ...
    1 在本节中,请指定所需的任何 Shielded VM 选项。
    2 指定是否启用完整性监控。有效值为DisabledEnabled

    启用完整性监控时,不得禁用虚拟可信平台模块 (vTPM)。

    3 指定是否启用 UEFI 安全启动。有效值为DisabledEnabled
    4 指定是否启用 vTPM。有效值为DisabledEnabled
验证
  • 使用 Google Cloud 控制台,查看机器集部署的机器详细信息,并验证 Shielded VM 选项是否与您配置的值匹配。

为机器集启用客户管理的加密密钥

Google Cloud Platform (GCP) Compute Engine 允许用户提供加密密钥来加密静止状态磁盘上的数据。该密钥用于加密数据加密密钥,而不是加密客户的数据。默认情况下,Compute Engine 使用 Compute Engine 密钥加密此数据。

您可以在使用机器 API 的集群中启用使用客户管理密钥的加密。您必须首先创建一个 KMS 密钥并为服务帐户分配正确的权限。需要 KMS 密钥名称、密钥环名称和位置才能允许服务帐户使用您的密钥。

如果您不想为 KMS 加密使用专用的服务帐户,则改为使用 Compute Engine 默认服务帐户。如果您不使用专用的服务帐户,则必须授予默认服务帐户访问密钥的权限。Compute Engine 默认服务帐户名称遵循service-<project_number>@compute-system.iam.gserviceaccount.com模式。

步骤
  1. 要允许特定服务帐户使用您的 KMS 密钥并向服务帐户授予正确的 IAM 角色,请使用您的 KMS 密钥名称、密钥环名称和位置运行以下命令:

    $ gcloud kms keys add-iam-policy-binding <key_name> \
      --keyring <key_ring_name> \
      --location <key_ring_location> \
      --member "serviceAccount:service-<project_number>@compute-system.iam.gserviceaccount.com” \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
  2. 在机器集 YAML 文件的providerSpec字段下配置加密密钥。例如:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              disks:
              - type:
                encryptionKey:
                  kmsKey:
                    name: machine-encryption-key (1)
                    keyRing: openshift-encrpytion-ring (2)
                    location: global (3)
                    projectID: openshift-gcp-project (4)
                  kmsKeyServiceAccount: openshift-service-account@openshift-gcp-project.iam.gserviceaccount.com (5)
    1 用于磁盘加密的客户管理加密密钥的名称。
    2 KMS 密钥所属的 KMS 密钥环的名称。
    3 存在 KMS 密钥环的 GCP 位置。
    4 可选:存在 KMS 密钥环的项目的 ID。如果未设置项目 ID,则使用创建机器集的机器集projectID
    5 可选:用于给定 KMS 密钥的加密请求的服务帐户。如果未设置服务帐户,则使用 Compute Engine 默认服务帐户。

    使用更新的providerSpec对象配置创建新机器时,磁盘加密密钥将使用 KMS 密钥加密。

为计算机器集启用 GPU 支持

Google Cloud Platform (GCP) Compute Engine 允许用户向 VM 实例添加 GPU。可以从访问 GPU 资源中受益的工作负载在启用此功能的计算机器上可以获得更好的性能。GCP 上的 OpenShift Container Platform 支持 A2 和 N1 机器系列中的 NVIDIA GPU 型号。

表 1. 支持的 GPU 配置
型号名称 GPU 类型 机器类型[1]

NVIDIA A100

nvidia-tesla-a100

  • a2-highgpu-1g

  • a2-highgpu-2g

  • a2-highgpu-4g

  • a2-highgpu-8g

  • a2-megagpu-16g

NVIDIA K80

nvidia-tesla-k80

  • n1-standard-1

  • n1-standard-2

  • n1-standard-4

  • n1-standard-8

  • n1-standard-16

  • n1-standard-32

  • n1-standard-64

  • n1-standard-96

  • n1-highmem-2

  • n1-highmem-4

  • n1-highmem-8

  • n1-highmem-16

  • n1-highmem-32

  • n1-highmem-64

  • n1-highmem-96

  • n1-highcpu-2

  • n1-highcpu-4

  • n1-highcpu-8

  • n1-highcpu-16

  • n1-highcpu-32

  • n1-highcpu-64

  • n1-highcpu-96

NVIDIA P100

nvidia-tesla-p100

NVIDIA P4

nvidia-tesla-p4

NVIDIA T4

nvidia-tesla-t4

NVIDIA V100

nvidia-tesla-v100

  1. 有关机器类型(包括规格、兼容性、区域可用性和限制)的更多信息,请参阅有关N1 机器系列A2 机器系列GPU 区域和区域可用性的 GCP Compute Engine 文档。

您可以使用机器 API 定义要为实例使用的受支持 GPU。

您可以配置 N1 机器系列中的机器以部署受支持的 GPU 类型之一。A2 机器系列中的机器带有关联的 GPU,不能使用客户加速器。

不支持用于图形工作负载的 GPU。

步骤
  1. 在文本编辑器中,打开现有计算机器集的 YAML 文件或创建一个新文件。

  2. 在计算机器集 YAML 文件的providerSpec字段下指定 GPU 配置。请参阅以下有效配置示例:

    A2 机器系列的配置示例
      providerSpec:
        value:
          machineType: a2-highgpu-1g (1)
          onHostMaintenance: Terminate (2)
          restartPolicy: Always (3)
    1 指定机器类型。确保机器类型包含在 A2 机器系列中。
    2 使用 GPU 支持时,必须将onHostMaintenance设置为Terminate
    3 指定计算机器集部署的机器的重启策略。允许的值为AlwaysNever
    N1 机器系列的配置示例
    providerSpec:
      value:
        gpus:
        - count: 1 (1)
          type: nvidia-tesla-p100 (2)
        machineType: n1-standard-1 (3)
        onHostMaintenance: Terminate (4)
        restartPolicy: Always (5)
    1 指定要附加到机器的 GPU 数量。
    2 指定要连接到机器的GPU类型。确保机器类型和GPU类型兼容。
    3 指定机器类型。确保机器类型和GPU类型兼容。
    4 使用 GPU 支持时,必须将onHostMaintenance设置为Terminate
    5 指定计算机器集部署的机器的重启策略。允许的值为AlwaysNever

向现有的OpenShift Container Platform集群添加GPU节点

您可以复制并修改默认的计算机器集配置,以创建支持GPU的机器集和用于GCP云提供商的机器。

下表列出了经过验证的实例类型

实例类型 NVIDIA GPU加速器 最大GPU数量 架构

a2-highgpu-1g

A100

1

x86

n1-standard-4

T4

1

x86

步骤
  1. 复制现有的MachineSet

  2. 在新副本中,更改metadata.name中的机器集name以及machine.openshift.io/cluster-api-machineset的两个实例。

  3. 更改实例类型,在新复制的MachineSet中添加以下两行。

    machineType: a2-highgpu-1g
    onHostMaintenance: Terminate
    a2-highgpu-1g.json示例文件
    {
        "apiVersion": "machine.openshift.io/v1beta1",
        "kind": "MachineSet",
        "metadata": {
            "annotations": {
                "machine.openshift.io/GPU": "0",
                "machine.openshift.io/memoryMb": "16384",
                "machine.openshift.io/vCPU": "4"
            },
            "creationTimestamp": "2023-01-13T17:11:02Z",
            "generation": 1,
            "labels": {
                "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p"
            },
            "name": "myclustername-2pt9p-worker-gpu-a",
            "namespace": "openshift-machine-api",
            "resourceVersion": "20185",
            "uid": "2daf4712-733e-4399-b4b4-d43cb1ed32bd"
        },
        "spec": {
            "replicas": 1,
            "selector": {
                "matchLabels": {
                    "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p",
                    "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a"
                }
            },
            "template": {
                "metadata": {
                    "labels": {
                        "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p",
                        "machine.openshift.io/cluster-api-machine-role": "worker",
                        "machine.openshift.io/cluster-api-machine-type": "worker",
                        "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a"
                    }
                },
                "spec": {
                    "lifecycleHooks": {},
                    "metadata": {},
                    "providerSpec": {
                        "value": {
                            "apiVersion": "machine.openshift.io/v1beta1",
                            "canIPForward": false,
                            "credentialsSecret": {
                                "name": "gcp-cloud-credentials"
                            },
                            "deletionProtection": false,
                            "disks": [
                                {
                                    "autoDelete": true,
                                    "boot": true,
                                    "image": "projects/rhcos-cloud/global/images/rhcos-412-86-202212081411-0-gcp-x86-64",
                                    "labels": null,
                                    "sizeGb": 128,
                                    "type": "pd-ssd"
                                }
                            ],
                            "kind": "GCPMachineProviderSpec",
                            "machineType": "a2-highgpu-1g",
                            "onHostMaintenance": "Terminate",
                            "metadata": {
                                "creationTimestamp": null
                            },
                            "networkInterfaces": [
                                {
                                    "network": "myclustername-2pt9p-network",
                                    "subnetwork": "myclustername-2pt9p-worker-subnet"
                                }
                            ],
                            "preemptible": true,
                            "projectID": "myteam",
                            "region": "us-central1",
                            "serviceAccounts": [
                                {
                                    "email": "[email protected]",
                                    "scopes": [
                                        "https://www.googleapis.com/auth/cloud-platform"
                                    ]
                                }
                            ],
                            "tags": [
                                "myclustername-2pt9p-worker"
                            ],
                            "userDataSecret": {
                                "name": "worker-user-data"
                            },
                            "zone": "us-central1-a"
                        }
                    }
                }
            }
        },
        "status": {
            "availableReplicas": 1,
            "fullyLabeledReplicas": 1,
            "observedGeneration": 1,
            "readyReplicas": 1,
            "replicas": 1
        }
    }
  4. 通过运行以下命令查看现有节点、机器和机器集。请注意,每个节点都是具有特定GCP区域和OpenShift Container Platform角色的机器定义的实例。

    $ oc get nodes
    示例输出
    NAME                                                             STATUS     ROLES                  AGE     VERSION
    myclustername-2pt9p-master-0.c.openshift-qe.internal             Ready      control-plane,master   8h      v1.30.3
    myclustername-2pt9p-master-1.c.openshift-qe.internal             Ready      control-plane,master   8h      v1.30.3
    myclustername-2pt9p-master-2.c.openshift-qe.internal             Ready      control-plane,master   8h      v1.30.3
    myclustername-2pt9p-worker-a-mxtnz.c.openshift-qe.internal       Ready      worker                 8h      v1.30.3
    myclustername-2pt9p-worker-b-9pzzn.c.openshift-qe.internal       Ready      worker                 8h      v1.30.3
    myclustername-2pt9p-worker-c-6pbg6.c.openshift-qe.internal       Ready      worker                 8h      v1.30.3
    myclustername-2pt9p-worker-gpu-a-wxcr6.c.openshift-qe.internal   Ready      worker                 4h35m   v1.30.3
  5. 通过运行以下命令查看openshift-machine-api命名空间中存在的机器和机器集。每个计算机器集都与GCP区域内的不同可用区相关联。安装程序会自动在可用区之间负载均衡计算机器。

    $ oc get machinesets -n openshift-machine-api
    示例输出
    NAME                               DESIRED   CURRENT   READY   AVAILABLE   AGE
    myclustername-2pt9p-worker-a       1         1         1       1           8h
    myclustername-2pt9p-worker-b       1         1         1       1           8h
    myclustername-2pt9p-worker-c       1         1                             8h
    myclustername-2pt9p-worker-f       0         0                             8h
  6. 通过运行以下命令查看openshift-machine-api命名空间中存在的机器。您每个集合只能配置一台计算机器,但您可以扩展计算机器集以在特定区域和区域中添加节点。

    $ oc get machines -n openshift-machine-api | grep worker
    示例输出
    myclustername-2pt9p-worker-a-mxtnz       Running   n2-standard-4   us-central1   us-central1-a   8h
    myclustername-2pt9p-worker-b-9pzzn       Running   n2-standard-4   us-central1   us-central1-b   8h
    myclustername-2pt9p-worker-c-6pbg6       Running   n2-standard-4   us-central1   us-central1-c   8h
  7. 复制一个现有的计算MachineSet定义,并将结果输出到JSON文件,方法是运行以下命令。这将成为支持GPU的计算机器集定义的基础。

    $ oc get machineset myclustername-2pt9p-worker-a -n openshift-machine-api -o json  > <output_file.json>
  8. 编辑JSON文件,对新的MachineSet定义进行以下更改

    • 重命名机器集name,在metadata.namemachine.openshift.io/cluster-api-machineset的两个实例中插入子字符串gpu

    • 将新MachineSet定义的machineType更改为a2-highgpu-1g,其中包含NVIDIA A100 GPU。

      jq .spec.template.spec.providerSpec.value.machineType ocp_4.17_machineset-a2-highgpu-1g.json
      
      "a2-highgpu-1g"

      <output_file.json>文件保存为ocp_4.17_machineset-a2-highgpu-1g.json

  9. 更新ocp_4.17_machineset-a2-highgpu-1g.json中的以下字段

    • .metadata.name更改为包含gpu的名称。

    • .spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]更改为与新的.metadata.name匹配。

    • .spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]更改为与新的.metadata.name匹配。

    • .spec.template.spec.providerSpec.value.MachineType更改为a2-highgpu-1g

    • machineType下添加以下行:“`onHostMaintenance": "Terminate"`。例如

      "machineType": "a2-highgpu-1g",
      "onHostMaintenance": "Terminate",
  10. 要验证您的更改,请运行以下命令执行原始计算定义和新的支持GPU的节点定义的diff

    $ oc get machineset/myclustername-2pt9p-worker-a -n openshift-machine-api -o json | diff ocp_4.17_machineset-a2-highgpu-1g.json -
    示例输出
    15c15
    <         "name": "myclustername-2pt9p-worker-gpu-a",
    ---
    >         "name": "myclustername-2pt9p-worker-a",
    25c25
    <                 "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a"
    ---
    >                 "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-a"
    34c34
    <                     "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a"
    ---
    >                     "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-a"
    59,60c59
    <                         "machineType": "a2-highgpu-1g",
    <                         "onHostMaintenance": "Terminate",
    ---
    >                         "machineType": "n2-standard-4",
  11. 通过运行以下命令从定义文件创建支持GPU的计算机器集。

    $ oc create -f ocp_4.17_machineset-a2-highgpu-1g.json
    示例输出
    machineset.machine.openshift.io/myclustername-2pt9p-worker-gpu-a created
验证
  1. 通过运行以下命令查看您创建的机器集。

    $ oc -n openshift-machine-api get machinesets | grep gpu

    MachineSet副本计数设置为1,因此会自动创建一个新的Machine对象。

    示例输出
    myclustername-2pt9p-worker-gpu-a   1         1         1       1           5h24m
  2. 查看机器集创建的Machine对象,方法是运行以下命令。

    $ oc -n openshift-machine-api get machines | grep gpu
    示例输出
    myclustername-2pt9p-worker-gpu-a-wxcr6   Running   a2-highgpu-1g   us-central1   us-central1-a   5h25m

请注意,无需为节点指定命名空间。节点定义是集群范围的。

部署节点功能发现运算符

创建支持GPU的节点后,您需要发现支持GPU的节点,以便可以对其进行调度。为此,请安装节点功能发现 (NFD) 运算符。NFD 运算符识别节点中的硬件设备功能。它解决了识别和编目基础架构节点中的硬件资源的普遍问题,以便可以将其提供给OpenShift Container Platform。

步骤
  1. 从OpenShift Container Platform控制台的**OperatorHub**安装节点功能发现运算符。

  2. 在**OperatorHub**中安装NFD运算符后,从已安装的运算符列表中选择**节点功能发现**,然后选择**创建实例**。这将在openshift-nfd命名空间中安装nfd-masternfd-worker pod,每个计算节点一个nfd-worker pod。

  3. 通过运行以下命令验证运算符是否已安装并正在运行。

    $ oc get pods -n openshift-nfd
    示例输出
    NAME                                       READY    STATUS     RESTARTS   AGE
    
    nfd-controller-manager-8646fcbb65-x5qgk    2/2      Running 7  (8h ago)   1d
  4. 在控制台中浏览到已安装的运算符,然后选择**创建节点功能发现**。

  5. 选择**创建**以构建NFD自定义资源。这会在openshift-nfd命名空间中创建NFD pod,这些pod会轮询OpenShift Container Platform节点以获取硬件资源并对其进行编目。

验证
  1. 成功构建后,通过运行以下命令验证每个节点上是否正在运行NFD pod。

    $ oc get pods -n openshift-nfd
    示例输出
    NAME                                       READY   STATUS      RESTARTS        AGE
    nfd-controller-manager-8646fcbb65-x5qgk    2/2     Running     7 (8h ago)      12d
    nfd-master-769656c4cb-w9vrv                1/1     Running     0               12d
    nfd-worker-qjxb2                           1/1     Running     3 (3d14h ago)   12d
    nfd-worker-xtz9b                           1/1     Running     5 (3d14h ago)   12d

    NFD运算符使用供应商PCI ID来识别节点中的硬件。NVIDIA使用PCI ID 10de

  2. 通过运行以下命令查看NFD运算符发现的NVIDIA GPU。

    $ oc describe node ip-10-0-132-138.us-east-2.compute.internal | egrep 'Roles|pci'
    示例输出
    Roles: worker
    
    feature.node.kubernetes.io/pci-1013.present=true
    
    feature.node.kubernetes.io/pci-10de.present=true
    
    feature.node.kubernetes.io/pci-1d0f.present=true

    10de出现在支持GPU的节点的节点功能列表中。这意味着NFD运算符已从支持GPU的MachineSet正确识别节点。