Kubernetes设计时已经具备了对容器的进程状态检查,如果检查到问题会触发重启容器,但是仅凭检查进程状态不足以决定应用程序的健康状况,比如应用程序已经挂起,但其进程仍在运行,例如Java应用程序抛出的OutOfMemoryError
Kubernetes的livenessPorbe是由kubelet执行定期检查,确认容器的健康状态
如果未通过健康检查,那么会触发容器自动重启,kubernetes只会以重启容器,而不会修复本质的问题
当容器在初始化时, 需要一个缓存时间,即为应用程序的启动时间,在此启动阶段是不具备对外提供服务;或者是在容器在高负载波动时,容器在短时间hang住
在以上的情形下,kubernetes引入了就绪探针readinessProbe,readinessProbe与livenessProbe不同之处是,readinessProbe不会启动重启容器,而是在策略时间内从EndpointController移出,以避免在出现故障时,将请求继续转发到故障的容器中
livenessProbe:
failureThreshold: 10
initialDelaySeconds: 300
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 5
readinessProbe:
failureThreshold: 300
initialDelaySeconds: 60
periodSeconds: 2
successThreshold: 2
tcpSocket:
port: 8080
timeoutSeconds: 2