文章目录
- 1. Pod的设计动机
- 1.1 玩法
- 1.2 对外
- 1.3 对内
- 1.4 Pod死掉
- 2. lnit容器
- 3. 镜像拉取策略
- 4. Pod状态和重启策略
- 4.1 Pod状态
- 4.2 容器重启策略
- 4.3 Pod状态对应重启策略
1. Pod的设计动机
1.1 玩法
容器介于操作系统和应用之间,容器的推荐玩法是每个容器运行一个进程。
1.2 对外
Pod作为一个独立的部署单位,支持横向扩展和复制。共生(协同调度),命运共同体(例如被终结),协同复制,资源共享,依赖管理
1.3 对内
Pod内容器互相协作如下:
- pod中的应用必须协调端口占用。
每个pod都有一个唯一的IP地址,跟物理机和其他pod都处于一个扁平的网络空间中,它们之间可以直接连通。 - Pod中应用容器的hostname被设置成Pod的名字。
- Pod中的应用容器可以共享volume。
Volume能够保证pod重启时使用的数据不丢失
1.4 Pod死掉
在以下几种情况下都会死:
- 调度失败
- 节点故障
- 缺少资源
- 节点维护
- 用户主动干掉Pod
2. lnit容器
- 概念
Init 容器是一种专用的容器,在应用程序容器启动之前运行。总是运行到成功完成为止。
每个 Init 容器都必须在下一个 Init 容器启动之前成功完成。 - 作用
等待一个 Service 创建完成,通过类似如下 shell 命令:
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; exit 1
在启动应用容器之前等一段时间,使用类似 sleep 60 的命令
3. 镜像拉取策略
imagePullPolicy
选项参数如下:
- Always
总是拉取新镜像
imagePullPolicy: Always
- IfNotPresent
本地有则使用本地镜像,不拉取
imagePullPolicy: IfNotPresent
- Never
只使用本地镜像,从不拉取
imagePullPolicy: Never
4. Pod状态和重启策略
4.1 Pod状态
- Pending
Pod已被K8S系统接收,但有一个或多个容器镜像尚未创建。等待时间包括调库Pod的时间和通过网络下载镜像的时间。 - Running
该Pod已经绑定到一个节点上,Pod中所有容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。 - Successd
Pod中所有容器都被成功终止并且不会再重启。 - Failed
Pod中所有容器都已经终止,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或被系统终止。 - Unkonwn
无法获取Pod的状态,通常是因为与Pod所属主机通信失败
4.2 容器重启策略
字段Pod.spec.restartPolicy
- Always(默认)
exitCode=任何数字,执行重启操作 - OnFailure
exitCode!=0,执行重启操作 - Never
exitCode=任何数字,不容器。
4.3 Pod状态对应重启策略