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
PodDisruptionBudget
保护策略来控制Pod的运行个数
-
minAvailable:表示最小可用Pod数,表示在Pod集群中处于运行状态的最小Pod数或者是运行状态的Pod数和总数的百分比;
-
maxUnavailable:表示最大不可用Pod数,表示Pod集群中处于不可用状态的最大Pod数或者不可用状态Pod数和总数的百分比;
-
注意:minAvailable和maxUnavailable是互斥了,也就是说两者同一时刻只能出现一种。
Mi表示(1Mi=1024x1024),M表示(1M=1000x1000)