14.3. 配置 SR-IOV Network Operator

Single Root I/O Virtualization(SR-IOV)Network Operator 管理集群中的 SR-IOV 网络设备和网络附加。

14.3.1. 配置 SR-IOV Network Operator

重要

通常不需要修改 SR-IOV Network Operator 配置。我们推荐在大多数用例中使用默认配置。只有 Operator 的默认行为与您的用例不兼容时,才需要按照以下步骤修改相关配置。

SR-IOV Network Operator 添加了 SriovOperatorConfig.sriovnetwork.openshift.io 自定义资源定义 (CRD)。Operator 会在 openshift-sriov-network-operator 命名空间中自动创建一个名为 default 的 SriovOperatorConfig 自定义资源 (CR)。

注意

default CR 包含集群的 SR-IOV Network Operator 配置。要更改 Operator 配置,您必须修改此 CR。

14.3.1.1. SR-IOV Network Operator 配置自定义资源

sriovoperatorconfig 自定义资源的字段在下表中描述:

表 14.2. SR-IOV Network Operator 配置自定义资源

字段类型描述

metadata.name

字符串

指定 SR-IOV Network Operator 实例的名称。默认值为 default。不要设置不同的值。

metadata.namespace

字符串

指定 SR-IOV Network Operator 实例的命名空间。默认值为 openshift-sriov-network-operator。不要设置不同的值。

spec.configDaemonNodeSelector

字符串

指定在所选节点上调度 SR-IOV 网络配置守护进程的节点选择。默认情况下,此字段没有设置,Operator 会在 worker 节点上部署 SR-IOV 网络配置守护进程集。

spec.disableDrain

布尔值

指定是否禁用节点排空过程,或者在应用新策略在节点上配置 NIC 时启用节点排空过程。将此字段设置为 true 可促进软件开发,并在单一节点上安装 OpenShift Container Platform。默认情况下不设置此字段。

对于单节点集群,在安装 Operator 后将此字段设置为 true。此字段必须保持设为 true

spec.enableInjector

布尔值

指定是否启用或禁用 Network Resources Injector 守护进程集。默认情况下,此字段设置为 true

spec.enableOperatorWebhook

布尔值

指定是否启用或禁用 Operator Admission Controller webhook 守护进程集。默认情况下,此字段设置为 true

spec.logLevel

整数

指定 Operator 的日志详细程度。设置为 0 以仅显示基本日志。设置为 2,以显示所有可用的日志。默认情况下,此字段设置为 2

14.3.1.2. 关于 Network Resources Injector(网络资源注入器)

Network Resources Injector 是一个 Kubernetes Dynamic Admission Controller 应用。它提供以下功能:

  • 根据 SR-IOV 网络附加定义注解,对 Pod 规格中的资源请求和限值进行修改,以添加 SR-IOV 资源名称。
  • 使用 Downward API 卷修改 pod 规格,以公开 pod 注解、标签和巨页请求和限制。在 pod 中运行的容器可以作为 /etc/podnetinfo 路径下的文件来访问公开的信息。

默认情况下,Network Resources Injector 由 SR-IOV Network Operator 启用,并作为守护进程集在所有 control plane 节点上运行。以下是在具有三个 control plane 节点的集群中运行的 Network Resources Injector pod 示例:

$ oc get pods -n openshift-sriov-network-operator

输出示例

NAME                                      READY   STATUS    RESTARTS   AGE
network-resources-injector-5cz5p          1/1     Running   0          10m
network-resources-injector-dwqpx          1/1     Running   0          10m
network-resources-injector-lktz5          1/1     Running   0          10m

14.3.1.3. 关于 SR-IOV Network Operator 准入控制器 Webhook

SR-IOV Network Operator Admission Controller Webhook 是一个 Kubernetes Dynamic Admission Controller 应用程序。它提供以下功能:

  • 在创建或更新时,验证 SriovNetworkNodePolicy CR。
  • 修改 SriovNetworkNodePolicy CR,在创建或更新 CR 时为 prioritydeviceType 项设置默认值。

默认情况下,SR-IOV Network Operator Admission Controller Webhook 由 Operator 启用,并作为守护进程集在所有 control plane 节点上运行。

注意

禁用 SR-IOV Network Operator Admission Controller Webhook 时要小心。您可以在特定情况下禁用 webhook,如故障排除,或者想要使用不支持的设备。

