Pod的生命周期
示意图:
-
pod里的探针:检测服务的可用性
- 是否就绪
- 是否工作正常
-
- 就绪探针:判断服务是否可以提供访问
- 存活探针:检测是否可以继续工作
-
检测方法
- TCP socket响应
- HTTP >=200 && <400 #正常值
- EXEC 0 #运行脚本的返回值为0正常
-
pod生命周期详细说明
-
注:
- 可以将启动后看成启动前
- pause一启动就休眠,所以适合初始化网络栈和挂载网络卷,不易出问题
- initC-1 > initC-2 > initC-3 线性启动
- mainC-1,mainC-2.....并行启动
-
init容器
引入:Pod 能够具有多个容器,应用运行在容器里面,但是它也可 能有一个或多个先于应用容器启动的 Init 容器
init容器与普通的容器非常像,除了以下两点:
init容器总是运行到成功完成为止,
每个init容器都必须在下一个init容器启动之前完成
-
注:
- 不能将应用程序放到initc中去运行
- 如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod, 直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动
-
kubernetes重启策略
Pod的重启策略与控制方式息息相关,当前可用于管理Pod的控 制器包括 ReplicationController、Job、DaemonSet及直接通过 kubelet管理(静态Pod)。
-
每种控制器对Pod的重启策略要求如下:
- RC和DaemonSet:必须设置为Always,需要保证该容器持续运 行。
- Job和CronJob:OnFailure或Never,确保容器执行完成后不再 重启。
- kubelet:在Pod失效时自动重启它,不论将RestartPolicy设置为 什么值,也不会对Pod进行健康检查。
-
init容器的作用:因为init容器具有与应用程序容器分离的单独镜像,所以它们的启动 相关代码具有如下优点:
-
initC特殊说明
- 在 Pod 启动过程中,Init 容器会按顺序在网络和数据卷初始化之 后启动。每个容器必须在下一个容器启动之前成功退出
- 如果由于运行时或失败退出,将导致容器启动失败,它会根据 Pod 的 restartPolicy 指定的策略进行重试。然而,如果 Pod 的 restartPolicy 设置为 Always,Init 容器失败时会使用 RestartPolicy 策略
- 所有的 Init 容器没有成功之前,Pod 将不会变成 Ready 状态。 Init 容器的端口将不会在 Service 中进行聚集。 正在初始化中的 Pod 处于 Pending 状态,但应该会将 Initializing 状态设置为 true
- 对 Init 容器 spec 的修改被限制在容器 image 字段,修改其他字 段都不会生效。更改 Init 容器的 image 字段,等价于重启该 Pod
- 注意: Init 容器具有应用容器的所有字段。除了 readinessProbe,因为 Init 容器无法定义不同于完成(completion)的就绪(readiness) 之外的其他状态
- 在 Pod 中的每个 app 和 Init 容器的名称必须唯一;与任何其它 容器共享同一个名称,会在验证时抛出错误
-
容器探针:探针是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler。有三种类型的处理程序:
-
探针类型
-
钩子--启动退出动作
Pod hook(钩子)是由 Kubernetes 管理的 kubelet 发起的,在 容器中的进程启动前或者容器中的进程终止之前运行,这是包含在 容器的生命周期之中。可以同时为 Pod 中的所有容器都配置hook
-
Hook的类型
- exec:执行一段命令
- HTTP:发送HTTP请求
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。