6.7. 使用 Node Health Check Operator 部署节点健康检查


使用 Node Health Check Operator 识别不健康的节点。Operator 使用 Self Node Remediation Operator 来修复不健康的节点。

6.7.1. 关于 Node Health Check Operator

Node Health Check Operator 检测到集群中的节点的健康状态。NodeHealthCheck 控制器创建 NodeHealthCheck 自定义资源(CR),它定义了一组条件和阈值来确定节点的健康状态。

Node Health Check Operator 还将 Self Node Remediation Operator 安装为默认的补救提供程序。

当 Node Health Check Operator 检测到不健康的节点时,它会创建一个补救 CR 触发补救供应商。例如,控制器创建 SelfNodeRemediation CR,它会触发 Self Node Remediation Operator 来修复不健康的节点。

NodeHealthCheck CR 类似以下 YAML 文件:

apiVersion: remediation.medik8s.io/v1alpha1
kind: NodeHealthCheck
metadata:
  name: nodehealthcheck-sample
spec:
  minHealthy: 51% 1
  pauseRequests: 2
    - <pause-test-cluster>
  remediationTemplate: 3
    apiVersion: self-node-remediation.medik8s.io/v1alpha1
    name: self-node-remediation-resource-deletion-template
    namespace: openshift-operators
    kind: SelfNodeRemediationTemplate
  selector: 4
    matchExpressions:
      - key: node-role.kubernetes.io/worker
        operator: Exists
  unhealthyConditions: 5
    - type: Ready
      status: "False"
      duration: 300s 6
    - type: Ready
      status: Unknown
      duration: 300s 7
1
指定补救供应商同时修复目标池中节点所需的健康节点数量(以百分比或数量)。如果健康节点的数量等于或超过 minHealthy 设定的限制,则会出现补救。默认值为 51%。
2
防止任何新的补救启动,同时允许持续补救保留。默认值为空。但是,您可以输入字符串数组来识别暂停补救的原因。例如 pause-test-cluster
注意

在升级过程中,集群中的节点可能会临时不可用,并被识别为不健康。对于 worker 节点,当 Operator 检测到集群正在升级时,它会停止修复新的不健康节点,以防止此类节点重新引导。

3
指定补救供应商的补救模板。例如,通过 Self Node Remediation Operato。
4
指定与您要检查的标签或表达式匹配的 selector。默认值为空,用于选择所有节点。
5
指定决定节点是否被视为不健康的条件列表。
6 7
指定节点状况的超时持续时间。如果在超时时间内满足了条件,则会修复该节点。超时时间较长可能会导致不健康节点上的工作负载长时间停机。

6.7.1.1. 了解 Node Health Check Operator 工作流

当节点标识为不健康状态时,Node Health Check Operator 会检查其他节点不健康的数量。如果健康的节点数量超过 NodeHealthCheck CR 的 minHealthy 字段中指定的数量,控制器会从补救供应商在外部补救模板中提供的详细信息创建一个补救 CR。补救后,kubelet 会更新节点的健康状况。

当节点处于健康状态时,控制器会删除外部补救模板。

6.7.1.2. 关于节点健康检查如何防止与机器健康检查冲突

当同时部署节点健康检查和机器健康检查时,节点健康检查会避免与机器健康检查冲突。

注意

OpenShift Container Platform 将 machine-api-termination-handler 部署为默认的 MachineHealthCheck 资源。

以下列表概述了部署节点健康检查和机器健康检查时的系统行为:

  • 如果只有默认机器健康检查,则节点健康检查将继续识别不健康的节点。但是,节点健康检查会忽略处于 Terminating 状态的不健康节点。默认机器健康检查处理处于 Terminating 状态的不健康节点。

    日志消息示例

    INFO MHCChecker	ignoring unhealthy Node, it is terminating and will be handled by MHC	{"NodeName": "node-1.example.com"}

  • 如果修改了默认机器健康检查(例如,unhealthyConditionsReady),或者是否创建额外的机器健康检查,则节点健康检查被禁用。

    日志消息示例

    INFO controllers.NodeHealthCheck disabling NHC in order to avoid conflict with custom MHCs configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}

  • 当只存在默认的机器健康检查,则会重新启用节点健康检查。

    日志消息示例

    INFO controllers.NodeHealthCheck re-enabling NHC, no conflicting MHC configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}

6.7.2. 使用 Web 控制台安装 Node Health Check Operator

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

先决条件

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

流程

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

验证

确认安装成功:

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

如果 Operator 没有成功安装:

  1. 导航到 Operators Installed Operators 页面,并检查 Status 列中是否有任何错误或故障。
  2. 导航到 Workloads Pods 页面,并检查 openshift-operators 项目中报告问题的 pod 的日志。

6.7.3. 使用 CLI 安装 Node Health Check Operator

您可以使用 OpenShift CLI (oc)安装 Node Health Check Operator。

要在您自己的命名空间中安装 Operator,请按照以下步骤执行。

要在 openshift-operators 命名空间中安装 Operator,请跳至步骤 3,因为需要新的 Namespace 自定义资源(CR)和 OperatorGroup CR 的步骤。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 为 Node Health Check Operator 创建 Namespace 自定义资源 (CR):

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

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

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

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

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

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

    1. 定义 Subscription CR 并保存 YAML 文件,如 node-health-check-subscription.yaml

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
          name: node-health-check-operator
          namespace: node-health-check 1
      spec:
          channel: stable 2
          installPlanApproval: Manual 3
          name: node-healthcheck-operator
          source: redhat-operators
          sourceNamespace: openshift-marketplace
          package: node-healthcheck-operator
      1
      指定您要安装 Node Health Check Operator 的命名空间。要在 openshift-operators 命名空间中安装 Node Health Check Operator,请在 Subscription CR 中指定 openshift-operators
      2
      指定订阅的频道名称。要升级到 Node Health Check Operator 的最新版本,您必须手动将订阅的频道名称从 candidate 改为 stable
      3
      如果您的指定版本被目录中的后续版本取代,则将批准策略设置为 Manual。此计划阻止自动升级到更新的版本,且需要在启动 CSV 可以完成安装前手动批准。
    2. 要创建 Subscription CR,请运行以下命令:

      $ oc create -f node-health-check-subscription.yaml

验证

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

    $ oc get csv -n openshift-operators

    输出示例

    NAME                              DISPLAY                     VERSION  REPLACES PHASE
    node-healthcheck-operator.v0.2.0. Node Health Check Operator  0.2.0             Succeeded

  2. 验证 Node Health Check Operator 是否正在运行:

    $ oc get deploy -n openshift-operators

    输出示例

    NAME                                           READY   UP-TO-DATE   AVAILABLE   AGE
    node-health-check-operator-controller-manager  1/1     1            1           10d

6.7.4. 收集 Node Health Check Operator 的数据

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

6.7.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.