以下是在具有三个 control plane 节点的集群中运行的 Operator Admission Controller webhook pod 的示例:

$ oc get pods -n openshift-sriov-network-operator

输出示例

NAME                                      READY   STATUS    RESTARTS   AGE
operator-webhook-9jkw6                    1/1     Running   0          16m
operator-webhook-kbr5p                    1/1     Running   0          16m
operator-webhook-rpfrl                    1/1     Running   0          16m

14.3.1.4. 关于自定义节点选择器

SR-IOV 网络配置守护进程在集群节点上发现并配置 SR-IOV 网络设备。默认情况下,它将部署到集群中的所有 worker 节点。您可以使用节点标签指定 SR-IOV 网络配置守护进程在哪些节点上运行。

14.3.1.5. 禁用或启用网络资源注入器

要禁用或启用默认启用的网络资源注入器,请完成以下步骤。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 您必须已安装了 SR-IOV Network Operator。

流程

  • 设置 enableInjector 字段。将 <value> 替换为 false 来禁用这个功能;或替换为 true 来启用这个功能。

    $ oc patch sriovoperatorconfig default \
      --type=merge -n openshift-sriov-network-operator \
      --patch '{ "spec": { "enableInjector": <value> } }'
    提示

    您还可以应用以下 YAML 来更新 Operator:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      enableInjector: <value>

14.3.1.6. 禁用或启用 SR-IOV Network Operator 准入控制器 Webhook

要禁用或启用默认启用的准入控制器 Webhook,请完成以下步骤。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 您必须已安装了 SR-IOV Network Operator。

流程

  • 设置 enableOperatorWebhook 字段。将 <value> 替换为 false 来禁用这个功能;或替换为 true 来启用这个功能:

    $ oc patch sriovoperatorconfig default --type=merge \
      -n openshift-sriov-network-operator \
      --patch '{ "spec": { "enableOperatorWebhook": <value> } }'
    提示

    您还可以应用以下 YAML 来更新 Operator:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      enableOperatorWebhook: <value>

14.3.1.7. 为 SR-IOV 网络配置守护进程配置自定义 NodeSelector

SR-IOV 网络配置守护进程在集群节点上发现并配置 SR-IOV 网络设备。默认情况下,它将部署到集群中的所有 worker 节点。您可以使用节点标签指定 SR-IOV 网络配置守护进程在哪些节点上运行。

要指定部署了 SR-IOV 网络配置守护进程的节点,请完成以下步骤。

重要

当您更新 configDaemonNodeSelector 字段时,SR-IOV 网络配置守护进程会在所选节点中重新创建。在重新创建守护进程时,集群用户无法应用任何新的 SR-IOV 网络节点策略或创建新的 SR-IOV Pod。

流程

  • 要为 Operator 更新节点选择器,请输入以下命令:

    $ oc patch sriovoperatorconfig default --type=json \
      -n openshift-sriov-network-operator \
      --patch '[{
          "op": "replace",
          "path": "/spec/configDaemonNodeSelector",
          "value": {<node_label>}
        }]'

    <node_label> 替换为要应用的标签,如下例中:"node-role.kubernetes.io/worker": ""

    提示

    您还可以应用以下 YAML 来更新 Operator:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      configDaemonNodeSelector:
        <node_label>

14.3.1.8. 为单一节点安装配置 SR-IOV Network Operator

默认情况下,SR-IOV Network Operator 会在每次策略更改前从节点排空工作负载。Operator 会执行这个操作,以确保在重新配置前没有使用虚拟功能的工作负载。

对于在单一节点上安装,没有其他节点来接收工作负载。因此,Operator 不得配置为从单一节点排空工作负载。

重要

执行以下步骤禁用排空工作负载后,您必须删除所有使用 SR-IOV 网络接口的工作负载,然后才能更改任何 SR-IOV 网络节点策略。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 您必须已安装了 SR-IOV Network Operator。

流程

  • 要将 disableDrain 字段设置为 true,请输入以下命令:

    $ oc patch sriovoperatorconfig default --type=merge \
      -n openshift-sriov-network-operator \
      --patch '{ "spec": { "disableDrain": true } }'
    提示

    您还可以应用以下 YAML 来更新 Operator:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      disableDrain: true

14.3.2. 后续步骤