pod状态

283 阅读3分钟

pending挂起:pod已被kubernetes接受,等待时间包括调度pod时间和获取镜像时间

running运行中:已经被绑定到节点,容器都已经被创建,至少有一个容器正在运行,或者正处于重启状态

succeeded成功:所有容器成功终止,不会再重启

failed失败:所有容器都已经被终止,至少有一个容器是因为失败而终止,退出状态码非0或被系统终止

unknown未知:无法获取pod的状态,和节点通信失败

⒈Pod 中只有一个容器并且正在运行,容器成功退出

  ·记录事件完成

  ·如果restartPolicy为:

    Always:重启容器;Pod phase仍为Running

    OnFailure:Pod phase 变成 Succeeded

    Never:Pod phase 变成 Succeeded

⒉Pod 中只有一个容器并且正在运行。容器退出失败

  ·记录失败事件

  ·如果restartPolicy为:

    Always:重启容器;Pod phase仍为Running

    OnFailure:重启容器;Pod phase仍为Running

    Never:Pod phase 变成 Failed

⒊Pod 中有两个容器并且正在运行。容器1退出失败

  记录失败事件·

  如果restartPolicy为:

    Always:重启容器;Pod phase仍为Running

    OnFailure:重启容器;Pod phase仍为Running

    Never:不重启容器;Pod phase仍为Running

⒋如果有容器1没有处于运行状态,并且容器2退出:

  记录失败事件

  如果restartPolicy为:

    Always:重启容器;Pod phase仍为Running

    OnFailure:重启容器;Pod phase仍为Running

    Never:Pod phase 变成 Failed

⒌Pod 中只有一个容器并处于运行状态。容器运行时内存超出限制容器以失败状态终止

  ·记录0OM事件

  ·如果restartPolicy为:

    Always:重启容器;Pod phase仍为Running

    OnFailure:重启容器;Pod phase仍为Running

    Never:记录失败事件;Pod phase仍为Failed

⒍Pod 正在运行,磁盘故障

  ·杀掉所有容器,记录适当事件

  ·Pod phase 变成 Failed

  ·如果使用控制器来运行,Pod 将在别处重建

⒎Pod 正在运行,其节点被分段

  ·节点控制器等待直到超时

  ·节点控制器将Pod phase设置为Failed

  ·如果是用控制器来运行,Pod 将在别处重建

生命周期钩子函数

pods/lifecycle-events.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

pod创建过程

pod是k8s的基础单元,一个pod资源创建过程如下:

1、用户通过kubectl或其他api客户端提交pod spec给api server

2、api server收到指令后,通知给controller-manager创建一个资源对象

3、controller-manager通过api-server将相关信息存入etcd中

4、所有的k8s组件均使用watch机制来跟踪检查api server上的相关变动

5、kube-scheduler通过其watch觉察到api server创建了新的pod对象但尚未绑定至任何工作节点

6、kube-scheduler为pod对象挑选一个工作节点并将pod资源配置单发送到node节点上kubelet组件上

7、kubelet根据scheduler发来的资源配置单运行pod,运行成功后,将pod的运行信息返回给sceduler,scheduler将返回的pod运行状况信息存储到etcd数据中心

PodPreset

kubernetes.io/zh/docs/tas…

kubernetes.io/zh/docs/con…

PodDisruptionBudget

保护策略来控制Pod的运行个数

  • minAvailable:表示最小可用Pod数,表示在Pod集群中处于运行状态的最小Pod数或者是运行状态的Pod数和总数的百分比;

  • maxUnavailable:表示最大不可用Pod数,表示Pod集群中处于不可用状态的最大Pod数或者不可用状态Pod数和总数的百分比;

  • 注意:minAvailable和maxUnavailable是互斥了,也就是说两者同一时刻只能出现一种。

Mi表示(1Mi=1024x1024),M表示(1M=1000x1000)