k8s容器健康检查
[TOC]
k8s容器检查探针
当容器部署在k8s中的时候,k8s通过 liveness probe 和 readiness probe来监测容器的健康状况,其中liveness probe 和 readiness probe是由容器所在node上的kubelet定期执行的,那关于iveness probe 和 readiness probe分别有以下几个问题
liveness probe
1.如何理解”存活“状态?
2.容器配置了存活探针和没有配置存活探针有什么区别?
3.存活探针有哪几种探测方式?分别是如何配置和如何工作的?
4.如果存活探针探测失败会采取什么策略?
readiness probe
1.如何理解”就绪“状态?
2.容器配置了就绪探针和没有配置就绪探针有什么区别?
3.就绪探针有哪几种探测方式?分别是如何配置和如何工作的?
4.如果就绪探针探测失败会采取什么策略?
liveness probe
1.如何理解容器的“存活”状态?
容器存活,指的是容器可以在虚拟机上运行,但是这并不意味着容器已经可以提供服务。
2.什么样的容器需要配置存活探针?容器配置了存活探针和没有配置存活探针有什么区别?
如果容器中的进程能够在遇到问题或者不健康的情况下自行崩溃,那么就需要配置一个存活探针,来让k8s监测容器的健康状况;而不是以docker返回的容器的状态作为依据
3.存活探针有哪几种探测方式?分别是如何工作的?
容器所在节点上的kubelet调用handler(处理程序)对容器进行探测
handler有以下三种类型:
- ExecAction:在容器内执行指定命令,如果命令退出时的返回码为0,则表示探测成功;反之表示探测失败
- TCPSocketAction:对容器IP地址上的指定端口进行TCP检查,如果端口打开,则表示探测成功;反之表示探测失败
- HTTPGetAction:对容器IP地址上指定端口和路径执行HTTP Get请求,如果响应的状态码大于等于200,且小于400,则表示探测成功;反之表示探测失败
如何配置3种类型的探针
- ExecAction
1 | apiVersion: v1 |
- TCPSocketAction
1 | apiVersion: v1 |
- HTTPGetAction
1 | apiVersion: v1 |
每次探测都会得到以下3种结果:
- success:容器通过了探测
- failure:容器未通过探测
- unknown:诊断失败,不会对容器采取任何措施
4.如果存活探针探测失败会采取什么策略?
如果存活探针探测失败,则表示kubelet会将该容器kill掉,然后再根据容器的RestarPolicy进行下一步操作
每一个容器都可以重启策略(RestarPolicy),RestarPolicy有三种选项可以选择:
- Always(默认值):只要container退出就重新启动
- Onfailure:当container非正常退出后重新启动
- never:从不重启container
readiness probe
1.如何理解容器的“就绪”状态?
容器就绪表示container是否以及处于可接受service的请求了
2.什么样的容器需要配置存活探针?容器配置了就绪探针和没有配置就绪探针有什么区别?
就绪态探针的存在意味着 Pod 将在启动阶段不接收任何数据,并且只有在探针探测成功后才开始接收数据,所以如果你的容器需要加载大规模的数据、配置文件或者在启动期间执行迁移操作,可以添加一个就绪探针。
3.存活探针有哪几种探测方式?分别是如何工作的?
同“存活”探针
4.如果存活探针探测失败会采取什么策略?
如果ReadinessProbe失败,endpoints controller将会从service所匹配到的endpoint列表中移除关于这个container的IP地址,所以如果配置了就绪探针,对于Service匹配到的 endpoints有哪些,是ReadinessProbe决定的