全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:ack-node-repairer

更新时间:Mar 19, 2024

当Node Problem Detector(简称NPD)组件检测到节点上的故障并生成节点的事件(Event)或者Condition上报给集群时,ACK的自愈系统(ACK Node Repairer)会监听每个节点上的新故障事件,并根据配置对故障节点进行相应的修复操作。本文介绍如何安装和配置ACK Node Repairer。

前提条件

背景信息

节点自愈系统默认集成了常见的节点故障以及对应的节点修复操作。当节点出现故障时,自愈系统会自动对故障所在节点触发相应的修复操作。当故障被修复后,NPD会修改故障状态,达到故障检测以及修复的闭环。运维人员也可以自定义需要采取修复操作的故障以及具体的修复操作。

NPD是Kubernetes节点诊断的工具,可以将节点的异常,例如Docker Engine Hang、Linux Kernel Hang、网络出网异常、文件描述符异常转换为节点的事件。

安装ack-node-repairer

使用ACK的自愈系统(ACK Node Repairer)前,您需要安装ack-node-repairer组件。

  1. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  2. 应用市场页面,搜索并选中ack-node-repairer。

  3. 在应用详情页面,单击页面右上角的一键部署

  4. 创建面板,选择集群和命名空间,然后单击下一步

  5. 参数配置页面,选择最新Chart 版本,在参数区域,设置账号的AK信息,然后单击确定

    AK

    AK信息设置如下:

    • accessKey:nodeRepairer.accessKey

    • accessSecret:nodeRepairer.accessSecret

配置ack-node-repairer

安装ACK的自愈系统(ACK Node Repairer)后,ACK Node Repairer会默认开启当前版本所支持的所有自愈功能。您可对某个自愈功能进行开关和配置,以下以NTP服务故障为例。

  1. 查看default-node-repairer资源的YAML文件。

    在安装ACK自愈系统后,集群会默认在kube-system命名空间下创建类型为noderepairers.nodes.alibabacloud.com,名为default-node-repairer的资源,该资源定义了自愈系统所监控的节点问题及相应的修复操作。执行以下命令查看YAML文件中定义的内容。

    kubectl -n kube-system get noderepairers.nodes.alibabacloud.com default-node-repairer -o yaml
  2. 修改default-node-repairer。

    在spec.rules列表中加入用于检测NTPProblemdetector和对应问题修复的healers,其定义片段如下:

    spec:
      rules:
      # 用于检测NTPProblem的detector,和对应修复问题的nodeOperation。
      - detector:
          conditionType: NTPProblem
          type: conditionType
          paused: false
        healers:
        - nodeOperation: restart-ntpd
          type: nodejob
    说明

    针对每一种故障场景的自愈,您需要关联故障的节点Condition与其对应的修复操作。rules.detector.conditionType是集群中出现的异常Condition。当设置rules.detector.paused为true时,此问题的自愈功能将被关闭。

    至此,当集群节点上有NTP服务异常时,ACK的自愈框架将会通过OOS到节点上执行systemctl restart chronyd.service命令,重启NTP服务。

自愈过程与结果记录

集群会默认在kube-system命名空间下创建类型为nodejobs.nodes.alibabacloud.com的资源来记录每次执行的自愈操作。您可以执行以下命令查看资源中定义的内容,并通过Status字段查看自愈执行的结果。

kubectl -n kube-system get nodejobs.nodes.alibabacloud.com {nodejob_cr_name} -o yaml