k8s Pod 的生命周期
1.概述
Pod(容器组) 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod 可以被分为自主式的 Pod 和控制器管理的 Pod。这里主要研究的是自主式 Pod 的生命周期。
2. Pod 的生命周期

3. 初始化容器 InitContainer
Init Container 是在主容器启动之前运行的特殊容器,用来做初始化工作。
- 一个 Pod 可以有多个 Init Container
- 按顺序执行,前一个成功,后一个才启动
- 全部执行成功后,主容器才启动
- 如果任意一个失败,Pod 会重启(或一直重试,取决于 restartPolicy)

4. 启动探针 Startup
k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动。当配置了 startupProbe 后,会先禁用其他探针,直到 startupProbe 成功后,其他探针才会生效。
4.1 Pod 文件配置


4.2 startupProbe 完成后,其他探针才开始工作

5. 就绪探针 Readiness
指示容器是否准备好接受服务请求。如果探测失败,将从与 Pod 匹配的所有 Service 中删除该 Pod 的 ip 地址。
5.1 Pod 配置文件



5.2 通过 Pod 的内部 ip 访问 nginx 服务,nginx 服务正常

5.3 通过 Service 服务访问 nginx 服务。因为 readiness 探针未完成,所以 nginx 服务访问失败。但 readiness 探针完成后,通过 Service 服务访问 nginx 服务正常

6. 存活探针 Liveness
指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略影响。
6.1 Pod 配置文件

6.2 Pod 反复重启

6.3 将 started.html 复制到目标容器的目录,Pod 不再重启

7. Start 钩子函数 postStart 和 Stop 钩子函数 preStop
7.1 Pod 配置文件

7.2 postStart 验证
容器创建完成后执行对应动作。但是不能保证该操作一定执行。

7.3 preStop 验证
容器停止前执行对应的动作。

- 点赞
- 收藏
- 关注作者
评论(0)