×

配置 SR-IOV 网络操作符

  • 创建一个 `SriovOperatorConfig` 自定义资源 (CR) 来部署所有 SR-IOV 操作符组件

    1. 使用以下 YAML 创建一个名为 `sriovOperatorConfig.yaml` 的文件

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovOperatorConfig
      metadata:
        name: default
        namespace: openshift-sriov-network-operator
      spec:
        disableDrain: false
        enableInjector: true
        enableOperatorWebhook: true
        logLevel: 2
        featureGates:
          metricsExporter: false

      `SriovOperatorConfig` 资源的唯一有效名称是 `default`,并且它必须位于部署操作符的命名空间中。

    2. 运行以下命令创建资源

      $ oc apply -f sriovOperatorConfig.yaml

SR-IOV 网络操作符配置自定义资源

下表描述了 `sriovoperatorconfig` 自定义资源的字段

表 1. SR-IOV 网络操作符配置自定义资源
字段 类型 描述

metadata.name

字符串

指定 SR-IOV 网络操作符实例的名称。默认值为 `default`。请勿设置其他值。

metadata.namespace

字符串

指定 SR-IOV 网络操作符实例的命名空间。默认值为 `openshift-sriov-network-operator`。请勿设置其他值。

spec.configDaemonNodeSelector

字符串

指定节点选择器以控制在选定节点上调度 SR-IOV 网络配置守护程序。默认情况下,此字段未设置,操作符会在工作节点上部署 SR-IOV 网络配置守护程序集。

spec.disableDrain

布尔值

指定在将新策略应用于节点上的 NIC 配置时,是否禁用节点 drain 过程或启用节点 drain 过程。将此字段设置为 `true` 有利于软件开发和在单节点上安装 OpenShift Container Platform。默认情况下,此字段未设置。

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

spec.enableInjector

布尔值

指定是否启用或禁用网络资源注入器守护程序集。默认情况下,此字段设置为 `true`。

spec.enableOperatorWebhook

布尔值

指定是否启用或禁用操作符准入控制器 Webhook 守护程序集。默认情况下,此字段设置为 `true`。

spec.logLevel

整数

指定操作符的日志详细程度级别。设置为 `0` 只显示基本日志。设置为 `2` 显示所有可用日志。默认情况下,此字段设置为 `2`。

spec.featureGates

map[string]bool

指定是否启用或禁用可选功能。例如,`metricsExporter`。

spec.featureGates.metricsExporter

布尔值

指定是否启用或禁用 SR-IOV 网络操作符指标。默认情况下,此字段设置为 `false`。

关于网络资源注入器

网络资源注入器是一个 Kubernetes 动态准入控制器应用程序。它提供以下功能:

  • 根据 SR-IOV 网络附件定义注解,变异 Pod 规范中的资源请求和限制,以添加 SR-IOV 资源名称。

  • 使用向下 API 卷变异 Pod 规范,以公开 Pod 注解、标签以及巨页请求和限制。在 Pod 中运行的容器可以访问公开的信息,这些信息作为文件位于/etc/podnetinfo路径下。

默认情况下,网络资源注入器由 SR-IOV 网络操作员启用,并在所有控制平面节点上作为守护进程集运行。以下是在具有三个控制平面节点的集群中运行的网络资源注入器 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

关于 SR-IOV 网络操作员准入控制器 Webhook

SR-IOV 网络操作员准入控制器 Webhook 是一个 Kubernetes 动态准入控制器应用程序。它提供以下功能:

  • 验证创建或更新的SriovNetworkNodePolicy CR。

  • 在创建或更新 CR 时,通过设置prioritydeviceType字段的默认值来变异SriovNetworkNodePolicy CR。

默认情况下,SR-IOV 网络操作员准入控制器 Webhook 由操作员启用,并在所有控制平面节点上作为守护进程集运行。

