节点健康检测

意义

在K8S集群运行的过程中,节点常常会因为运行时组件的问题、内核死锁、资源不足等各种各样的原因不可用。Kubelet默认对节点的PIDPressure、MemoryPressure、DiskPressure等资源状态进行了监控,但是当Kubelet上报这些状态的时候,节点很可能已经长时间处于不可用状态了,并且Kubelet可能已经开始了驱逐Pod的操作。所以原生K8S对节点健康的检测机制在一些场景下是不完善的,我们需要能够在节点出现问题之前提前发现,并且需要更加细致化的指标来描述节点的健康状态并且采取相应的恢复策略,实现智能运维,节省开发和运维人员的负担。

Node-Problem-Detector

NPD(Node-Problem-Detector) 是Kubernetes社区开源的集群节点的健康检测组件。NPD提供了通过正则匹配系统日志或文件来发现节点异常的功能。用户可以通过自己的运维经验,配置可能产生异常问题日志的正则表达式,选择不同的上报方式。NPD会解析用户的配置文件,当有日志能匹配到用户配置的正则表达式时,可以通过NodeCondition、Event或Promethues Metric等方式将检测到的异常状态上报。除了日志匹配功能,NPD还给接受用户自己编写的自定义检测插件,用户可以开发自己的脚本或可执行文件集成到NPD的插件中,让NPD定期执行检测程序。

TKE中的节点健康检测

在TKE中通过扩展组件的形式集成了NPD,并且对NPD的能力做了增强,称为NodeProblemDetectorPuls(NPDPlus)扩展组件。用户可以对已有集群一键部署NPDPlus扩展组件,也可以在创建集群的时候选择在创建集群的同时部署NPDPlus。在腾讯云容器团队长期运营运维K8S集群的经验中,提取了一些可以通过特定形式发现节点异常的指标,并且把其中的一些指标集成在了NPDPlus中。例如在NPDPlus容器中检测Kubelet和Docker的systemd状态,以及检测主机的文件描述符和线程数压力等。具体指标如下所示:

TKE使用NPDPlus的目的是能够提前发现节点可能不可用状态,而不是当节点已经不健康后再上报状态。当用户在TKE集群中部署了NPDPlus后,使用命令 kubectl describe node 会发现多出了很多Node Condition,如FDPressure表示该节点上已经使用的文件描述符数量是否已经达到机器允许最大值的80%;ThreadPressure表示节点上的线程数是否已经达到机器允许的90%等等。用户可以监控这些Condition,当异常状态出现时,提前采取规避策略。

同时,K8S目前认为节点NotReady的机制依赖于kube-controller-manager的参数设定,当节点网络完全不通的情况下K8S很难在秒级别发现节点的异常,这在一些场景下(如直播、在线会议等)是不能接受的。针对这种场景,NPDPlus中继承了分布式节点健康检测功能,可以在秒级快速地检测节点网络状态,以及是否能与其他节点相互通信,同时不依赖与K8S master组件的通信。此功能的实现原理和功能会在之后的文章中详细介绍。

节点自愈

采集节点的健康状态是为了能够在业务Pod不可用之前提前发现节点异常,从而运维或开发人员可以对Docker、Kubelet或节点进行修复。在NPDPlus中,为了减轻运维人员的负担,提供了根据采集到的节点状态从而进行不同自愈动作的能力。集群管理员可以根据节点不同的状态配置相应的自愈能力,如重启Docker、重启Kubelet或重启CVM节点等。同时为了防止集群中的节点雪崩,在执行自愈动作之前做了严格的限流,防止节点大规模重启。同时为了防止集群中的节点雪崩,在执行自愈动作之前做了严格的限流。具体策略为:

  • 在同一时刻只允许集群中的一个节点进行自愈行为,并且两个自愈行为之间至少间隔1分钟
  • 当有新节点添加到集群中时,会给节点2分钟的容忍时间,防止由于节点刚刚添加到集群的不稳定性导致错误自愈
  • 当节点触发重启CVM自愈动作后还处于异常状态时,则在3小时之内此节点不再执行任何自愈动作

NPDPlus会将执行过的所有自愈动作记录在Node的Event中,方便集群管理员了解在Node上发生的事件。

