6.8. 使用 Node Maintenance Operator 将节点置于维护模式
您可以使用 oc adm
实用程序或 NodeMaintenance 自定义资源(CR)来使用 Node Maintenance
Operator 将节点置于维护模式。
6.8.1. 关于 Node Maintenance Operator
Node Maintenance Operator 监视是否有新的或删除的 NodeMaintenance
CR。当检测到新的 NodeMaintenance
CR 时,不会调度新的工作负载,并且该节点从集群的其余部分中分离。所有可被驱除的 pod 都会从节点上驱除。删除 NodeMaintenance
CR 时,CR 中引用的节点将可用于新工作负载。
使用 NodeMaintenance
CR 进行节点维护任务可实现与 oc adm cordon
和 oc adm drain
命令相同的结果,使用标准的 OpenShift Container Platform CR 处理。
6.8.2. 安装 Node Maintenance Operator
您可以使用 Web 控制台或 OpenShift CLI(oc
)安装 Node Maintenance Operator。
如果在集群中安装了 OpenShift Virtualization 版本 4.10 或更低版本,它包括了一个过时的 Node Maintenance Operator 版本。
6.8.2.1. 使用 Web 控制台安装 Node Maintenance Operator
您可以使用 OpenShift Container Platform Web 控制台安装 Node Maintenance Operator。
先决条件
-
以具有
cluster-admin
特权的用户身份登录。
流程
-
在 OpenShift Container Platform Web 控制台中导航至 Operators
OperatorHub。 - 搜索 Node Maintenance Operator,然后点 Install。
-
保留安装模式和命名空间的默认选择,以确保将 Operator 安装到
openshift-operators
命名空间中。 - 点 Install。
验证
确认安装成功:
-
导航到 Operators
Installed Operators 页面。 -
检查 Operator 是否安装在
openshift-operators
命名空间中,其状态是否为Succeeded
。
如果 Operator 没有成功安装:
-
导航到 Operators
Installed Operators 页面,并检查 Status
列中是否有任何错误或故障。 -
进入到 Operators
Installed Operators Node Maintenance Operator Details 页面,并在创建 pod 前检查 Conditions
部分是否有错误。 -
进入到 Workloads
Pods 页面,在已安装的命名空间中搜索 Node Maintenance Operator
pod,并在Logs
选项卡中检查日志。
6.8.2.2. 使用 CLI 安装 Node Maintenance Operator
您可以使用 OpenShift CLI(oc
)安装 Node Maintenance Operator。
您可以在自己的命名空间中或 openshift-operators
命名空间中安装 Node Maintenance Operator。
要在您自己的命名空间中安装 Operator,请按照以下步骤执行。
要在 openshift-operators
命名空间中安装 Operator,请跳至步骤 3,因为需要新的 Namespace
自定义资源(CR)和 OperatorGroup
CR 的步骤。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
为 Node Maintenance Operator 创建一个
Namespace
CR:定义
Namespace
CR 并保存 YAML 文件,如node-maintenance-namespace.yaml
:apiVersion: v1 kind: Namespace metadata: name: nmo-test
要创建
Namespace
CR,请运行以下命令:$ oc create -f node-maintenance-namespace.yaml
创建
OperatorGroup
CR:定义
OperatorGroup
CR 并保存 YAML 文件,如node-maintenance-operator-group.yaml
:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: node-maintenance-operator namespace: nmo-test
要创建
OperatorGroup
CR,请运行以下命令:$ oc create -f node-maintenance-operator-group.yaml
创建一个
Subscription
CR:定义
Subscription
CR,并保存 YAML 文件,如node-maintenance-subscription.yaml
:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: node-maintenance-operator namespace: nmo-test 1 spec: channel: stable InstallPlaneApproval: Automatic name: node-maintenance-operator source: redhat-operators sourceNamespace: openshift-marketplace StartingCSV: node-maintenance-operator.v4.11.0
- 1
- 指定您要安装 Node Maintenance Operator 的
命名空间
。
重要要在
openshift-operators
命名空间中安装 Node Maintenance Operator,请在Subscription
CR 中指定openshift-operators
。要创建
Subscription
CR,请运行以下命令:$ oc create -f node-maintenance-subscription.yaml
验证
检查 CSV 资源来验证安装是否成功:
$ oc get csv -n openshift-operators
输出示例
NAME DISPLAY VERSION REPLACES PHASE node-maintenance-operator.v4.11 Node Maintenance Operator 4.11 Succeeded
验证 Node Maintenance Operator 是否正在运行:
$ oc get deploy -n openshift-operators
输出示例
NAME READY UP-TO-DATE AVAILABLE AGE node-maintenance-operator-controller-manager 1/1 1 1 10d
受限网络环境中支持 Node Maintenance Operator。如需更多信息,请参阅在受限网络中使用 Operator Lifecycle Manager。
6.8.3. 将节点设置为维护模式
您可以通过 web 控制台或 CLI 使用 NodeMaintenance
CR 将节点置于维护模式。
6.8.3.1. 使用 Web 控制台将节点设置为维护模式
要将节点设置为维护模式,您可以使用 Web 控制台创建 NodeMaintenance
自定义资源(CR)。
先决条件
-
以具有
cluster-admin
特权的用户身份登录。 - 从 OperatorHub 安装 Node Maintenance Operator。
流程
-
从 Web 控制台中的 Administrator 视角,导航到 Operators
Installed Operators。 - 从 Operator 列表中选择 Node Maintenance Operator。
- 在 Node Maintenance 选项卡中,点 Create NodeMaintenance。
-
在 Create NodeMaintenance 页面中,选择 Form view 或 YAML 视图来 配置
NodeMaintenance
CR。 -
要应用您配置的
NodeMaintenance
CR,请点击 Create。
验证
在 Node Maintenance 选项卡中,检查 Status
列并验证其状态是否为 Succeeded
。
6.8.3.2. 使用 CLI 将节点设置为维护模式
您可以使用 NodeMaintenance
自定义资源(CR)将节点置于维护模式。应用 NodeMaintenance
CR 时,所有允许的 pod 都会被驱除,且节点不可调度。被驱除的 pod 会被放入到集群中的另一节点中。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录集群。
流程
创建以下
NodeMaintenance
CR,并将文件保存为nodemaintenance-cr.yaml
:apiVersion: nodemaintenance.medik8s.io/v1beta1 kind: NodeMaintenance metadata: name: nodemaintenance-cr 1 spec: nodeName: node-1.example.com 2 reason: "NIC replacement" 3
运行以下命令来应用节点维护 CR:
$ oc apply -f nodemaintenance-cr.yaml
验证
运行以下命令,检查维护任务的进度:
$ oc describe node <node-name>
其中
<node-name>
是节点的名称,如node-1.example.com
检查输出示例:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeNotSchedulable 61m kubelet Node node-1.example.com status is now: NodeNotSchedulable
6.8.3.3. 检查当前 NodeMaintenance CR 任务的状态
您可以检查当前 NodeMaintenance
CR 任务的状态。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录。
流程
运行以下命令,检查当前节点维护任务的状态,如
NodeMaintenance
CR 或nm
对象:$ oc get nm -o yaml
输出示例
apiVersion: v1 items: - apiVersion: nodemaintenance.medik8s.io/v1beta1 kind: NodeMaintenance metadata: ... spec: nodeName: node-1.example.com reason: Node maintenance status: drainProgress: 100 1 evictionPods: 3 2 lastError: "Last failure message" 3 lastUpdate: "2022-06-23T11:43:18Z" 4 phase: Succeeded totalpods: 5 5 ...
6.8.4. 从维护模式恢复节点
您可以通过 web 控制台或使用 NodeMaintenance
CR 从维护模式恢复节点。恢复节点会使节点退出维护模式,并使其可再次调度。
6.8.4.1. 使用 Web 控制台从维护模式恢复节点
要从维护模式恢复节点,您可以使用 Web 控制台删除 NodeMaintenance
自定义资源(CR)。
先决条件
-
以具有
cluster-admin
特权的用户身份登录。 - 从 OperatorHub 安装 Node Maintenance Operator。
流程
-
从 Web 控制台中的 Administrator 视角,导航到 Operators
Installed Operators。 - 从 Operator 列表中选择 Node Maintenance Operator。
-
在 Node Maintenance 选项卡中,选择您要删除的
NodeMaintenance
CR。 - 点击节点末尾的 Options 菜单 并选择 Delete NodeMaintenance。
验证
-
在 OpenShift Container Platform 控制台中,点 Compute
Nodes。 -
检查您删除
NodeMaintenance
CR 的节点的Status
列,并验证其状态是否为Ready
。
6.8.4.2. 使用 CLI 从维护模式恢复节点
您可以通过删除 NodeMaintenance
CR,从 NodeMaintenance
CR 启动的维护模式恢复节点。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录集群。
流程
节点维护任务完成后,删除活跃的
NodeMaintenance
CR:$ oc delete -f nodemaintenance-cr.yaml
输出示例
nodemaintenance.nodemaintenance.medik8s.io "maintenance-example" deleted
验证
运行以下命令,检查维护任务的进度:
$ oc describe node <node-name>
其中
<node-name>
是节点的名称,如node-1.example.com
检查输出示例:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeSchedulable 2m kubelet Node node-1.example.com status is now: NodeSchedulable
6.8.5. 使用裸机节点
对于使用裸机节点的集群,您可以使用 web 控制台 Actions 控制将节点置于维护模式,并从维护模式恢复节点。
具有裸机节点的集群也可以将节点置于维护模式,并使用 web 控制台和 CLI 从维护模式恢复节点。这些方法通过使用 Web 控制台 Actions 控制,仅适用于裸机集群。
6.8.5.1. 维护裸机节点
在裸机基础架构上部署 OpenShift Container Platform 时,与在云基础架构上部署相比,还需要考虑其他注意事项。与云环境不同,集群节点被视为临时的,重新置备裸机节点需要大量时间和精力来进行维护任务。
当因为内核错误或 NIC 卡硬件故障造成裸机节点失败时,故障节点上的工作负载需要在集群中的另一个节点上重启,同时问题节点被修复或替换。节点维护模式允许集群管理员安全关闭节点,将工作负载移到集群的其它部分,并确保工作负载不会中断。详细进度和节点状态详情会在维护过程中提供。
6.8.5.2. 将裸机节点设置为维护模式
使用 Compute
流程
-
从 Web 控制台的 Administrator 视角中,点 Compute
Nodes。 您可从此屏幕将节点设置为维护,这有助于对多个虚拟机执行操作,也可通过 Node Details 屏幕进行,其中可查看所选节点的综合详情:
- 点击节点 末尾的 Options 菜单并选择 Start Maintenance。
-
点击节点名称以打开 Node Details 屏幕,然后点击 Actions
Start Maintenance。
- 在确认窗口中点击 Start Maintenance。
该节点不可调度。如果已有带有 LiveMigration
驱除策略的虚拟机,则会实时迁移它们。该节点上的所有其他 pod 和虚拟机均被删除,并会在另一节点上重新创建。
验证
-
进入到 Compute
Nodes 页面,验证对应节点的状态是否为 Under Maintenance
。
6.8.5.3. 从维护模式恢复裸机节点
使用 Compute
流程
-
从 Web 控制台的 Administrator 视角中,点 Compute
Nodes。 您可从此屏幕恢复节点,这有助于对多个虚拟机执行操作,也可从 Node Details 屏幕,其中可查看所选节点的综合详情:
- 点击节点 末尾的 Options 菜单并选择 Stop Maintenance。
-
点击节点名称以打开 Node Details 屏幕,然后点击 Actions
Stop Maintenance。
- 在确认窗口中点击 Stop Maintenance。
节点变为可调度。如果在维护之前已有该节点上运行的虚拟机实例,则它们不会自动迁移回该节点。
验证
-
进入到 Compute
Nodes 页面,验证对应节点的状态是否为 Ready
。
6.8.6. 收集 Node Maintenance Operator 的数据
要收集有关 Node Maintenance Operator 的调试信息,请使用 must-gather
工具。有关 Node Maintenance Operator 的 must-gather
镜像的信息,请参阅收集有关特定功能的数据。