第 11 章 节点
11.1. 节点维护
节点可以使用 oc adm
实用程序或 NodeMaintenance
自定义资源 (CR) 置于维护模式。
OpenShift Virtualization 不再提供 node-maintenance-operator
(NMO)。它被部署为 OpenShift Container Platform Web 控制台中的 OperatorHub 的独立 Operator,或使用 OpenShift CLI (oc
) 部署。
如需有关补救、隔离和维护节点的更多信息,请参阅 Red Hat OpenShift 文档中的工作负载可用性。
虚拟机必须具有一个采用共享 ReadWriteMany
(RWX)访问模式的 PVC 才能实时迁移。
Node Maintenance Operator 监视是否有新的或删除的 NodeMaintenance
CR。当检测到新的 NodeMaintenance
CR 时,不会调度新的工作负载,并且该节点从集群的其余部分中分离。所有可被驱除的 pod 都会从节点上驱除。删除 NodeMaintenance
CR 时,CR 中引用的节点将可用于新工作负载。
使用 NodeMaintenance
CR 进行节点维护任务可实现与 oc adm cordon
和 oc adm drain
命令相同的结果,使用标准 OpenShift Container Platform 自定义资源处理。
11.1.1. 驱除策略
将节点置于维护模式,将节点标记为不可调度,并排空其中的所有虚拟机和 pod。
您可以为虚拟机(VM)或集群配置驱除策略。
- VM 驱除策略
VM
LiveMigrate
驱除策略确保如果节点被置于维护模式或排空,则虚拟机实例(VMI)不会中断。具有驱除策略的 VMI 将实时迁移到另一节点。您可以使用 命令行为虚拟机 (VM) 配置驱除策略。
重要默认驱除策略是
LiveMigrate
。具有LiveMigrate
驱除策略的不可缓解虚拟机可能会阻止节点排空或阻止基础架构升级,因为虚拟机不会从节点驱除。这种情况会导致迁移处于Pending
或Scheduling
状态,除非您手动关闭虚拟机。对于不应迁移的虚拟机,您必须将非缓解虚拟机的驱除策略设置为
LiveMigrateIfPosible
,这不会阻止升级,或设置为None
。
- 集群驱除策略
- 您可以为集群配置驱除策略,以优先升级工作负载连续性或基础架构升级。
驱除策略 | 描述 | 中断工作流 | 块升级 |
---|---|---|---|
| 与升级相比,工作负载连续性优先考虑优先级。 | 否 | 是 2 |
| 优先升级工作负载连续性,以确保更新环境。 | 是 | 否 |
| 关闭虚拟机,不使用驱除策略。 | 是 | 否 |
- 多节点集群的默认驱除策略。
- 如果虚拟机阻止升级,您必须手动关闭虚拟机。
- 单节点 OpenShift 的默认驱除策略。
11.1.1.1. 使用命令行配置虚拟机驱除策略
您可以使用命令行为虚拟机配置驱除策略。
默认驱除策略是 LiveMigrate
。具有 LiveMigrate
驱除策略的不可缓解虚拟机可能会阻止节点排空或阻止基础架构升级,因为虚拟机不会从节点驱除。这种情况会导致迁移处于 Pending
或 Scheduling
状态,除非您手动关闭虚拟机。
对于不应迁移的虚拟机,您必须将非缓解虚拟机的驱除策略设置为 LiveMigrateIfPosible
,这不会阻止升级,或设置为 None
。
流程
运行以下命令来编辑
VirtualMachine
资源:$ oc edit vm <vm_name> -n <namespace>
驱除策略示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: <vm_name> spec: template: spec: evictionStrategy: LiveMigrateIfPossible 1 # ...
- 1
- 指定驱除策略。默认值为
LiveMigrate
。
重启虚拟机以应用更改:
$ virtctl restart <vm_name> -n <namespace>
11.1.1.2. 使用命令行配置集群驱除策略
您可以使用命令行为集群配置驱除策略。
流程
运行以下命令来编辑
hyperconverged
资源:$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
按照以下示例所示设置集群驱除策略:
集群驱除策略示例
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: evictionStrategy: LiveMigrate # ...
11.1.2. 运行策略
使用 spec.running: true
配置的虚拟机 (VM) 会立即重启。spec.runStrategy
键为决定虚拟机在特定条件下的行为提供了更大的灵活性。
spec.runStrategy
和 spec.running
键是互斥的。只能使用其中之一。
带有这两个密钥的虚拟机配置无效。
11.1.2.1. 运行策略
spec.runStrategy
键有四个可能的值:
Always
-
当在另一个节点上创建虚拟机 (VM) 时,虚拟机实例 (VMI) 始终存在。如果因为某种原因而停止原始 VMI,则会创建新的 VMI。这与
running: true
的行为相同。 RerunOnFailure
- 如果上一个实例失败,则 VMI 会在另一个节点上重新创建。如果虚拟机成功停止,则不会重新创建实例,比如在关闭时。
Manual(手动)
-
您可以使用
start
、stop
和restart
virtctl 客户端命令手动控制 VMI 状态。虚拟机不会自动重启。 Halted
-
创建虚拟机时不存在 VMI。这与
running: false
的行为相同。
virtctl start
,stop
和 restart
命令的不同组合会影响运行策略。
下表描述了虚拟机在状态之间的转换。第一列显示虚拟机的初始运行策略。剩余的列显示 virtctl 命令以及该命令运行后的新运行策略。
初始运行策略 | Start | Stop | Restart |
---|---|---|---|
Always | - | Halted | Always |
RerunOnFailure | - | Halted | RerunOnFailure |
Manual | Manual | Manual | Manual |
Halted | Always | - | - |
如果使用安装程序置备的基础架构安装的集群中某个节点无法进行机器健康检查且不可用,则带有 runStrategy: Always
或 runStrategy: RerunOnFailure
的虚拟机会被重新调度到新节点上。
11.1.2.2. 使用命令行配置虚拟机运行策略
您可以使用命令行为虚拟机配置运行策略。
spec.runStrategy
和 spec.running
键是互斥的。包含这两个键的值的虚拟机配置无效。
流程
运行以下命令来编辑
VirtualMachine
资源:$ oc edit vm <vm_name> -n <namespace>
run 策略示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: runStrategy: Always # ...
11.1.3. 维护裸机节点
当您在裸机基础架构上部署 OpenShift Container Platform 时,与在云基础架构上部署相比,还需要考虑其他的注意事项。与集群节点被视为临时的云环境中不同,重新置备裸机节点需要大量时间和精力进行维护任务。
当裸机节点出现故障时,例如,如果发生致命内核错误或发生 NIC 卡硬件故障,在修复或替换问题节点时,故障节点上的工作负载需要重启。节点维护模式允许集群管理员安全关闭节点,将工作负载移到集群的其它部分,并确保工作负载不会中断。详细进度和节点状态详情会在维护过程中提供。