翻译官方文档
Pod 阶段
- Pending 下载镜像
- Running 全部pod已经绑定节点,全部镜像已经创建。至少一个容器正在运行或者正在启动/重启
- Succedded 全部容器成功终止,不会重启
- Failed 所有容器都终止了,至少一个容器因故障终止,也就是非零退出或者被系统终止
- Unknown 获取不到pod的状态,典型原因是与节点通信错误
Pod 状态(conditions)
- PodScheduled
- Ready
- Inintialized
- ContarinersReady
容器探针
kubelet调用容器实现的handler执行诊断
- ExecAction 执行命令,返回为0
- TCPSocketAction tcp端口打开
- HTTPGetAction Get请求返回的http状态码在200-400之间
探针状态
- Success
- Failure
- Unknown
三种探针:
- livenessProbe 探测容器是否running,如果失败,kubelet kill容器,容器根据restart policy策略执行相应动作,不提供这个探针,容器状态就是Success
- redinessProbe 如果失败,endpoint controller 将pod的ip从service的endpoints中移除,在initial delay之前是Failure状态,不提供这个探针,容器状态就是Success
- startupProbe 如果提供了这个探针,在它成功之前,其他探针都disabled。如果失败,kubelet kill容器,容器根据restart policy策略执行相应动作,不提供这个探针,容器状态就是Success
何时使用存活探针?
- 容器里的进程在遇到问题或变得不正常时能自行崩溃,就不需要。
- 如果容器启动时需要加载大量数据、配置文件或者迁移,就设置就绪探针,使它不在启动以后立即接收流量。删除pod时,它自动进入unready状态
- 如果容器启动时间通常超过
initialDelaySeconds + failureThreshold * periodSeconds
,应该指定一个和存活探针检查相同endpoint的启动探针
pod和容器 status
上报的pod status依赖于当前的容器 status
容器 states
pod被调度器指定节点后,kebelet开始用容器运行时创建容器。
- Waiting 拉取镜像或者应用secrets等,Reason有说明信息
- Running postStart钩子在容器进入running状态之前执行
- Terminated 正常或者异常终止,preStop钩子执行后进入这个状态
pod就绪gate
v1.14 Pod Ready++
重启策略
针对pod设置,对pod的所有容器生效。重启延迟倍数增长(10s,20s,40s…),5分钟封顶,成功执行10分钟后重置。
- Always
- OnFailure
pod 生命周期
控制平面会清理终止的pod(succeded或者failed的),当pod数超过kube-controller-manager设置的terminated-pod-gc-threshold
以后。
三类控制器可用:
- 期望终止:job的pod的重启策略必须是Onfailure或者Never
- 不期望终止:ReplicationController, ReplicaSet, or Deployment
- DaemonSet
如果容器success退出,OnFailure重启策略就不重启容器了
状态实例:
- pod running 只有一个容器,容器成功退出
- Log completion event
- Always:重启容器,pod running
- OnFailure: pod succedded
- Never: pod succedded
- pod running 只有一个容器,容器失败退出
- Log failure event.
- Always:重启容器,pod running
- OnFailure: 重启容器,pod running
- Never: pod Failed
- pod running 有两个容器,容器1失败退出
- Log failure event.
- Always:重启容器,pod running
- OnFailure: 重启容器,pod running
- Never: 不重启容器,pod running
- pod running 有两个容器,容器1 不是running,容器2失败退出
- Log failure event.
- Always:重启容器,pod running
- OnFailure: 重启容器,pod running
- Never: pod Failed
- pod running 有一个容器,容器内存不足
- 容器终止failure
- Log OOM event.
- Always:重启容器,pod running
- OnFailure: 重启容器,pod running
- Never: pod Failed
- pod running 磁盘掉了
- 杀死所有容器
- Log appropriate event.
- pod 阶段变为Failed
- 如果由控制器控制,在其他地方重启pod
- pod running 节点失联
- 节点控制器等待超时
- 节点控制器置pod阶段为Failed
- 如果由控制器控制,在其他地方重启pod