第 6 章 Networking Operators
6.1. Kubernetes NMState Operator
Kubernetes NMState Operator 提供了一个 Kubernetes API,用于使用 NMState 在 OpenShift Container Platform 集群的节点上执行状态驱动的网络配置。Kubernetes NMState Operator 为用户提供了在集群节点上配置各种网络接口类型、DNS 和路由的功能。另外,集群节点中的守护进程会定期向 API 服务器报告每个节点的网络接口状态。
红帽在裸机、IBM Power®、IBM Z®、IBM® LinuxONE、VMware vSphere 和 Red Hat OpenStack Platform (RHOSP) 安装上的生产环境中支持 Kubernetes NMState Operator。
红帽支持在 Microsoft Azure 上使用 Kubernetes NMState Operator,但有使用限制。支持仅限于将系统中的 DNS 服务器配置为安装后任务。
在 OpenShift Container Platform 中使用 NMState 之前,必须安装 Kubernetes NMState Operator。
Kubernetes NMState Operator 更新二级 NIC 的网络配置。Operator 无法更新主 NIC 的网络配置,或更新大多数内部网络中的 br-ex
网桥。
在裸机平台上,只有在将 br-ex
网桥设置为机器配置时,才支持使用 Kubernetes NMState Operator 更新 br-ex
网桥网络配置。要将 br-ex
网桥更新为安装后任务,您必须将 br-ex
网桥设置为集群的 NodeNetworkConfigurationPolicy
自定义资源 (CR) 的 NMState 配置中的接口。如需更多信息,请参阅安装后配置中的创建包含自定义 br-ex 网桥的清单对象。
OpenShift Container Platform 使用 nmstate
来报告并配置节点网络的状态。这样便可通过将单个配置清单应用到集群来修改网络策略配置,例如在所有节点上创建 Linux 网桥。
节点网络由以下对象监控和更新:
NodeNetworkState
- 报告该节点上的网络状态。
NodeNetworkConfigurationPolicy
-
描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy
CR 应用到集群来更新节点网络配置,包括添加和删除网络接口 。 NodeNetworkConfigurationEnactment
- 报告每个节点上采用的网络策略。
6.1.1. 安装 Kubernetes NMState Operator
您可以使用 web 控制台或 CLI 安装 Kubernetes NMState Operator。
6.1.1.1. 使用 Web 控制台安装 Kubernetes NMState Operator
您可以使用 web 控制台安装 Kubernetes NMState Operator。安装后,Operator 可将 NMState State Controller 部署为在所有集群节点中的守护进程集。
先决条件
-
您以具有
cluster-admin
权限的用户身份登录。
流程
-
选择 Operators
OperatorHub。 -
在 All Items 下面的搜索字段中, 输入
nmstate
并点 Enter 来搜索 Kubernetes NMState Operator。 - 点 Kubernetes NMState Operator 搜索结果。
- 点 Install 打开 Install Operator 窗口。
- 点 Install 安装 Operator。
- Operator 安装完成后,点 View Operator。
-
在 Provided APIs 下,点 Create Instance 打开对话框以创建
kubernetes-nmstate
实例。 在对话框的 Name 字段中,确保实例的名称是
nmstate.
注意名称限制是一个已知问题。该实例是整个集群的单个实例。
- 接受默认设置并点 Create 创建实例。
概述
安装 Kubernetes NMState Operator 后,Operator 将 NMState State Controller 部署为在所有集群节点中的守护进程集。
6.1.1.2. 使用 CLI 安装 Kubernetes NMState Operator
您可以使用 OpenShift CLI(oc)
安装 Kubernetes NMState Operator。安装后,Operator 可将 NMState State Controller 部署为在所有集群节点中的守护进程集。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您以具有
cluster-admin
权限的用户身份登录。
流程
创建
nmstate
Operator 命名空间:$ cat << EOF | oc apply -f - apiVersion: v1 kind: Namespace metadata: name: openshift-nmstate spec: finalizers: - kubernetes EOF
创建
OperatorGroup
:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-nmstate namespace: openshift-nmstate spec: targetNamespaces: - openshift-nmstate EOF
订阅
nmstate
Operator:$ cat << EOF| oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: kubernetes-nmstate-operator namespace: openshift-nmstate spec: channel: stable installPlanApproval: Automatic name: kubernetes-nmstate-operator source: redhat-operators sourceNamespace: openshift-marketplace EOF
确认
nmstate
Operator 部署的ClusterServiceVersion
(CSV) 状态等于Succeeded
:$ oc get clusterserviceversion -n openshift-nmstate \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
输出示例
Name Phase kubernetes-nmstate-operator.4.17.0-202210210157 Succeeded
创建
nmstate
Operator 实例:$ cat << EOF | oc apply -f - apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate EOF
验证 NMState Operator 的 pod 是否正在运行:
$ oc get pod -n openshift-nmstate
输出示例
Name Ready Status Restarts Age pod/nmstate-cert-manager-5b47d8dddf-5wnb5 1/1 Running 0 77s pod/nmstate-console-plugin-d6b76c6b9-4dcwm 1/1 Running 0 77s pod/nmstate-handler-6v7rm 1/1 Running 0 77s pod/nmstate-handler-bjcxw 1/1 Running 0 77s pod/nmstate-handler-fv6m2 1/1 Running 0 77s pod/nmstate-handler-kb8j6 1/1 Running 0 77s pod/nmstate-handler-wn55p 1/1 Running 0 77s pod/nmstate-operator-f6bb869b6-v5m92 1/1 Running 0 4m51s pod/nmstate-webhook-66d6bbd84b-6n674 1/1 Running 0 77s pod/nmstate-webhook-66d6bbd84b-vlzrd 1/1 Running 0 77s
6.1.1.3. 查看 Kubernetes NMState Operator 收集的指标
Kubernetes NMState Operator kubernetes-nmstate-operator
可以从 kubernetes_nmstate_features_applied
组件收集指标,并将其公开为可随时使用的指标。作为查看指标的用例,请考虑创建 NodeNetworkConfigurationPolicy
自定义资源且您要确认策略处于活跃状态的情况。
kubernetes_nmstate_features_applied
指标不是一个 API,可能会在 OpenShift Container Platform 版本之间有所变化。
在 Developer 和 Administrator 视角中, Metrics UI 包括所选项目的一些预定义 CPU、内存、带宽和网络数据包查询。您可以对项目的 CPU、内存、带宽、网络数据包和应用程序指标运行自定义 Prometheus Query Language (PromQL) 查询。
以下示例演示了一个 NodeNetworkConfigurationPolicy
清单示例,它应用到 OpenShift Container Platform 集群:
# ... interfaces: - name: br1 type: linux-bridge state: up ipv4: enabled: true dhcp: true dhcp-custom-hostname: foo bridge: options: stp: enabled: false port: [] # ...
NodeNetworkConfigurationPolicy
清单会公开指标,并使其可用于 Cluster Monitoring Operator (CMO)。以下示例显示了一些公开的指标:
controller_runtime_reconcile_time_seconds_bucket{controller="nodenetworkconfigurationenactment",le="0.005"} 16 controller_runtime_reconcile_time_seconds_bucket{controller="nodenetworkconfigurationenactment",le="0.01"} 16 controller_runtime_reconcile_time_seconds_bucket{controller="nodenetworkconfigurationenactment",le="0.025"} 16 ... # HELP kubernetes_nmstate_features_applied Number of nmstate features applied labeled by its name # TYPE kubernetes_nmstate_features_applied gauge kubernetes_nmstate_features_applied{name="dhcpv4-custom-hostname"} 1
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已以管理员身份登录到 web 控制台并安装 Kubernetes NMState Operator。
- 对于您要查看指标的项目,您可以作为开发者或具有查看权限的用户访问集群。
- 您已为用户定义的项目启用了监控。
- 您已在用户定义的项目中部署了服务。
-
您已创建了
NodeNetworkConfigurationPolicy
清单,并将其应用到集群。
流程
如果要从 OpenShift Container Platform Web 控制台中的 Developer 视角查看指标,请完成以下任务:
- 点 Observe。
-
要查看特定项目的指标,请在 Project: 列表中选择该项目。例如,
openshift-nmstate
。 - 点 Metrics 选项卡。
要在图表中视觉化指标,请从 Select query 列表中选择查询,或者通过选择 Show PromQL 根据所选查询创建自定义 PromQL 查询。
注意在 Developer 视角中,您一次只能运行一个查询。
如果要从 OpenShift Container Platform Web 控制台中的 Administrator 视角查看指标,请完成以下任务:
-
点 Observe
Metrics。 -
在 Expression 字段中输入
kubernetes_nmstate_features_applied
。 - 点 Add query,然后点 Run query。
-
点 Observe
要探索视觉化的指标,请执行以下操作之一:
要放大图表并更改时间范围,请执行以下任何任务:
- 要可视化选择时间范围,请单击并拖动图表。
- 要选择时间范围,请使用控制台左上角的菜单。
- 要重置时间范围,请选择 Reset Zoom。
- 要显示所有查询在特定时间点的输出,请将鼠标光标停留在图表中的对应点上。查询输出显示在弹出窗口中。
6.1.2. 卸载 Kubernetes NMState Operator
您可以使用 Operator Lifecycle Manager (OLM)卸载 Kubernetes NMState Operator,但设计 OLM 不会删除任何关联的自定义资源定义(CRD)、自定义资源(CR)或 API Services。
在从 OLM 使用的 Subcription
资源卸载 Kubernetes NMState Operator 前,请确定要删除的 Kubernetes NMState Operator 资源。此标识可确保您可以在不影响正在运行的集群的情况下删除资源。
如果您需要重新安装 Kubernetes NMState Operator,请参阅"使用 CLI 安装 Kubernetes NMState Operator"或"使用 web 控制台安装 Kubernetes NMState Operator"。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已安装
jq
CLI 工具。 -
您以具有
cluster-admin
权限的用户身份登录。
流程
运行以下命令,从
Subcription
资源取消订阅 Kubernetes NMState Operator:$ oc delete --namespace openshift-nmstate subscription kubernetes-nmstate-operator
查找与 Kubernetes NMState Operator 关联的
ClusterServiceVersion
(CSV) 资源:$ oc get --namespace openshift-nmstate clusterserviceversion
列出 CSV 资源的输出示例
NAME DISPLAY VERSION REPLACES PHASE kubernetes-nmstate-operator.v4.18.0 Kubernetes NMState Operator 4.18.0 Succeeded
删除 CSV 资源。删除文件后,OLM 会删除其为 Operator 创建的某些资源,如
RBAC
。$ oc delete --namespace openshift-nmstate clusterserviceversion kubernetes-nmstate-operator.v4.18.0
运行以下命令来删除
nmstate
CR 和任何关联的Deployment
资源:$ oc -n openshift-nmstate delete nmstate nmstate
$ oc delete --all deployments --namespace=openshift-nmstate
删除
nmstate
CR 后,从console.operator.openshift.io/cluster
CR 中删除nmstate-console-plugin
控制台插件名称。运行以下命令,存储在启用插件列表中存在
nmstate-console-plugin
条目的位置。以下命令使用jq
CLI 工具将条目的索引存储在名为INDEX
的环境变量中:INDEX=$(oc get console.operator.openshift.io cluster -o json | jq -r '.spec.plugins | to_entries[] | select(.value == "nmstate-console-plugin") | .key')
运行以下 patch 命令,从
console.operator.openshift.io/cluster
CR 中删除nmstate-console-plugin
条目:$ oc patch console.operator.openshift.io cluster --type=json -p "[{\"op\": \"remove\", \"path\": \"/spec/plugins/$INDEX\"}]" 1
- 1
INDEX
是辅助变量。您可以为此变量指定不同的名称。
运行以下命令删除所有自定义资源定义 (CRD),如
nmstates.nmstate.io
:$ oc delete crd nmstates.nmstate.io
$ oc delete crd nodenetworkconfigurationenactments.nmstate.io
$ oc delete crd nodenetworkstates.nmstate.io
$ oc delete crd nodenetworkconfigurationpolicies.nmstate.io
删除命名空间:
$ oc delete namespace kubernetes-nmstate