×

可以使用oc adm实用程序或NodeMaintenance自定义资源 (CR) 将节点置于维护模式。

node-maintenance-operator (NMO) 不再与OpenShift Virtualization一起提供。它作为独立的Operator从OpenShift Container Platform Web控制台的**OperatorHub**部署,或者使用OpenShift CLI (oc) 部署。

有关补救、隔离和维护节点的更多信息,请参见Red Hat OpenShift的工作负载可用性文档。

虚拟机 (VM) 必须具有具有共享ReadWriteMany (RWX) 访问模式的持久卷声明 (PVC) 才能进行实时迁移。

节点维护运算符监视新的或已删除的NodeMaintenance CR。检测到新的NodeMaintenance CR时,不会调度新的工作负载,并且节点将与集群的其余部分隔离。所有可以驱逐的Pod都将从节点中驱逐。删除NodeMaintenance CR时,CR中引用的节点将可用于新的工作负载。

使用NodeMaintenance CR进行节点维护任务可获得与使用标准OpenShift Container Platform自定义资源处理的oc adm cordonoc adm drain命令相同的结果。

驱逐策略

将节点置于维护状态会将节点标记为不可调度,并从中驱逐所有虚拟机和Pod。

您可以为虚拟机 (VM) 或集群配置驱逐策略。

虚拟机驱逐策略

虚拟机LiveMigrate驱逐策略确保如果节点被置于维护状态或被清空,虚拟机实例 (VMI) 不会中断。具有此驱逐策略的VMI将实时迁移到另一个节点。

您可以使用OpenShift Virtualization Web控制台或命令行配置虚拟机 (VM) 的驱逐策略。

默认驱逐策略为LiveMigrate。具有LiveMigrate驱逐策略的不可迁移虚拟机可能会阻止节点清空或阻止基础设施升级,因为该虚拟机不会从节点中驱逐。除非手动关闭虚拟机,否则这种情况会导致迁移保持在PendingScheduling状态。

必须将不可迁移虚拟机的驱逐策略设置为LiveMigrateIfPossible(不会阻止升级),或对于不应迁移的虚拟机设置为None

集群驱逐策略

您可以为集群配置驱逐策略以优先考虑工作负载连续性或基础设施升级。

表1. 集群驱逐策略
驱逐策略 描述 中断工作流 阻止升级

LiveMigrate 1

优先考虑工作负载连续性而不是升级。

2

LiveMigrateIfPossible

优先考虑升级而不是工作负载连续性,以确保环境得到更新。

None 3

关闭没有驱逐策略的虚拟机。

  1. 多节点集群的默认驱逐策略。

  2. 如果虚拟机阻止升级,则必须手动关闭虚拟机。

  3. 单节点OpenShift的默认驱逐策略。

使用命令行配置虚拟机驱逐策略

您可以使用命令行配置虚拟机 (VM) 的驱逐策略。

默认驱逐策略为LiveMigrate。具有LiveMigrate驱逐策略的不可迁移虚拟机可能会阻止节点清空或阻止基础设施升级,因为该虚拟机不会从节点中驱逐。除非手动关闭虚拟机,否则这种情况会导致迁移保持在PendingScheduling状态。

必须将不可迁移虚拟机的驱逐策略设置为LiveMigrateIfPossible(不会阻止升级),或对于不应迁移的虚拟机设置为None

步骤
  1. 通过运行以下命令编辑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
  2. 重启虚拟机以应用更改

    $ virtctl restart <vm_name> -n <namespace>

使用命令行配置集群驱逐策略

您可以使用命令行配置集群的驱逐策略。

步骤
  1. 通过运行以下命令编辑hyperconverged资源

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 设置集群驱逐策略,如下例所示

    集群驱逐策略示例
    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      evictionStrategy: LiveMigrate
    # ...

运行策略

配置了spec.running: true的虚拟机 (VM) 会立即重启。spec.runStrategy键提供了更大的灵活性,用于确定虚拟机在特定条件下的行为。

spec.runStrategyspec.running键是互斥的。只能使用其中一个。

同时包含这两个键的虚拟机配置无效。

运行策略

spec.runStrategy键有四个可能的值

Always(始终)

在另一个节点上创建虚拟机 (VM) 时,虚拟机实例 (VMI) 始终存在。如果原始实例因任何原因停止,则会创建一个新的 VMI。这与running: true的行为相同。

RerunOnFailure(失败时重新运行)

如果之前的实例失败,则会在另一个节点上重新创建 VMI。如果虚拟机成功停止(例如,当它被关闭时),则不会重新创建实例。

Manual(手动)

您可以使用startstoprestart virtctl 客户端命令手动控制 VMI 状态。虚拟机不会自动重启。

Halted(已停止)

创建虚拟机时,不存在 VMI。这与running: false的行为相同。

virtctl startstoprestart命令的不同组合会影响运行策略。

下表描述了虚拟机在状态之间的转换。第一列显示虚拟机的初始运行策略。其余列显示 virtctl 命令以及运行该命令后的新运行策略。

表 2. virtctl命令前后运行策略
初始运行策略 启动 (Start) 停止 (Stop) 重启 (Restart)

Always(始终)

-

Halted(已停止)

Always(始终)

RerunOnFailure(失败时重新运行)

-

Halted(已停止)

RerunOnFailure(失败时重新运行)

Manual(手动)

Manual(手动)

Manual(手动)

Manual(手动)

Halted(已停止)

Always(始终)

-

-

如果使用安装程序预置基础设施安装的集群中的节点未能通过机器运行状况检查且不可用,则runStrategy: AlwaysrunStrategy: RerunOnFailure的虚拟机将重新调度到新节点上。

使用命令行配置虚拟机运行策略

您可以使用命令行配置虚拟机 (VM) 的运行策略。

spec.runStrategyspec.running键是互斥的。包含这两个键值的虚拟机配置无效。

步骤
  • 通过运行以下命令编辑VirtualMachine资源

    $ oc edit vm <vm_name> -n <namespace>
    运行策略示例
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    spec:
      runStrategy: Always
    # ...

维护裸机节点

在裸机基础设施上部署 OpenShift Container Platform 时,与在云基础设施上部署相比,需要考虑其他因素。与云环境中集群节点被认为是短暂的相反,重新配置裸机节点需要更多的时间和精力来执行维护任务。

当裸机节点发生故障时(例如,发生致命的内核错误或网卡硬件故障),失败节点上的工作负载需要在集群中的其他位置重新启动,同时修复或更换问题节点。节点维护模式允许集群管理员优雅地关闭节点,将工作负载移动到集群的其他部分,并确保工作负载不会中断。在维护期间,会提供详细的进度和节点状态详细信息。

其他资源