强大的自愈能力是kubernetes容器编排引擎的重要特性。
自愈的默认实现方式是自动重启发生故障的容器。除此之外,还可通过
Liveness和Readiness探测机制设置更精细的健康检查,进而实现如下要求:
-
零停机部署
-
避免部署无效的镜像
-
更加安全的滚动升级
一、Liveness探测 VS Readiness探测
-
Liveness探测和Readiness探测是两种healthy check机制,若不特意配置,kubernetes将对两种探测采取相同的默认行为,即通过判断容器启动进程的返回值( echo $?)是否为零来判断探测是否成功。
-
两种探测的配置方法完全一样,支持的配置参数也一样。 不同之处在于探测失败后的行为:Liveness 探测是重启容器;Readiness 探测则是将容器设置为不可用,不接收 Service 转发的请求。
-
Liveness 探测和 Readiness 探测是独立执行的,二者之间没有依赖,所以 可以单独使用,也可以同时使用。 用 Liveness 探测判断容器是否需要重启以实现自愈;用 Readiness 探测判断容器是否已经准备好对外提供服务。
1.1、每类探针都支持三种探测方法
-
exec: 通过执行命令来检查服务是否正常, 针对复杂检测或无 HTTP 接口的服务, 命令返回值为 0 则表示容器健康。
-
httpGet: 通过发送 http 请求检查服务是否正常, 返回 200-400 状态码则表明容器健康。
-
tcpSocket: 通过容器的 IP 和 Port 执行 TCP 检查, 如果能够建立 TCP 连接, 则表明容器健康。
1.2、探针探测的结果
-
Success: Container 通过了检查。
-
Failure: Container 未通过检查。
-
Unknown: 未能执行检查, 因此不采取任何措施。
1.3、Pod 重启策略 restartpolicy
-
Always: 总是重启
-
OnFailure: 如果失败就重启
-
Never: 永远不重启
二、默认的健康检查
每个容器启动时都会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定。如果
进程退出时返回码非零,则认为容器发生故障,kubernetes会根据restartPolicy重启容器。
模拟容器发生故障的场景,Pod配置文件如下:
apiVersion: v1
k

本文详细介绍了Kubernetes中的自愈能力和健康检查机制,包括Liveness探测和Readiness探测的原理与配置,以及它们在零停机部署、避免无效镜像、安全滚动升级等方面的应用。通过实例展示了如何通过探测方法如exec、httpGet、tcpSocket来定制健康检查,并在滚动更新和扩展操作中确保服务稳定。
最低0.47元/天 解锁文章
689

被折叠的 条评论
为什么被折叠?



