6.8. 使用 Node Maintenance Operator 将节点置于维护模式


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

6.8.1. 关于 Node Maintenance Operator

Node Maintenance Operator 监视是否有新的或删除的 NodeMaintenance CR。当检测到新的 NodeMaintenance CR 时,不会调度新的工作负载,并且该节点从集群的其余部分中分离。所有可被驱除的 pod 都会从节点上驱除。删除 NodeMaintenance CR 时,CR 中引用的节点将可用于新工作负载。

注意

使用 NodeMaintenance CR 进行节点维护任务可实现与 oc adm cordonoc adm drain 命令相同的结果,使用标准的 OpenShift Container Platform CR 处理。

6.8.2. 安装 Node Maintenance Operator

您可以使用 Web 控制台或 OpenShift CLI(oc)安装 Node Maintenance Operator。

注意

如果在集群中安装了 OpenShift Virtualization 版本 4.10 或更低版本,它包括了一个过时的 Node Maintenance Operator 版本。

6.8.2.1. 使用 Web 控制台安装 Node Maintenance Operator

您可以使用 OpenShift Container Platform Web 控制台安装 Node Maintenance Operator。

先决条件

  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 在 OpenShift Container Platform Web 控制台中导航至 Operators OperatorHub
  2. 搜索 Node Maintenance Operator,然后点 Install
  3. 保留安装模式命名空间的默认选择,以确保将 Operator 安装到 openshift-operators 命名空间中。
  4. Install

验证

确认安装成功:

  1. 导航到 Operators Installed Operators 页面。
  2. 检查 Operator 是否安装在 openshift-operators 命名空间中,其状态是否为 Succeeded

如果 Operator 没有成功安装:

  1. 导航到 Operators Installed Operators 页面,并检查 Status 列中是否有任何错误或故障。
  2. 进入到 Operators Installed Operators Node Maintenance Operator Details 页面,并在创建 pod 前检查 Conditions 部分是否有错误。
  3. 进入到 Workloads Pods 页面,在已安装的命名空间中搜索 Node Maintenance Operator pod,并在 Logs 选项卡中检查日志。

6.8.2.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 特权的用户身份登录。

流程

  1. 为 Node Maintenance Operator 创建一个 Namespace CR:

    1. 定义 Namespace CR 并保存 YAML 文件,如 node-maintenance-namespace.yaml

      apiVersion: v1
      kind: Namespace
      metadata:
        name: nmo-test
    2. 要创建 Namespace CR,请运行以下命令:

      $ oc create -f node-maintenance-namespace.yaml
  2. 创建 OperatorGroup CR:

    1. 定义 OperatorGroup CR 并保存 YAML 文件,如 node-maintenance-operator-group.yaml

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: node-maintenance-operator
        namespace: nmo-test
    2. 要创建 OperatorGroup CR,请运行以下命令:

      $ oc create -f node-maintenance-operator-group.yaml
  3. 创建一个 Subscription CR:

    1. 定义 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.11.0
      1
      指定您要安装 Node Maintenance Operator 的命名空间
      重要

      要在 openshift-operators 命名空间中安装 Node Maintenance Operator,请在 Subscription CR 中指定 openshift-operators

    2. 要创建 Subscription CR,请运行以下命令:

      $ oc create -f node-maintenance-subscription.yaml

验证

  1. 检查 CSV 资源来验证安装是否成功:

    $ oc get csv -n openshift-operators

    输出示例

    NAME                               DISPLAY                     VERSION   REPLACES  PHASE
    node-maintenance-operator.v4.11    Node Maintenance Operator   4.11                Succeeded

  2. 验证 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.3. 将节点设置为维护模式

您可以通过 web 控制台或 CLI 使用 NodeMaintenance CR 将节点置于维护模式。

6.8.3.1. 使用 Web 控制台将节点设置为维护模式

要将节点设置为维护模式,您可以使用 Web 控制台创建 NodeMaintenance 自定义资源(CR)。

先决条件

  • 以具有 cluster-admin 特权的用户身份登录。
  • OperatorHub 安装 Node Maintenance Operator。

流程

  1. 从 Web 控制台中的 Administrator 视角,导航到 Operators Installed Operators
  2. 从 Operator 列表中选择 Node Maintenance Operator。
  3. Node Maintenance 选项卡中,点 Create NodeMaintenance
  4. Create NodeMaintenance 页面中,选择 Form viewYAML 视图来 配置 NodeMaintenance CR。
  5. 要应用您配置的 NodeMaintenance CR,请点击 Create

验证

Node Maintenance 选项卡中,检查 Status 列并验证其状态是否为 Succeeded

6.8.3.2. 使用 CLI 将节点设置为维护模式

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

先决条件

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

流程

  1. 创建以下 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
    1
    节点维护 CR 的名称。
    2
    要置于维护模式的节点名称。
    3
    有关维护原因的纯文本描述。
  2. 运行以下命令来应用节点维护 CR:

    $ oc apply -f nodemaintenance-cr.yaml

