生命周期流程
- 创建主容器(containers)是必现的操作;
- 初始化容器(initContainers)
- 容器启动后钩子
- 启动探测、存活性探测(livenessprobe)、就绪性探测(readnessprobe)
- 容器终止前钩子
Pod声明周期几个状态
- Pending:创建pod资源并存入etcd中,尚未完成调度
- ContainerCreating: Pod调度完成,被分配到指定Node上。处于容器创建过程中,通常是在拉取镜像的过程中
- Running:Pod 包含所有容器都已经成功创建,并且成功运行起来
- Succeeded:Pod中的所有容器都已经成功终止且不会被重启
- Failed: 所有容器都意见终止,但至少有一个容器终止失败
容器探测
- Startup: 探测容器是否正常运行
- Liveness:判断容器师傅处于running 状态,根据重启策略决定是否重启容器
- Readiness:判断容器是否准备就绪并对外提供服务,可将容器设置为不可用,不接受service转发的请求
三种探测Pod探针
- ExecAction: 容器中执行一个命令,并根据返回的状态码进行诊断,只有返回0为成功
- TCPSocketAction: 通过与容器的某个TCP端口尝试建立连接
- HTTPGetAction: 通过向容器IP地址的某个端口的path发起HTTP GET请求
initContainer案例
- Yaml
[root@k8smaster4 ~]# cat init-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: initcontainer-demo
namespace: default
labels:
kubernetes.io/name: MyApp
name: init-test
spec:
initContainers:
- name: init-myservice
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
containers:
- name: myapp-container
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
- 查看Pod状态
[root@k8smaster4 ~]# kubectl get -f init-demo.yaml
- 查看Pod详细信息
[root@k8smaster4 ~]# kubectl describe -f init-demo.yaml
- 查看指定容器日志
[root@k8smaster4 ~]# kubectl logs initcontainer-demo -c init-myservice标签:容器,生命周期,name,demo,init,Flag,io,Pod From: https://blog.51cto.com/u_11726705/6044948