Pod 生命周期

翻译官方文档

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

猜你喜欢

转载自blog.csdn.net/qq_35753140/article/details/105427973