1. 探测机制
Kubernetes有以下三种探测容器的机制:
- HTTP GET探针
对容器的IP地址(你指定的端⼜和路径)执⾏ HTTP GET请求。如果探测器收到响应,并且响应状态码不代表错误(换句话说,如果HTTP响应状态码是2xx或3xx),则认为探测成功。如果服务器返回错误响应状态码或者根本没有响应,那么探测就被认为是失败的,容器将被重新启动。
- TCP套接字探针
尝试与容器指定端口建⽴TCP连接。如果连接成功建⽴,则探测成功。否则,容器重新启动。
- Exec探针
在容器内执⾏任意命令,并检查命令的退出状态码。如果状态码是0,则探测成功。所有其他状态码都被认为失败。
1.1 存活探针

- 该 pod 的 描 述 ⽂ 件 定 义 了 ⼀ 个 httpGet 存 活 探 针 , 该 探 针 告 诉Kubernetes定期在端⼜8080路径上执⾏HTTP GET请求,以确定该容器是否健康。这些请求在容器运⾏后⽴即开始。
- 对于在⽣产中运⾏的pod,⼀定要定义⼀个存活探针。没有探针的话,Kubernetes⽆法知道你的应⽤是否还活着。只要进程还在运⾏,Kubernetes会认为容器是健康的。
1.2 就绪探针
如果容器未通过就绪探针检查,则不会被终⽌或重新启动。
存活探针通过杀死异常的容器并⽤新的正常容器替代它们来保持pod正常⼯作,⽽就绪探针确保只有准备好处理请求的pod才可以接收它们(请求)。这在容器启动时最为必要,当然在容器运⾏⼀段时间后也是有⽤的。
就绪探针失败的pod从服务的endpoint中移除

设置就绪探针

- 就绪探针将定期在容器内执⾏ls/var/ready命令。如果⽂件存在,则 ls命令返回退出码0,否则返回⾮零的退出码。如果⽂件存在,则就绪探针将成功;否则,它会失败。
- 如果没有将就绪探针添加到pod中,它们⼏乎会⽴即成为服务端点。如果应⽤程序需要很长时间才能开始监听传⼊连接,则在服务启动但尚未准备好接收传⼊连接时,客户端请求将被转发到该pod。因此,客户端会看到“连接被拒绝”类型的错误。
- 应该始终定义⼀个就绪探针,即使它只是向基准URL发送 HTTP请求⼀样简单。
2. 参考资料
- 《k8s in action》