6.10. SR-IOV Operator
6.10.1. 安装 SR-IOV Network Operator
您可以在集群上安装单根 I/O 虚拟化(SR-IOV)网络 Operator,以管理 SR-IOV 网络设备和网络附加。
6.10.1.1. 安装 SR-IOV Network Operator
作为集群管理员,您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装单根 I/O 虚拟化(SR-IOV) Network Operator。
6.10.1.1.1. CLI:安装 SR-IOV Network Operator
作为集群管理员,您可以使用 CLI 安装 Operator。
先决条件
- 在裸机环境中安装的集群,其中的节点带有支持 SR-IOV 的硬件。
-
安装 OpenShift CLI (
oc
) 。 -
具有
cluster-admin
特权的帐户。
流程
输入以下命令创建
openshift-sriov-network-operator
命名空间:$ cat << EOF| oc create -f - apiVersion: v1 kind: Namespace metadata: name: openshift-sriov-network-operator annotations: workload.openshift.io/allowed: management EOF
输入以下命令来创建
OperatorGroup
自定义资源 (CR):$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sriov-network-operators namespace: openshift-sriov-network-operator spec: targetNamespaces: - openshift-sriov-network-operator EOF
输入以下命令为 SR-IOV Network Operator 创建
Subscription
CR:$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: sriov-network-operator-subscription namespace: openshift-sriov-network-operator spec: channel: stable name: sriov-network-operator source: redhat-operators sourceNamespace: openshift-marketplace EOF
输入以下命令来创建
SriovoperatorConfig
资源:$ cat <<EOF | oc create -f - apiVersion: sriovnetwork.openshift.io/v1 kind: SriovOperatorConfig metadata: name: default namespace: openshift-sriov-network-operator spec: enableInjector: true enableOperatorWebhook: true logLevel: 2 disableDrain: false EOF
验证
输入以下命令检查是否安装了 Operator:
$ oc get csv -n openshift-sriov-network-operator \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
输出示例
Name Phase sriov-network-operator.4.17.0-202406131906 Succeeded
6.10.1.1.2. web 控制台:安装 SR-IOV Network Operator
作为集群管理员,您可以使用 Web 控制台安装 Operator。
先决条件
- 在裸机环境中安装的集群,其中的节点带有支持 SR-IOV 的硬件。
-
安装 OpenShift CLI (
oc
) 。 -
具有
cluster-admin
特权的帐户。
流程
安装 SR-IOV Network Operator:
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
OperatorHub。 - 从可用的 Operators 列表中选择 SR-IOV Network Operator,然后点击 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
验证 SR-IOV Network Operator 是否已成功安装:
-
导航到 Operators
Installed Operators 页面。 确保 SR-IOV Network Operator 在 openshift-sriov-network-operator 项目中列出,状态 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有被成功安装,请按照以下步骤进行故障排除:
- 检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入 Workloads
Pods 页面,在 openshift-sriov-network-operator
项目中检查 pod 的日志。 检查 YAML 文件的命名空间。如果缺少注解,您可以使用以下命令将注解
workload.openshift.io/allowed=management
添加到 Operator 命名空间中:$ oc annotate ns/openshift-sriov-network-operator workload.openshift.io/allowed=management
注意对于单节点 OpenShift 集群,命名空间需要注解
workload.openshift.io/allowed=management
。
-
导航到 Operators
6.10.1.2. 后续步骤
6.10.2. 配置 SR-IOV Network Operator
Single Root I/O Virtualization(SR-IOV)Network Operator 管理集群中的 SR-IOV 网络设备和网络附加。
6.10.2.1. 配置 SR-IOV Network Operator
创建一个
SriovOperatorConfig
自定义资源 (CR) 以部署所有 SR-IOV Operator 组件:使用以下 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
,它必须位于部署 Operator 的命名空间中。运行以下命令来创建资源:
$ oc apply -f sriovOperatorConfig.yaml
6.10.2.1.1. SR-IOV Network Operator 配置自定义资源
sriovoperatorconfig
自定义资源的字段在下表中描述:
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 SR-IOV Network Operator 实例的名称。默认值为 |
|
|
指定 SR-IOV Network Operator 实例的命名空间。默认值为 |
|
| 指定在所选节点上调度 SR-IOV 网络配置守护进程的节点选择。默认情况下,此字段没有设置,Operator 会在 worker 节点上部署 SR-IOV 网络配置守护进程集。 |
|
|
指定是否禁用节点排空过程,或者在应用新策略在节点上配置 NIC 时启用节点排空过程。将此字段设置为
对于单节点集群,在安装 Operator 后将此字段设置为 |
|
|
指定是否启用或禁用 Network Resources Injector 守护进程集。默认情况下,此字段设置为 |
|
|
指定是否启用或禁用 Operator Admission Controller webhook 守护进程集。默认情况下,此字段设置为 |
|
|
指定 Operator 的日志详细程度。设置为 |
|
|
指定是否启用或禁用可选功能。例如, |
|
|
指定是否启用或禁用 SR-IOV Network Operator 指标。默认情况下,此字段设置为 |
6.10.2.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
6.10.2.1.3. 关于 SR-IOV Network Operator 准入控制器 Webhook
SR-IOV Network Operator Admission Controller Webhook 是一个 Kubernetes Dynamic Admission Controller 应用程序。它提供以下功能:
-
在创建或更新时,验证
SriovNetworkNodePolicy
CR。 -
修改
SriovNetworkNodePolicy
CR,在创建或更新 CR 时为priority
和deviceType
项设置默认值。
默认情况下,SR-IOV Network Operator Admission Controller Webhook 由 Operator 启用,并作为守护进程集在所有 control plane 节点上运行。
禁用 SR-IOV Network Operator Admission Controller Webhook 时要小心。您可以在特定情况下禁用 webhook,如故障排除,或者想要使用不支持的设备。有关配置不支持的设备的详情,请参考将 SR-IOV Network Operator 配置为使用不支持的 NIC。
以下是在具有三个 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
6.10.2.1.4. 关于自定义节点选择器
SR-IOV 网络配置守护进程在集群节点上发现并配置 SR-IOV 网络设备。默认情况下,它将部署到集群中的所有 worker
节点。您可以使用节点标签指定 SR-IOV 网络配置守护进程在哪些节点上运行。
6.10.2.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>
6.10.2.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>
6.10.2.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>
6.10.2.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
,并将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 来更新 Operator:
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovOperatorConfig metadata: name: default namespace: openshift-sriov-network-operator spec: disableDrain: true configDaemonNodeSelector: node-role.kubernetes.io/master: ""
6.10.2.1.9. 为托管 control plane 部署 SR-IOV Operator
配置和部署托管服务集群后,您可以在托管集群中创建 SR-IOV Operator 订阅。SR-IOV pod 在 worker 机器上运行而不是在 control plane 上运行。
先决条件
您必须在 AWS 上配置和部署托管集群。
流程
创建命名空间和 Operator 组:
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
创建 SR-IOV Operator 的订阅:
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
验证
要验证 SR-IOV Operator 是否已就绪,请运行以下命令并查看生成的输出:
$ 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
要验证 SR-IOV pod 是否已部署,请运行以下命令:
$ oc get pods -n openshift-sriov-network-operator
6.10.2.2. 关于 SR-IOV 网络指标导出器
Single Root I/O Virtualization (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 指标:
指标 | 描述 | 检查 VF 指标的 PromQL 查询示例 |
---|---|---|
| 每个虚拟功能接收的字节数。 |
|
| 每个虚拟功能传输的字节数。 |
|
| 每个虚拟功能接收的数据包。 |
|
| 每个虚拟功能传输的数据包。 |
|
| 每个虚拟功能接收后丢弃的数据包。 |
|
| 每个虚拟功能传输过程中丢弃的数据包。 |
|
| 每个虚拟功能接收的多播数据包。 |
|
| 每个虚拟功能接收的广播数据包。 |
|
| 链接到活跃 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
6.10.2.2.1. 启用 SR-IOV 网络指标导出器
默认情况下,单根 I/O 虚拟化 (SR-IOV) 网络指标导出器被禁用。要启用指标导出器,您必须将 spec.featureGates.metricsExporter
字段设置为 true
。
启用指标导出器后,SR-IOV Network Operator 仅在具有 SR-IOV 功能的节点上部署指标导出器。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您已以具有
cluster-admin
权限的用户身份登录。 - 已安装 SR-IOV Network Operator。
流程
运行以下命令来启用集群监控:
$ oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true
要启用集群监控,您必须在安装了 SR-IOV Network Operator 的命名空间中创建
openshift.io/cluster-monitoring=true
标签。运行以下命令,将
spec.featureGates.metricsExporter
字段设置为true
:$ oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \ --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'
验证
运行以下命令,检查 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
状态。- 可选:使用 OpenShift Container Platform Web 控制台检查 SR-IOV 虚拟功能 (VF) 指标。如需更多信息,请参阅"查询指标"。
6.10.2.3. 后续步骤
6.10.3. 卸载 SR-IOV Network Operator
要卸载 SR-IOV Network Operator,您必须删除所有正在运行的 SR-IOV 工作负载,卸载 Operator,并删除 Operator 使用的 webhook。
6.10.3.1. 卸载 SR-IOV Network Operator
作为集群管理员,您可以卸载 SR-IOV Network Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 已安装 SR-IOV Network Operator。
流程
删除所有 SR-IOV 自定义资源(CR):
$ oc delete sriovnetwork -n openshift-sriov-network-operator --all
$ oc delete sriovnetworknodepolicy -n openshift-sriov-network-operator --all
$ oc delete sriovibnetwork -n openshift-sriov-network-operator --all
- 按照 "Deleting Operators from a cluster" 部分的说明从集群中移除 SR-IOV Network Operator。
卸载 SR-IOV Network Operator 后,删除在集群中保留的 SR-IOV 自定义资源定义:
$ oc delete crd sriovibnetworks.sriovnetwork.openshift.io
$ oc delete crd sriovnetworknodepolicies.sriovnetwork.openshift.io
$ oc delete crd sriovnetworknodestates.sriovnetwork.openshift.io
$ oc delete crd sriovnetworkpoolconfigs.sriovnetwork.openshift.io
$ oc delete crd sriovnetworks.sriovnetwork.openshift.io
$ oc delete crd sriovoperatorconfigs.sriovnetwork.openshift.io
删除 SR-IOV Webhook:
$ oc delete mutatingwebhookconfigurations network-resources-injector-config
$ oc delete MutatingWebhookConfiguration sriov-operator-webhook-config
$ oc delete ValidatingWebhookConfiguration sriov-operator-webhook-config
删除 SR-IOV Network Operator 命名空间:
$ oc delete namespace openshift-sriov-network-operator
其他资源