使用指南

  1. 登录腾讯云容器服务控制台,点击想要创建NPDPlus的集群。

  2. 点击集群详情页左侧的组件管理,在组件管理中选中NodeProblemDetectorPlus(节点异常检测Plus)。

  3. 配置NodeProblemDetectorPlus参数,可以选择根据特定节点的状态执行不同的自愈动作。

  4. 选择确定,点击完成即可一键创建。

  5. 在集群的组建管理中查看到NPDPlus运行中说明NPDPlus运行成功:

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙的更多相关文章

  1. k8s之list-watch机制、节点调度以及亲和性

    k8s之list-watch机制.节点调度以及亲和性 目录 k8s之list-watch机制.节点调度以及亲和性 一.list-watch机制 1. list-watch介绍 2. list-watc ...

  2. 云计算之路-阿里云上:3个manager节点异常造成 docker swarm 集群宕机

    今天 11:29 - 11:39 左右,docker swarm 集群 3 个 manager 节点同时出现异常,造成整个集群宕机,由此给您带来很大的麻烦,请您谅解. 受此次故障影响的站点有:博问,闪 ...

  3. K8S踩坑篇-master节点作为node节点加入集群

    前面我们二进制部署K8S集群时,三台master节点仅仅作为集群管理节点,所以master节点上中并未部署docker.kubelet.kube-proxy等服务.后来我在部署mertics-serv ...

  4. k8s集群节点更换ip 或者 k8s集群添加新节点

    1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...

  5. 【K8S】基于单Master节点安装K8S集群

    写在前面 最近在研究K8S,今天就输出部分研究成果吧,后续也会持续更新. 集群规划 IP 主机名 节点 操作系统版本 192.168.175.101 binghe101 Master CentOS 8 ...

  6. T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)

    -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=316-- ...

  7. ZooKeeper连接并创建节点以及实现分布式锁操作节点排序输出最小节点Demo

    class LockThread implements Runnable { private DistributedLock lock; public LockThread(int threadId, ...

  8. [SQL]T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)

    T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法)   -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ ...

  9. Elasticsearch学习之ES节点类型以及各种节点的分工

    ES各种节点的分工 1. 客户端节点 当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器.独立的客户端节点在一 ...

随机推荐

  1. Redis适配采坑记

    Redis适配采坑记 相对于其他的适配,Redis可以说是非常简单的其中只发现一个坑 问题一: 问题描述: redis认证失败 问题详解: redis连接配置时,本地需要采用password属性,远程 ...

  2. ZK集群源码解读

    1.1. 集群模式 1.1.1.   数据同步总流程 1.1.1.1. OBSERVING 1.1.1.2. FOLLOWING 1.1.1.3. LEADING 1.1.2. 领导选举 1.1.2. ...

  3. RocketMQ生产部署架构如何设计

    前言 看了我们之前的文章,相信小伙伴们对RocketMQ已经有了一个初步的了解,那么今天我们就来聊一聊具体如何来设计一套高可用的生产部署架构. 在聊如何设计这套架构的同时,我们再补充一些之前没提到的知 ...

  4. Combine 框架,从0到1 —— 4.在 Combine 中使用计时器

    本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 4.在 Combine 中使用计时器. 内容概览 前言 使用计时器执行周期性的工作 将计时器转换为计时 ...

  5. 漏洞扫描工具acunetix破解安装步骤

    Acunetix 12破解版安装教程 下载地址: 链接:https://pan.baidu.com/s/1jsKkrhOcx_O7ib7FQ6pidw 提取码:pwdj 1.下载软件压缩包文件,首先点 ...

  6. Linux宏:__ASSEMBLY__

    汇编:assembly 猜测:所以这个宏跟汇编有关?! 引用:某些常量宏会同时被C和asm引用,而C与asm在对立即数符号的处理上是不同的.asm中通过指令来区分其操作数是有符号还是无符号的,而不是通 ...

  7. JVM垃圾回收安全点Safe Point

    GC安全点(Safepoint) 程序执行时并非在所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这些位置称为“安全点(Safepoint) ” Safe Point的选择很重要, ...

  8. Spark Job-Stage-Task实例理解

    Spark Job-Stage-Task实例理解 基于一个word count的简单例子理解Job.Stage.Task的关系,以及各自产生的方式和对并行.分区等的联系: 相关概念 Job:Job是由 ...

  9. 【vue】---- 新版脚手架搭建项目流程详解

    一.概述 本文将介绍vue项目完整的搭建流程,在使用新版本的脚手架基础上,进行了一系列的完善和配置.主要内容如下: 1.项目初始化 安装脚手架 创建项目 项目结构 2.项目搭建配置 引入第三方插件 路 ...

  10. 简单说说Restful API

    前言: 最近一段时间,一直在低头敲代码,开发平台对外交互的API接口,功能已经大体完成了,回过头来看看自己的接口设计文档,不胜感慨,想当初自己也是为"接口名称"想破了脑袋,各种百度 ...