当Pod状态显示为“Running”时,这表明Pod中所有容器都已经运行,但这并不意味着Pod中的应用程序已经准备好提供服务。实际上,“Running”状态仅仅表示容器的启动状态,与应用程序是否准备好提供服务无直接关系。可能由于以下原因,应用程序不能提供服务。
应用程序启动慢:容器已运行,但容器中的服务还在启动中,这时容器仍然无法提供服务。
应用程序假死:应用程序由于某种原因(如死锁、代码Bug),无法继续执行后面的工作。
为了解决这类问题,Kubernetes提供了探针机制。探针被配置为周期性检查容器中应用程序的健康状态。如果应用程序工作异常,则Kubernetes将采取相应的措施。容器探针支持以下3种类型。
livenessProbe(存活探针):检查容器中应用程序是否运行。如果存活探针失败,Kubernetes将重新启动容器,以尝试恢复应用程序的运行状态。
readinessProbe(就绪探针):检查容器中应用程序是否准备好接收流量。如果就绪探针失败,Kubernetes将Pod标记为“未准备就绪”,从而防止将新的流量转发到该Pod。
startupProbe(启动探针):检查容器中应用程序是否启动。它仅用于在容器启动阶段确定应用程序是否运行,一旦启动探针成功,它就不会再继续执行。
探针支持三种检查方法:
httpGet:向容器中指定路径发送HTTP请求来判断健康状态。如果HTTP响应的状态码大于或等于200且小于400,则表示成功,其他状态码则表示失败。
tcpSocket:向容器中指定端口建立TCP连接来判断健康状态。如果TCP建立成功,则表示成功,否则表示失败。
exec:在容器中执行命令,根据命令的退出状态码来判断健康状态。如果命令的退出状态码为0,则表示成功,非0则表示失败。