Kubernetes中的基本概念(五) pods的生命周期
抽象能力是区分人和低等生物的重要特征。
pod 的声明周期
-
Pending
-
Running
-
Succeeded
-
Failed
-
Unknown
pod 状态查询(conditions)
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#podcondition-v1-core
容器探头(probes)
-
ExecAction 执行容器内的命令
-
TCPSocketAction 通过socket监听特定端口的数据。
诊断依据是查看port是否打开。
-
HTTPGetAction 7层http的GET动作确认
-
liveness or readiness 探头的区别
liveness 依据探头返回的状态,去决定是否杀掉并重启容器。
readiness 依据探头返回的状态,去决定是否发送流量到容器。
初始化容器
- 执行成功则退出,失败则中断后续任务。
应用场景
-
设置前置任务
-
应用任务分层设计
-
before callback
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
annotations:
pod.beta.kubernetes.io/init-containers: '[
{
"name": "init-myservice",
"image": "busybox",
"command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]
},
{
"name": "init-mydb",
"image": "busybox",
"command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"]
}
]'
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
pod preset
工作流程
当收到pod创建请求时,
-
检查集群内所有的PodPreset
-
如果存在匹配的前置命令集(通过label selector),合并prset定义的资源到pod的定义中。
-
为修改过的pod定义添加注解。
主动和被动中断(disruptions/voluntary or involuntary)
ReplicaSet(复制控制器)
通常使用deployments, 除非发布一次性应用(不需要更新)。
ReplicaController
维护监控管辖内的pods,少则增加,多则移除。
通常配合其他对象,实现
-
扩容
-
分流
Deployment
-
管理replicaset
-
更新pod的状态
-
回滚发布历史
-
自动扩容
-
管理发布状态(中止或重新开始)