vlambda博客
学习文章列表

k8s之pod异常状态说明

# 一,前言

 记录pod的常见异常状态和原因, 方便日后查看。

# 二,Terminating

    表示pod被删除的状态。


pod删除流程:

  1. api-server收到删除请求, 将pod标记为被删除, 此时pod处于Terminating状态。

  2.  kubelet watch到pod被删除, 开始销毁pod。

  3.  kubelet 调用cri清理容器接口。

  4.  cri容器全部清理成功, 通知给api-server。

  5. api-server感知到pod成功销毁, 再检查metadata中finalizers, 如果还有就等待着关联资源清理完, 如果finalizers结束了, 再从etcd中删除pod数据, 流程结束。


卡在terminating的原因分析:

    1. 节点, kubelet, cri 异常

    根据流程来看, 节点, kubelet, cri异常导致容器清理失败, 没有办法通知到api-server去修改状态, 具体原因可能是节点宕机, 节点负载过高, 节点网络异常等问题


    2. finalizers 异常

    finalizers的关联删除机制, 需要等到关联的程序处理结束去把finalizers字段删掉, api-server才会真正清除pod, 如果关联程序或者资源异常, 也会卡在terminating


    3. terminationGracePeriodSeconds 值过大

    pod中的平滑关闭时间设置的过大(默认为30秒), 导致卡很久


# 三,Pending

    表示pod待调度状态。


卡在pending的原因分析:

    1. 资源不足

    比较常见的原因, 比如集群可分配的内存, gpu等资源不足


    2. nodeSelector, affinity问题

    pod调度不满足节点标签, 或者节点亲和性 pod亲和性等


    3. taint问题

    节点存在pod没有设置容忍的污点


    4. 调度组件的问题

    本身就是调度器执行的操作, 所以kube-scheduler组件异常, 也会导致没有办法调度


# 四,CrashLoopBackOff

    表示服务启动之后异常退出的状态。


原因分析:

    1. 业务异常,主动退出

    Exit Code 0, 可以通过kubectl logs查看业务日志。


    2. OOM异常(cgroup OOM, 系统OOM)

    Exit Code 137, 例如 limit设置小了出问题, 节点系统OOMkiil掉对应服务, 存活探针失败。


    3. 物理机异常(重启)

    Exit Code 255, 物理机重启导致容器重启。



# 五,ImagePullBackOff

    表示容器镜像拉取失败。

原因分析:

    1. 镜像权限异常(registry secret不存在或者不对)


    2. 镜像异常(不存在,超时)

扫码关注我

天府云计算架构茶话会