Pod 生命周期
容器的状态和生命周期?
容器状态及转移图
- CREATE
- RUNNING
- PAUSE
- STOPPED
- Killed
状态转移图
Pod的启动流程和生命周期?
启动流程
- init container: 初始化容器进行初始化
- main container:主容器初始化
- post start: 主容器启动前执行特定操作
- after start: 主容器结束前执行特定操作
- liveness probe: 主容器运行状态检测
- readiness probe: 主容器就绪状态检测,检测服务是否准备就绪,可对外提供服务 无论是运行检测和就绪检测,都支持命令、TCP、HTTP等检查方式
Pods的几种状态
- Pending: 调度未完成,已经创建对应的资源,但是未完成就绪,原因有如下几种
- 处于下载镜像的过程中
- 指定标签无法满足,导致找不到节点运行Pod
- 运行状态检测或者就绪状态检测导致?(待测试)
- Running: Pods已经被创建,并且绑定到了对应的node上
- Succeeded: Pods内的容器都已经成功结束终止运行,并且没有设置重启策略,常见于Job类Pod
- Failed: Pods内的容器都已经结束终止运行,但其中有容器退出状态非0,所以状态为failed
- Unknown: 无法获得Pods状态信息,通常是Pods所运行的主机网络异常
生命周期回调函数
- PostStart:
- PreStop:
apiVersion: v1
kind: Pod
metadata:
name: javaweb-2
spec:
containers:
- image: resouer/sample:v2
name: war
lifecycle:
postStart:
exec:
command:
- "cp"
- "/sample.war"
- "/app"
preStop:
httpGet:
host: monitor.com
path: /warning
port: 8080
scheme: HTTP
事件:
1. 客户端发起创建Pods请求到APIServer
2. APIServer将请求存储在ETCD中
3. APIServer请求Scheduler调度,并将调度结果保存在ETCD中
4. Work节点上的kubelet通过APIServer检测到状态变化
5. kubelet此时从APIServer中拿到创建Pods的清单,并根据清单创建启动Pods
6. kubelet将结果状态发回给APIServer,APIServer将结果写回ETCD中