Pod 可能需要时间来加载配置或数据,或者可能需要执行预热过程以防止第一个用户请求时间太长影响了用户体验。在这种情况下,不希望该 pod 立即开始接收请求,尤其是在运行的实例可以正确快速地处理请求的情况下。不要将请求转发到正在启动的 pod 中,直到完全准备就绪。
就绪探针
就绪探测器会定期调用,并确定特定的 pod 是否接收客户端请求。当容器的准备就绪探测返回成功时,表示容器己准备好接收请求。
就绪探针有三种类型:
- Exec 探针,执行进程的地方。容器的状态由进程的退出状态代码确定。
- HTTP GET 探针,向容器发送 HTTP GET 请求,通过响应的 HTTP 状态代码判断容器是否准备好。
- TCP socket 探针,它打开 TCP 连接到容器的指定端口。如果连接己建立,则认为容器己准备就绪。
启动容器时,可以为 Kubernetes 配置等待时间,经过等待时间后才可以执行第一次准备就绪检查之后,它会周期性地调用探针,并根据就绪探针的结果采取行动。如果某个 pod 报告它尚未准备就绪,则会从该服务中删除该 pod 。如果再次准备就绪,则重新添加 pod。
与存活探针不同,如果容器未通过准备检查,则不会被终止或重新启动。存活探针通过杀死异常的容器并用新的正常容器替代它们来保持 pod 正常工作,而就绪探针确保只有准备好处理请求的 pod 才可以接收它们的请求。
就绪探针的重要性
如果没有过给 pod 添加就绪探针,那么它们几乎会立即成为服务端点。如果应用程序需要很长时间才能开始监听传入连接,则在服务启动但尚未准备好接收传入连接时,客户端请求将被转发到该 pod。因此,客户端会看到 “连接被拒绝” 类型的错误。