验证

  1. 运行以下命令,检查维护任务的进度:

    $ oc describe node <node-name>

    其中 <node-name> 是节点的名称,如 node-1.example.com

  2. 检查输出示例:

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

6.8.3.3. 检查当前 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:
        drainProgress: 100   1
        evictionPods: 3   2
        lastError: "Last failure message" 3
        lastUpdate: "2022-06-23T11:43:18Z" 4
        phase: Succeeded
        totalpods: 5 5
    ...

    1
    排空节点完成的百分比。
    2
    调度用于驱除的 pod 数量。
    3
    最新的驱除错误(若有)。
    4
    最后一次更新状态的时间。
    5
    节点进入维护模式前的 pod 总数。

6.8.4. 从维护模式恢复节点

您可以通过 web 控制台或使用 NodeMaintenance CR 从维护模式恢复节点。恢复节点会使节点退出维护模式,并使其可再次调度。

6.8.4.1. 使用 Web 控制台从维护模式恢复节点

要从维护模式恢复节点,您可以使用 Web 控制台删除 NodeMaintenance 自定义资源(CR)。

先决条件

  • 以具有 cluster-admin 特权的用户身份登录。
  • OperatorHub 安装 Node Maintenance Operator。

流程

  1. 从 Web 控制台中的 Administrator 视角,导航到 Operators Installed Operators
  2. 从 Operator 列表中选择 Node Maintenance Operator。
  3. Node Maintenance 选项卡中,选择您要删除的 NodeMaintenance CR。
  4. 点击节点末尾的 Options 菜单 kebab 并选择 Delete NodeMaintenance

验证

  1. 在 OpenShift Container Platform 控制台中,点 Compute Nodes
  2. 检查您删除 NodeMaintenance CR 的节点的 Status 列,并验证其状态是否为 Ready

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

验证

  1. 运行以下命令,检查维护任务的进度:

    $ oc describe node <node-name>

    其中 <node-name> 是节点的名称,如 node-1.example.com

  2. 检查输出示例:

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

6.8.5. 使用裸机节点

对于使用裸机节点的集群,您可以使用 web 控制台 Actions 控制将节点置于维护模式,并从维护模式恢复节点。

注意

具有裸机节点的集群也可以将节点置于维护模式,并使用 web 控制台和 CLI 从维护模式恢复节点。这些方法通过使用 Web 控制台 Actions 控制,仅适用于裸机集群。

6.8.5.1. 维护裸机节点

在裸机基础架构上部署 OpenShift Container Platform 时,与在云基础架构上部署相比,还需要考虑其他注意事项。与云环境不同,集群节点被视为临时的,重新置备裸机节点需要大量时间和精力来进行维护任务。

当因为内核错误或 NIC 卡硬件故障造成裸机节点失败时,故障节点上的工作负载需要在集群中的另一个节点上重启,同时问题节点被修复或替换。节点维护模式允许集群管理员安全关闭节点,将工作负载移到集群的其它部分,并确保工作负载不会中断。详细进度和节点状态详情会在维护过程中提供。

6.8.5.2. 将裸机节点设置为维护模式

使用 Compute Nodes 列表中每个节点的选项菜单 kebab ,或使用 Node Details 屏幕的 Actions 控件,将节点设置为维护模式。

流程

  1. 从 Web 控制台的 Administrator 视角中,点 Compute Nodes
  2. 您可从此屏幕将节点设置为维护,这有助于对多个虚拟机执行操作,也可通过 Node Details 屏幕进行,其中可查看所选节点的综合详情:

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

该节点不可调度。如果已有带有 LiveMigration 驱除策略的虚拟机,则会实时迁移它们。该节点上的所有其他 pod 和虚拟机均被删除,并会在另一节点上重新创建。

验证

  • 进入到 Compute Nodes 页面,验证对应节点的状态是否为 Under Maintenance

6.8.5.3. 从维护模式恢复裸机节点

使用 Compute Nodes 列表中每个节点上 kebab 的 Options 菜单,或使用 Node Details 屏幕中的 Actions 控制,从维护模式恢复裸机节点。

流程

  1. 从 Web 控制台的 Administrator 视角中,点 Compute Nodes
  2. 您可从此屏幕恢复节点,这有助于对多个虚拟机执行操作,也可从 Node Details 屏幕,其中可查看所选节点的综合详情:

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

节点变为可调度。如果在维护之前已有该节点上运行的虚拟机实例,则它们不会自动迁移回该节点。

验证

  • 进入到 Compute Nodes 页面,验证对应节点的状态是否为 Ready

6.8.6. 收集 Node Maintenance Operator 的数据

要收集有关 Node Maintenance Operator 的调试信息,请使用 must-gather 工具。有关 Node Maintenance Operator 的 must-gather 镜像的信息,请参阅收集有关特定功能的数据

6.8.7. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.