5.1 Pod生命周期
Pod的生命周期指的是从Pod创建到终止的整个过程。它分为以下两种常见情况:
- 长期运行Pod: 例如运行HTTP服务的Pod,它在正常情况下会一直运行,但可以手动删除或终止。
- 短期运行Pod: 例如执行计算任务的Pod,任务完成后自动终止。
5.1.1 容器启动
- 初始化容器(Init Containers):在Pod中的主容器启动之前,初始化容器会先执行一些环境设置或初始化操作。
- 主容器启动:初始化完成后,Pod的主容器开始启动。
- Post-Start 操作:主容器启动后,会执行一个启动后钩子操作(PostStart Hook),用于启动后的一些任务。
- 健康检查:主容器启动后,Kubernetes会通过两种健康检查来确保容器的运行状态:
- 存活状态检查(Liveness Probe):检查容器是否存活,如果失败,Kubernetes会尝试重新启动容器。
- 准备就绪检查(Readiness Probe):检查容器是否准备好接受请求。如果失败,Pod会被从服务端点列表中移除,直到恢复健康。
5.1.2 容器终止
- Pre-Stop 操作:在容器终止前,可以设置一个终止前钩子(PreStop Hook),执行容器终止前的清理工作。
- 强制终止:如果容器未能在规定时间内终止,Kubernetes会在大约30秒后强制终止容器。
- 容器重启:根据容器的重启策略,Pod的容器可能会被重启。
5.1.3 容器重启策略
- Always:容器挂掉后会一直重启,这是默认策略。
- OnFailure:容器状态为错误时才重启,即容器正常终止时不会重启。
- Never:容器挂掉后不会重启。
对于Always策略,容器挂掉后会立即重启,如果再次失败,会延时重启,例如第一次失败后10秒重启,第二次失败后20秒重启,以此类推。
5.2 HealthCheck 健康检查
容器可能因为服务未启动或端口不正确等问题,无法正常运行。为此,Kubernetes提供了健康检查机制来检测Pod的状态。
5.2.1 Health Check方式
- Liveness Probe(存活状态探测):检查容器是否仍然在运行。如果失败,kubelet会杀死容器并根据重启策略决定是否重启。
- Readiness Probe(就绪型探测):检查容器是否准备好为外部请求提供服务。如果失败,Pod将被移除出服务的端点列表。
- Startup Probe:检查容器中的应用是否已经启动。如果启动探测失败,kubelet会杀死容器,并按重启策略重启。
5.2.2 Probe 探测方式
方式 | 说明 |
---|---|
Exec | 执行命令 |
HTTPGet | 通过HTTP请求指定URL路径 |
TCP | 通过TCP连接指定端口 |
gRPC | 使用gRPC执行远程过程调用,若返回状态为" SERVING"则认为探测成功 |
5.2.3 liveness-exec 示例
- 创建YAML文件:
apiVersion: v1