6.8. 使用 Node Maintenance Operator 将节点置于维护模式
您可以使用 Node Maintenance Operator 将节点置于维护模式。这是独立于 OpenShift Virtualization 安装的节点维护 Operator 的独立版本。
如果已安装 OpenShift Virtualization,则必须使用与之捆绑的 Node Maintenance Operator。
6.8.1. 关于 Node Maintenance Operator
您可以使用 oc adm
实用程序或使用 NodeMaintenance
自定义资源(CR)将节点置于维护模式。
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. 维护裸机节点
在裸机基础架构上部署 OpenShift Container Platform 时,与在云基础架构上部署相比,还需要考虑其他注意事项。与云环境不同,集群节点被视为临时的,重新置备裸机节点需要大量时间和精力来进行维护任务。
当因为内核错误或 NIC 卡硬件故障造成裸机节点失败时,故障节点上的工作负载需要在集群中的另一个节点上重启,同时问题节点被修复或替换。节点维护模式允许集群管理员安全关闭节点,将工作负载移到集群的其它部分,并确保工作负载不会中断。详细进度和节点状态详情会在维护过程中提供。
6.8.3. 安装 Node Maintenance Operator
您可以使用 Web 控制台或 OpenShift CLI(oc
)安装 Node Maintenance Operator。
6.8.3.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
列中是否有任何错误或故障。 -
导航到 Workloads
Pods 页面,并检查 openshift-operators
项目中报告问题的 pod 的日志。
6.8.3.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.10.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.10 Node Maintenance Operator 4.10 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.4. 将节点设置为维护模式
您可以通过 web 控制台或使用 NodeMaintenance
CR 在 CLI 中将节点置于维护模式。
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 选项卡中,点 Create NodeMaintenance。
-
在 Create NodeMaintenance 页面中,选择 Form view 或 YAML 视图来 配置
NodeMaintenance
CR。 -
要应用您配置的
NodeMaintenance
CR,请点击 Create。
验证
在 Node Maintenance 选项卡中,检查 Status
列并验证其状态是否为 Succeeded
。
6.8.4.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
运行以下命令,将
<node-name>
替换为节点的名称来检查维护任务的进度;例如node-1.example.com
:$ oc describe node 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.4.2.1. 检查当前 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: evictionPods: 3 1 lastError: "Last failure message" 2 phase: Succeeded totalpods: 5 3 ...
6.8.5. 从维护模式恢复节点
您可以通过 CLI 或使用 NodeMaintenance
CR 从维护模式恢复节点。恢复节点会使节点退出维护模式,并使其可再次调度。
6.8.5.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.5.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
6.8.6. 收集 Node Maintenance Operator 的数据
要收集有关 Node Maintenance Operator 的调试信息,请使用 must-gather
工具。有关 Node Maintenance Operator 的 must-gather
镜像的信息,请参阅收集有关特定功能的数据。