Kubernetes Pod的生命周期
状态 :
- Pending:Pod被创建起,但是没有任何一个Node满足调度的条件,此时被挂起,或者Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
- Running:正常运行
- Failed:异常停止
- succeeded:pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。
- Unknown:出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。如Kubectl与apiserver无法正常通行,得不到pod的状态等..
- CrashLoopBackOff: 容器退出,kubelet正在将它重启
- InvalidImageName: 无法解析镜像名称
- ImageInspectError: 无法校验镜像
- ErrImageNeverPull: 策略禁止拉取镜像
- ImagePullBackOff: 正在重试拉取
- RegistryUnavailable: 连接不到镜像中心
- ErrImagePull: 通用的拉取镜像出错
- CreateContainerConfigError: 不能创建kubelet使用的容器配置
- reateContainerError: 创建容器失败
- RunContainerError: 启动容器失败
- PostStartHookError: 执行hook报错
- ContainersNotInitialized: 容器没有初始化完毕
- ContainersNotReady: 容器没有准备完毕
- ContainerCreating:容器创建中
- PodInitializing:pod 初始化中
在pod生命周期中,一共经历了这么几个重要的阶段
- 1(init C)初始化容器对pod进行初始化
- 2(post start)容器启动前钩子
- 3 两种探针的三个类型:ExecAction、TCPSocketAction、HTTPGetAction
- 3.1 liveness probe存活性探针,用于探测pod当前状态是否处于运行状态,探测方式共有三种,①执行自定义命令 ②向指定的TCP端口发请求 ③向对指定的HTTP服务发送请求(向指定url发送GET请求)
- 3.2 readiness probe就绪性探针,用于探测主容器中的主进程是否处于就绪状态,一个pod存活不代表他能够对外提供服务。探测方式同存活性探针
Pod的重启策略 restartPolicy:
- Always:只要pod进程挂了就重启,默认为Always,为了反复重启不给系统带来压力,他反复重启是这么做的,比如第一次重启是立即重启,第二次重启是终止后10秒后开始的 ,第三次20s...40s...80s..最长等待时间为300s。只要节点在,pod只会重启不会重新调度,除非删除pod
- OnFailure:只有pod状态为错误的时候才重启
- Never:无论什么情况都不重启
pod终止逻辑:pod接到终止信号后不会立即kill,而是会提供一个宽限期默认是30s,30s内如果没有完成平滑终止才会强制kill。
### livenessProbe 使用示范
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/healthy"]
initialDelaySeconds: 1
periodSeconds: 3
## readinessProbe 使用示例
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3