【k8s系列九】k8s应用节点的探针1--探针类型

126 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

pod的生命周期主要有三个部分, 第一部分,创建pause, 第二部分初始化容器, 第三步应用容器运行. 今天主要来说第三部分应用容器运行.应用容器里面有很多探针, 启动前探针, 结束前探针, 就绪探针, 存货探针. 接下来就说说探针.

一. 探针

探针是由kubelet对容器执行的定期诊断。对于为什么由kubelet进行诊断呢?如果由controllerManager发起的话,会有什么问题呢?假如集群有1000个节点,如果由controllerManager发起定期诊断的话, controllerManager就累死了. 有1000个节点,那么就可能有上万个容器. 这样不利于水平扩展. 而随着pod数量的增加, 对应的节点数也会增加. 节点数增加, 那么每个节点上的kube-proxy和kubelet也对应的增加.所以,让kubectl做这件事更合理, 每个kubectl只需要负责当前物理机自己的探针.

1. 探针的类型

老版本的探针有两种类型, 新版本多一种有三种类型.

1) livenessProbe: 存活探针

存活探针指示容器是否正在运行. 如果存活探测失败, 则kubelet会杀死容器,并且容器会收到重启策略的影响. 如果容器不提供存活探针, 则默认状态为success

2) readinessProbe: 就绪探针

指示容器是否准备服务请求. 如果就绪探测失败, 断电控制器将重与pod匹配的所有service的断点中删除该pod的ip地址.初始延迟之前的就绪状态默认是failure. 如果容器不提供就绪探针, 则默认状态为success.

2. 探测方式

要执行诊断,kubelet调用有容器实现的Handler。有三种类型的处理程序。

1) ExecAction

ExecAction是在容器内执行指定命令。如果命令退出时返回码为0,则认为诊断成功。否则失败.

2) TCPSocketAction

对指定端口上的容器的IP地址进行TCP检测。如果端口打开,则身段被认为是成功的。否则失败.

3) HTTPGetAction

对指定的端口和路径上的容器的IP地址执行Http Get请求。如果响应的状态码大于200并且小于400, 则诊断被认为是成功的。否则失败.

3.探针的探测结果

探针每次探测, 有三种可能的结果, 每种结果对应的应对方案是不同的

1) 探测成功

表示容器通过了诊断.

  • 如果是就绪探测, 就标记探测通过
  • 如果是存货探测, 就什么都不做

2) 探测失败

表示容器没有通过诊断

  • 如果是就绪探测, 就静默, 什么都不做
  • 如果是存货探测, 就重载

3) 未知

表示诊断失败, 因此不会采取任何行动.

\