一、功能概述
·系统实时检测需要人为干预解决的持续性故障。
·故障范围涵盖操作系统、K8s 环境、运行时等数十种检测项。
·通过预置专家经验(执行修复脚本、重启组件)来对故障进行快速响应。
二、检测项介绍
| 检测项 | 描述 | 风险等级 | 自愈动作 |
| FDPressure | Too many open files(查看主机的文件描述符数量是否达到最大值的 90%) | low | – |
| RuntimeUnhealthy | List containerd task failed | low | RestartRuntime |
| KubeletUnhealthy | Call kubelet healthz failed | low | RestartKubelet |
| ReadonlyFilesystem | Filesystem is readonly | high | – |
| OOMKilling | Process has been oom-killed | high | – |
| TaskHung | Task blocked more than beyond the threshold | high | – |
| UnregisterNetDevice | Net device unregister | high | – |
| KernelOopsDivideError | Kernel oops with divide error | high | – |
| KernelOopsNULLPointer | Kernel oops with NULL pointer | high | – |
| Ext4Error | Ext4 filesystem error | high | – |
| Ext4Warning | Ext4 filesystem warning | high | – |
| IOError | IOError | high | – |
| MemoryError | MemoryError | high | – |
| DockerHung | Task blocked more than beyond the threshold | high | – |
| KubeletRestart | kubelet restart | low | – |
三、通过控制台操作
1. 登录 容器服务控制台,选择左侧导航栏中的集群。
2. 在集群列表页中,单击集群 ID,进入该集群详情页。
3. 选择左侧菜单栏中的节点管理 > 故障自愈,进入故障自愈规则页面。
4. 单击新建故障自愈规则,创建新的故障自愈规则。
5. 创建完成后,返回节点池列表页。
6. 单击节点池 ID,进入节点池详情页。
7. 在节点池详情页的“运维信息”模块,单击编辑为节点池开启故障自愈能力。如下:
8. 开启后,可以在“运维记录”中查看实时故障检测详情,状态为“失败”则代表该检测项未通过。
四、1. 新建故障自愈规则
根据命令vim demo-HealthCheckPolicy.yaml进行自愈规则配置编辑。
根据命令kubectl create -f demo-HealthCheckPolicy.yaml集群中创建自愈规则,YAML 配置如下:
apiVersion: config.tke.cloud.tencent.com/v1kind: HealthCheckPolicymetadata: name: test-all namespace: cls-xxxxxxxx(集群 id)spec: machineSetSelector: matchLabels: key: fake-label rules: – action: RestartKubelet enabled: true name: FDPressure – action: RestartKubelet autoRepairEnabled: true enabled: true name: RuntimeUnhealthy – action: RestartKubelet autoRepairEnabled: true enabled: true name: KubeletUnhealthy – action: RestartKubelet enabled: true name: ReadonlyFilesystem – action: RestartKubelet enabled: true name: OOMKilling – action: RestartKubelet enabled: true name: TaskHung – action: RestartKubelet enabled: true name: UnregisterNetDevice – action: RestartKubelet enabled: true name: KernelOopsDivideError – action: RestartKubelet enabled: true name: KernelOopsNULLPointer – action: RestartKubelet enabled: true name: Ext4Error – action: RestartKubelet enabled: true name: Ext4Warning – action: RestartKubelet enabled: true name: IOError – action: RestartKubelet enabled: true name: MemoryError – action: RestartKubelet enabled: true name: DockerHung – action: RestartKubelet enabled: true name: KubeletRestart
五、2. 开启自愈开关
在 MachineSet 中指定字段 healthCheckPolicyName: test-all,YAML 配置如下:
apiVersion: node.tke.cloud.tencent.com/v1beta1kind: MachineSetmetadata: name:np-xxx ## 节点池名称,唯一标识资源spec: type: Native displayName: demo-machineset replicas: 2 autoRepair: true deletePolicy: Random healthCheckPolicyName: test-all instanceTypes: – C3.LARGE8 subnetIDs: – subnet-xxxxxxxx – subnet-yyyyyyyytemplate: metadata: labels: node.tke.cloud.tencent.com/machineset:np-xxx ## 节点池名称,唯一标识资源……