第 27 章 Kubernetes NMState
27.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 和 OpenStack 安装的生产环境中支持 Kubernetes NMState Operator。
在 OpenShift Container Platform 中使用 NMState 之前,必须安装 Kubernetes NMState Operator。
Kubernetes NMState Operator 更新二级 NIC 的网络配置。它无法更新主 NIC 或 br-ex
网桥的网络配置。
OpenShift Container Platform 使用 nmstate
来报告并配置节点网络的状态。这样便可通过将单个配置清单应用到集群来修改网络策略配置,例如在所有节点上创建 Linux 网桥。
节点网络由以下对象监控和更新:
NodeNetworkState
- 报告该节点上的网络状态。
NodeNetworkConfigurationPolicy
-
描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy
清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。 NodeNetworkConfigurationEnactment
- 报告每个节点上采用的网络策略。
27.1.1. 安装 Kubernetes NMState Operator
您可以使用 web 控制台或 CLI 安装 Kubernetes NMState Operator。
27.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 创建实例。
Summary
完成后,Operator 将 NMState State Controller 部署为在所有集群节点中的守护进程集。
27.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 实例:$ cat << EOF | oc apply -f - apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate EOF
验证
确认
nmstate
operator 的部署正在运行:oc get clusterserviceversion -n openshift-nmstate \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
输出示例
Name Phase kubernetes-nmstate-operator.4.12.0-202210210157 Succeeded
27.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
)。 -
以具有
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
.io 命名空间中存在的自定义资源定义(CRD),如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