禁用 SR-IOV 网络操作员准入控制器 Webhook 时请谨慎操作。您可以在特定情况下禁用 Webhook,例如故障排除,或者如果您要使用不受支持的设备。有关配置不受支持的设备的信息,请参见配置 SR-IOV 网络操作员以使用不受支持的网卡

以下是在具有三个控制平面节点的集群中运行的操作员准入控制器 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

关于自定义节点选择器

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

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

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

先决条件
  • 安装 OpenShift CLI(oc)。

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

  • 您必须已安装 SR-IOV 网络操作员。

步骤
  • 设置enableInjector字段。将<value>替换为false以禁用此功能,或替换为true以启用此功能。

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

    或者,您可以应用以下 YAML 来更新操作员:

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

禁用或启用 SR-IOV 网络操作员准入控制器 Webhook

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

先决条件
  • 安装 OpenShift CLI(oc)。

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

  • 您必须已安装 SR-IOV 网络操作员。

步骤
  • 设置enableOperatorWebhook字段。将<value>替换为false以禁用此功能,或替换为true以启用它。

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

    或者,您可以应用以下 YAML 来更新操作员:

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

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

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

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

更新configDaemonNodeSelector字段后,SR-IOV 网络配置守护进程将在每个选定节点上重新创建。在守护进程重新创建期间,集群用户无法应用任何新的 SR-IOV 网络节点策略或创建新的 SR-IOV Pod。

步骤
  • 要更新操作员的节点选择器,请输入以下命令:

    $ 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 来更新操作员:

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

为单节点安装配置 SR-IOV 网络操作员

默认情况下,SR-IOV 网络操作员会在每次策略更改之前从节点中驱逐工作负载。操作员执行此操作是为了确保在重新配置之前没有工作负载使用虚拟函数。

对于单节点安装,没有其他节点可以接收工作负载。因此,必须将操作员配置为不从单节点中驱逐工作负载。

在执行以下步骤禁用驱逐工作负载后,您必须在更改任何 SR-IOV 网络节点策略之前删除任何使用 SR-IOV 网络接口的工作负载。

先决条件
  • 安装 OpenShift CLI(oc)。

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

  • 您必须已安装 SR-IOV 网络操作员。

步骤
  • 要将disableDrain字段设置为true并将configDaemonNodeSelector字段设置为node-role.kubernetes.io/master: "",请输入以下命令:

    $ oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "disableDrain": true, "configDaemonNodeSelector": { "node-role.kubernetes.io/master": "" } } }'

    或者,您可以应用以下 YAML 来更新操作员:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      disableDrain: true
      configDaemonNodeSelector:
       node-role.kubernetes.io/master: ""

为托管控制平面部署 SR-IOV 操作员

配置和部署托管服务集群后,您可以在托管集群上创建对 SR-IOV 操作员的订阅。SR-IOV Pod 运行在工作机器上,而不是控制平面。

先决条件

您必须在 AWS 上配置和部署托管集群。

步骤
  1. 创建命名空间和操作员组

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-sriov-network-operator
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: sriov-network-operators
      namespace: openshift-sriov-network-operator
    spec:
      targetNamespaces:
      - openshift-sriov-network-operator
  2. 创建对 SR-IOV 操作员的订阅

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: sriov-network-operator-subsription
      namespace: openshift-sriov-network-operator
    spec:
      channel: stable
      name: sriov-network-operator
      config:
        nodeSelector:
          node-role.kubernetes.io/worker: ""
      source: s/qe-app-registry/redhat-operators
      sourceNamespace: openshift-marketplace
验证
  1. 要验证 SR-IOV 操作员是否已准备好,请运行以下命令并查看结果输出:

    $ oc get csv -n openshift-sriov-network-operator
    示例输出
    NAME                                         DISPLAY                   VERSION               REPLACES                                     PHASE
    sriov-network-operator.4.17.0-202211021237   SR-IOV Network Operator   4.17.0-202211021237   sriov-network-operator.4.17.0-202210290517   Succeeded
  2. 要验证 SR-IOV Pod 是否已部署,请运行以下命令:

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

