5.7. 使用 Node Health Check Operator 部署节点健康检查
使用 Node Health Check Operator 来部署 NodeHealthCheck
控制器。控制器识别不健康的节点,并使用 Poison Pill Operator 来修复不健康的节点。
Node Health Check Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
5.7.1. 关于 Node Health Check Operator
Node Health Check Operator 部署 NodeHealthCheck
控制器,后者创建 NodeHealthCheck
自定义资源(CR)。Node Health Check Operator 还会安装 Poison Pill Operator 作为默认补救供应商。
Operator 使用控制器来检测集群中节点的健康状况。控制器会创建一个 NodeHealthCheck
自定义资源(CR),该资源定义一组条件和阈值来确定节点的健康状况。
当节点健康检查检测到不健康节点时,它会创建一个触发补救供应商的补救 CR。例如,节点健康检查会创建 PoisonPillRemediation
CR,它会触发 Poison Pill 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: poison-pill.medik8s.io/v1alpha1 name: group-x namespace: openshift-operators kind: PoisonPillRemediationTemplate 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
- 指定补救供应商的补救模板。例如,在 Poison Pill Operator 中。
- 4
- 指定与您要检查的标签或表达式匹配的
selector
。默认值为空,用于选择所有节点。 - 5
- 指定决定节点是否被视为不健康的条件列表。
- 6 7
- 指定节点状况的超时持续时间。如果在超时时间内满足了条件,则会修复该节点。超时时间较长可能会导致不健康节点上的工作负载长时间停机。
5.7.1.1. 了解 Node Health Check Operator 工作流
当节点被识别为不健康时,Operator 会检查有多少其他节点不健康。如果健康的节点数量超过 NodeHealthCheck
CR 的 minHealthy
字段中指定的数量,控制器会从补救供应商在外部补救模板中提供的详细信息创建一个补救 CR。补救后,节点的健康状况会相应地更新。
当节点处于健康状态时,控制器会删除外部补救模板。
5.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"}
如果修改了默认机器健康检查(例如,
unhealthyConditions
为Ready
),或者是否创建额外的机器健康检查,则节点健康检查被禁用。日志消息示例
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"}