第 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 cordonoc adm drain 命令相同的结果,使用标准 OpenShift Container Platform 自定义资源处理。

11.1.1. 驱除策略

将节点置于维护模式,将节点标记为不可调度,并排空其中的所有虚拟机和 pod。

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

VM 驱除策略

VM LiveMigrate 驱除策略确保如果节点被置于维护模式或排空,则虚拟机实例(VMI)不会中断。具有驱除策略的 VMI 将实时迁移到另一节点。

您可以使用 web 控制台命令行为虚拟机(VM)配置驱除策略。

重要

默认驱除策略是 LiveMigrate。具有 LiveMigrate 驱除策略的不可缓解虚拟机可能会阻止节点排空或阻止基础架构升级,因为虚拟机不会从节点驱除。这种情况会导致迁移处于 PendingScheduling 状态,除非您手动关闭虚拟机。

对于不应迁移的虚拟机,您必须将非缓解虚拟机的驱除策略设置为 LiveMigrateIfPosible,这不会阻止升级,或设置为 None

集群驱除策略
您可以为集群配置驱除策略,以优先升级工作负载连续性或基础架构升级。
重要

配置集群驱除策略只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

表 11.1. 集群驱除策略
驱除策略描述中断工作流块升级

LiveMigrate 1

与升级相比,工作负载连续性优先考虑优先级。

2

LiveMigrateIfPossible

优先升级工作负载连续性,以确保更新环境。

None 3

关闭虚拟机,不使用驱除策略。

  1. 多节点集群的默认驱除策略。
  2. 如果虚拟机阻止升级,您必须手动关闭虚拟机。
  3. 单节点 OpenShift 的默认驱除策略。

11.1.1.1. 使用命令行配置虚拟机驱除策略

您可以使用命令行为虚拟机配置驱除策略。

重要

默认驱除策略是 LiveMigrate。具有 LiveMigrate 驱除策略的不可缓解虚拟机可能会阻止节点排空或阻止基础架构升级,因为虚拟机不会从节点驱除。这种情况会导致迁移处于 PendingScheduling 状态,除非您手动关闭虚拟机。

对于不应迁移的虚拟机,您必须将非缓解虚拟机的驱除策略设置为 LiveMigrateIfPosible,这不会阻止升级,或设置为 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>

11.1.1.2. 使用命令行配置集群驱除策略

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

重要

配置集群驱除策略只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

流程

  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
    # ...

11.1.2. 运行策略

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

重要

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

带有这两个密钥的虚拟机配置无效。

11.1.2.1. 运行策略

spec.runStrategy 键有四个可能的值:

Always
当在另一个节点上创建虚拟机 (VM) 时,虚拟机实例 (VMI) 始终存在。如果因为某种原因而停止原始 VMI,则会创建新的 VMI。这与 running: true 的行为相同。
RerunOnFailure
如果上一个实例失败,则 VMI 会在另一个节点上重新创建。如果虚拟机成功停止,则不会重新创建实例,比如在关闭时。
Manual(手动)
您可以使用 startstoprestart virtctl 客户端命令手动控制 VMI 状态。虚拟机不会自动重启。
Halted
创建虚拟机时不存在 VMI。这与 running: false 的行为相同。

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

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

表 11.2. 在 virtctl 命令前和后运行策略
初始运行策略StartStopRestart

Always

-

Halted

Always

RerunOnFailure

-

Halted

RerunOnFailure

Manual

Manual

Manual

Manual

Halted

Always

-

-

注意

如果使用安装程序置备的基础架构安装的集群中某个节点无法进行机器健康检查且不可用,则带有 runStrategy: AlwaysrunStrategy: RerunOnFailure 的虚拟机会被重新调度到新节点上。

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

您可以使用命令行为虚拟机配置运行策略。

重要

spec.runStrategyspec.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 卡硬件故障,在修复或替换问题节点时,故障节点上的工作负载需要重启。节点维护模式允许集群管理员安全关闭节点,将工作负载移到集群的其它部分,并确保工作负载不会中断。详细进度和节点状态详情会在维护过程中提供。

11.1.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.