附录#

启用集群范围的授权#

简介#

注意

驱动程序工具包 (Driver Toolkit) 允许在 OpenShift 4.8 的某些 z-stream 和 OpenShift 4.9 的所有 z-stream 上进行 GPU Operator 的免授权部署。但是,某些驱动程序工具包镜像已损坏,因此我们建议为 4.9.9 之前的所有 OpenShift 版本维护授权。有关更多信息,请参阅 损坏的驱动程序工具包

NVIDIA GPU Operator 部署了多个 Pod,用于管理和启用 GPU 以在 OpenShift Container Platform 中使用。其中一些 Pod 需要 OpenShift Container Platform 使用的通用基础镜像 (UBI) 中默认不可用的软件包。为了使软件包可用于 NVIDIA GPU 驱动程序容器,您必须在 OpenShift 中启用集群范围的授权容器构建。

从高层次来看,启用集群范围的授权涉及三个步骤

  1. Red Hat 客户门户 下载 Red Hat OpenShift Container Platform 订阅证书(访问需要登录凭据)。

  2. 创建一个 MachineConfig,它启用订阅管理器并提供有效的订阅证书。等待 MachineConfigOperator 重新启动节点并完成应用 MachineConfig

  3. 验证集群范围的授权是否正常工作。

这些说明假定您从 Red Hat 客户门户 下载了 base64 编码的授权,或者从现有节点中提取了授权。

创建授权容器需要您将具有有效 Red Hat 授权证书的机器配置分配给您的工作节点。此步骤是必要的,因为 Red Hat Enterprise Linux (RHEL) CoreOS 节点尚未自动获得授权。

获取授权证书#

按照以下指南编辑获取授权证书。

  1. 导航到 Red Hat 客户门户系统管理页面,然后单击 新建

    _images/cluster_entitlement_1.png
  2. 选择 Hypervisor,然后在 名称 字段中填写文本 OpenShift-Entitlement

    _images/entitlement_hypervisor.png
  3. 单击 创建

  4. 选择 订阅 选项卡,然后单击 附加订阅

    _images/cluster_entitlement_3.png
  5. 搜索 Red Hat Developer Subscription [此处内容可能因帐户而异],选择其中一个并单击 附加订阅

    注意

    此处选择 Red Hat Developer Subscription 纯粹是为了说明此示例。请根据您的需求选择合适的订阅。

  6. 单击 下载证书

_images/cluster_entitlement_5.png
  1. 下载并解压文件。

  2. 提取密钥 <key>.pem 并使用以下命令进行测试

    $ curl -E <key>.pem -Sfs -k https://cdn.redhat.com/content/dist/rhel8/8/x86_64/baseos/os/repodata/repomd.xml | head -3
    

    注意

    使用有效密钥,curl 将下载存储库入口点并显示其 head,如下例所示。

    使用无效密钥,curl 下载将被 Red Hat 软件包镜像拒绝。

    <?xml version="1.0" encoding="UTF-8"?>
    <repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
    <revision>1631130504</revision>
    

添加集群范围的授权#

使用以下步骤添加集群范围的授权

  1. 创建一个本地的适当命名的目录。切换到此目录。

  2. 下载用于 OpenShift Container Platform 上集群范围授权的 machine config YAML 模板。将下载的文件 0003-cluster-wide-machineconfigs.yaml.template 保存到步骤 1 中创建的目录。

  3. 将从您的授权证书中选择的 pem 文件复制到名为 nvidia.pem 的本地文件

    $ cp <path/to/pem/file>/<certificate-file-name>.pem nvidia.pem
    
  4. 通过附加授权证书生成 MachineConfig 文件

    $ sed -i -f - 0003-cluster-wide-machineconfigs.yaml.template << EOF
    s/BASE64_ENCODED_PEM_FILE/$(base64 -w0 nvidia.pem)/g
    EOF
    
  5. 将机器配置应用到 OpenShift 集群

    $ oc apply -f 0003-cluster-wide-machineconfigs.yaml.template
    

    注意

    此步骤触发由 OpenShift Machine Config Operator 驱动的更新,并逐个启动所有工作节点上的重启。

    machineconfig.machineconfiguration.openshift.io/50-rhsm-conf created
    machineconfig.machineconfiguration.openshift.io/50-entitlement-pem created
    machineconfig.machineconfiguration.openshift.io/50-entitlement-key-pem created
    
  6. 检查 machineconfig

    $ oc get machineconfig | grep entitlement
    
    50-entitlement-key-pem                             2.2.0             45s
    50-entitlement-pem                                 2.2.0             45s
    
  7. 监控 MachineConfigPool 对象

    $ oc get mcp/worker
    
    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    worker   rendered-worker-5f1eaf24c760fb389d47d3c37ef41c29   True      False      False      2              2                   2                     0                      7h15m
    

    在这里,您可以看到 MCP 已更新,未更新或未降级,因此所有 MachineConfig 资源已成功应用于节点,您可以继续验证集群。

