11.2. 将节点设置为维护模式

通过 Web 控制台、CLI 或者使用 NodeMaintenance 自定义资源将节点置于维护模式。

11.2.1. 通过 web 控制台将节点设置为维护模式

使用 ComputeNodes 列表中每个节点上 kebab 的 Options 菜单,或使用 Node Details 屏幕的 Actions 控件,将节点设置 维护模式。

流程

  1. 在 OpenShift Virtualization 中,点击 ComputeNodes
  2. 您可从此屏幕将节点设置为维护,这有助于在一个屏幕中对多个虚拟机执行操作,也可通过 Node Details 屏幕进行,其中可查看所选节点的综合详情:

    • 点击节点 kebab 末尾的 Options 菜单并选择 Start Maintenance
    • 点击节点名称以打开 Node Details 屏幕,然后点击 ActionsStart Maintenance
  3. 在确认窗口中点击 Start Maintenance

该节点将实时迁移具有 LiveMigration 驱除策略的虚拟机实例,且该节点不可再调度。该节点上的所有其他 pod 和虚拟机均被删除,并会在另一节点上重新创建。

11.2.2. 在 CLI 中将节点设置为维护模式

通过将节点标记为不可调度,并使用 oc adm drain 命令从节点驱除或删除 pod,将节点设置为维护模式。

流程

  1. 将节点标记为不可调度。节点状态变为 NotReady,SchedulingDisabled

    $ oc adm cordon <node1>
  2. 排空节点以准备进行维护。节点实时迁移 LiveMigratable 条件设置为 Truespec:evictionStrategy 字段设置为 LiveMigrate 的虚拟机实例。该节点上的所有其他 pod 和虚拟机均被删除,并会在另一节点上重新创建。

    $ oc adm drain <node1> --delete-emptydir-data --ignore-daemonsets=true --force
    • --delete-emptydir-data 标志会删除节点上使用 emptyDir 卷的任何虚拟机实例。这些卷中的数据是临时的,在终止后可以被安全地删除。
    • --ignore-daemonsets=true 标志确保守护进程集被忽略,pod 驱除可以成功继续。
    • 需要 --force 标志来删除不是由副本集或守护进程设置控制器管理的 pod。

11.2.3. 使用 NodeMaintenance 自定义资源将节点设置为维护模式

您可以使用 NodeMaintenance 自定义资源(CR)将节点置于维护模式。应用 NodeMaintenance CR 时,所有允许的 pod 都会被驱除并关闭该节点。被驱除的 pod 会被放入到集群中的另一节点中。

先决条件

  • 安装 OpenShift Container Platform CLI oc
  • 以具有 cluster-admin 权限的用户身份登录集群。

流程

  1. 创建以下节点维护 CR,并将文件保存为 nodemaintenance-cr.yaml

    apiVersion: nodemaintenance.kubevirt.io/v1beta1
    kind: NodeMaintenance
    metadata:
      name: maintenance-example  1
    spec:
      nodeName: node-1.example.com 2
      reason: "Node maintenance" 3
    1
    节点维护 CR 名称
    2
    要置于维护模式的节点名称
    3
    有关维护原因的纯文本描述
  2. 运行以下命令来应用节点维护计划:

    $ oc apply -f nodemaintenance-cr.yaml
  3. 运行以下命令,将 <node-name> 替换为节点的名称来检查维护任务的进度:

    $ oc describe node <node-name>

    输出示例

    Events:
      Type     Reason                     Age                   From     Message
      ----     ------                     ----                  ----     -------
      Normal   NodeNotSchedulable         61m                   kubelet  Node node-1.example.com status is now: NodeNotSchedulable

11.2.3.1. 检查当前 NodeMaintenance CR 任务的状态

您可以检查当前 NodeMaintenance CR 任务的状态。

先决条件

  • 安装 OpenShift Container Platform CLI oc
  • 以具有 cluster-admin 权限的用户身份登录。

流程

  • 运行以下命令,检查当前节点维护任务的状态:

    $ oc get NodeMaintenance -o yaml

    输出示例

    apiVersion: v1
    items:
    - apiVersion: nodemaintenance.kubevirt.io/v1beta1
      kind: NodeMaintenance
      metadata:
    ...
      spec:
        nodeName: node-1.example.com
        reason: Node maintenance
      status:
        evictionPods: 3   1
        pendingPods:
        - pod-example-workload-0
        - httpd
        - httpd-manual
        phase: Running
        lastError: "Last failure message" 2
        totalpods: 5
    ...

    1
    evictionPods 是调度用于驱除的 pod 的数量。
    2
    lastError 记录了最新的驱除错误(若有)。