关于 SR-IOV 网络指标导出器

单根 I/O 虚拟化 (SR-IOV) 网络指标导出器读取 SR-IOV 虚拟函数 (VF) 的指标,并以 Prometheus 格式公开这些 VF 指标。启用 SR-IOV 网络指标导出器后,您可以使用 OpenShift Container Platform Web 控制台查询 SR-IOV VF 指标,以监控 SR-IOV Pod 的网络活动。

当您使用 Web 控制台查询 SR-IOV VF 指标时,SR-IOV 网络指标导出器会获取并返回 VF 网络统计信息以及 VF 附加到的 Pod 的名称和命名空间。

指标导出器读取并以 Prometheus 格式公开的 SR-IOV VF 指标在以下表格中进行了描述。

表 2. SR-IOV VF 指标
指标 描述 检查 VF 指标的示例 PromQL 查询

sriov_vf_rx_bytes

每个虚拟函数接收的字节数。

sriov_vf_rx_bytes * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_tx_bytes

每个虚拟函数传输的字节数。

sriov_vf_tx_bytes * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_rx_packets

每个虚拟函数接收的数据包数。

sriov_vf_rx_packets * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_tx_packets

每个虚拟函数传输的数据包数。

sriov_vf_tx_packets * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_rx_dropped

每个虚拟函数接收时丢弃的数据包数。

sriov_vf_rx_dropped * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_tx_dropped

每个虚拟函数传输时丢弃的数据包数。

sriov_vf_tx_dropped * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_rx_multicast

每个虚拟函数接收的多播数据包数。

sriov_vf_rx_multicast * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_vf_rx_broadcast

每个虚拟函数接收的广播数据包数。

sriov_vf_rx_broadcast * on (pciAddr,node) group_left(pod,namespace,dev_type) sriov_kubepoddevice

sriov_kubepoddevice

与活动 Pod 链接的虚拟函数。

-

您还可以将这些查询与 kube-state-metrics 结合使用,以获取有关 SR-IOV Pod 的更多信息。例如,您可以使用以下查询从标准 Kubernetes Pod 标签中获取 VF 网络统计信息以及应用程序名称。

(sriov_vf_tx_packets * on (pciAddr,node)  group_left(pod,namespace)  sriov_kubepoddevice) * on (pod,namespace) group_left (label_app_kubernetes_io_name) kube_pod_labels

启用 SR-IOV 网络指标导出器

单根 I/O 虚拟化 (SR-IOV) 网络指标导出器默认情况下处于禁用状态。要启用指标导出器,必须将spec.featureGates.metricsExporter字段设置为true

启用指标导出器后,SR-IOV 网络操作符仅在具有 SR-IOV 功能的节点上部署指标导出器。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有cluster-admin权限的用户身份登录。

  • 您已安装 SR-IOV 网络操作符。

步骤
  1. 运行以下命令启用集群监控

    $ oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true

    要启用集群监控,必须在安装 SR-IOV 网络操作符的命名空间中添加openshift.io/cluster-monitoring=true标签。

  2. 运行以下命令将spec.featureGates.metricsExporter字段设置为true

    $ oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \
        --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'
验证
  1. 运行以下命令检查 SR-IOV 网络指标导出器是否已启用

    $ oc get pods -n openshift-sriov-network-operator
    示例输出
    NAME                                     READY   STATUS    RESTARTS   AGE
    operator-webhook-hzfg4                   1/1     Running   0          5d22h
    sriov-network-config-daemon-tr54m        1/1     Running   0          5d22h
    sriov-network-metrics-exporter-z5d7t     1/1     Running   0          10s
    sriov-network-operator-cc6fd88bc-9bsmt   1/1     Running   0          5d22h

    sriov-network-metrics-exporter Pod 必须处于READY状态。

  2. 可选:使用 OpenShift Container Platform Web 控制台检查 SR-IOV 虚拟功能 (VF) 指标。有关更多信息,请参见“查询指标”。