验证集群范围的授权#

使用测试 Pod 验证集群范围的授权,该测试 Pod 查询 Red Hat 订阅存储库以获取 kernel-devel 软件包。

  1. 创建测试 Pod

    $ cat << EOF >> mypod.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
     name: cluster-entitled-build-pod
     namespace: default
    spec:
     containers:
      - name: cluster-entitled-build
        image: registry.access.redhat.com/ubi8:latest
        command: [ "/bin/sh", "-c", "dnf search kernel-devel --showduplicates" ]
     restartPolicy: Never
    EOF
    
  2. 应用测试 Pod

    $ oc create -f mypod.yaml
    
    pod/cluster-entitled-build-pod created
    
  3. 验证测试 Pod 是否已创建

    $ oc get pods -n default
    
    NAME                         READY   STATUS    RESTARTS   AGE
    cluster-entitled-build-pod   1/1     Completed 0          64m
    
  4. 验证 Pod 是否可以找到必要的 kernel-devel 软件包

    $ oc logs cluster-entitled-build-pod -n default
    
    Updating Subscription Management repositories.
    Unable to read consumer identity
    Subscription Manager is operating in container mode.
    Red Hat Enterprise Linux 8 for x86_64 - AppStre  15 MB/s |  14 MB     00:00
    Red Hat Enterprise Linux 8 for x86_64 - BaseOS   15 MB/s |  13 MB     00:00
    Red Hat Universal Base Image 8 (RPMs) - BaseOS  493 kB/s | 760 kB     00:01
    Red Hat Universal Base Image 8 (RPMs) - AppStre 2.0 MB/s | 3.1 MB     00:01
    Red Hat Universal Base Image 8 (RPMs) - CodeRea  12 kB/s | 9.1 kB     00:00
    ====================== Name Exactly Matched: kernel-devel ======================
    kernel-devel-4.18.0-80.1.2.el8_0.x86_64 : Development package for building
                                      : kernel modules to match the kernel
    kernel-devel-4.18.0-80.el8.x86_64 : Development package for building kernel
                                : modules to match the kernel
    kernel-devel-4.18.0-80.4.2.el8_0.x86_64 : Development package for building
                                      : kernel modules to match the kernel
    kernel-devel-4.18.0-80.7.1.el8_0.x86_64 : Development package for building
                                      : kernel modules to match the kernel
    kernel-devel-4.18.0-80.11.1.el8_0.x86_64 : Development package for building
                                       : kernel modules to match the kernel
    kernel-devel-4.18.0-147.el8.x86_64 : Development package for building kernel
                                 : modules to match the kernel
    kernel-devel-4.18.0-80.11.2.el8_0.x86_64 : Development package for building
                                       : kernel modules to match the kernel
    kernel-devel-4.18.0-80.7.2.el8_0.x86_64 : Development package for building
                                      : kernel modules to match the kernel
    kernel-devel-4.18.0-147.0.3.el8_1.x86_64 : Development package for building
                                       : kernel modules to match the kernel
    kernel-devel-4.18.0-147.0.2.el8_1.x86_64 : Development package for building
                                       : kernel modules to match the kernel
    kernel-devel-4.18.0-147.3.1.el8_1.x86_64 : Development package for building
                                       : kernel modules to match the kernel
    

现在,任何基于 RHEL 的 Pod 都可以运行授权构建。