15、k8s-pod的生命周期-pod的创建、初始化容器、运行主容器、pod终止
概念:一边将pod对象从创建到pod的终止过程的这段时间称为pod的生命周期、主要有4个过程:
·pod的创建
·运行初始化容器(init container)过程
·运行主容器(mian container)过程
··容器启动后钩子(post start)、容器终止前钩子(pre stop)
··容器的存活性探测(liveness probe)、就绪性探测(readiness probe)
·pod终止过程
在pod的整个生命过程中、会出现5种状态(相位)、分别如下:
·挂起(Pending):apiserver已经创建了pod资源对象、但它尚未被调度完成或者仍处于下载镜像的过程中
·运行中(Running):pod已经被调度至某个节点、并且所有容器都已经被kubelet创建完成
·成功(Succeeded):pod中所有容器都已经成功终止并且不会被重启(容器执行完指令后就终止退出了)
·失败(Failed):所有容器都已经终止、但至少有一个容器终止失败、即容器返回了非0值得退出状态
·未知(Unknow):apiserver无法正常获取到pod对象得状态信息、通常由网络通信失败所致
pod的创建核终止
·pod的创建:
关键组件:apiServer、etcd、Scheduler、kubelet
pod的终止过程:
pod:初始化容器:initContainers
注意:如果初始化容器 无法启动 、就无法启动 ‘主容器’、且会一直尝试重启 初始化容器
1、新建yaml文件:vim pod-initcontainer.yaml
==================================================================================================================
apiVersion: v1
kind: Pod
metadata:
name: pod-initcontainer
namespace: dev
spec:
containers: #主容器
- name: main-container
image: nginx:1.17.1
ports:
- name: nginx-port
containerPort: 80
initContainers: #初始化容器的创建
- name: test-mysql
image: busybox:1.30
command: ['sh', '-c', 'until ping 192.168.177.201 -c 1 ; do echo waiting for mysql....; sleep 2; done;']
- name: test-redis
image: busybox:1.30
command: ['sh', '-c', 'until ping 192.168.177.202 -c 1 ; do echo waiting for mysql....; sleep 2; done;']
==================================================================================================================
2、执行文件:kubectl create -f pod-initcontainer.yaml
3、查看pod的状态:kubectl get pod pod-initcontainer -ndev
#原因是初始化容器创建后ping不通ip
4、持续观察pod状态 -w :kubectl get pod pod-initcontainer -ndev -w
5、给主机添加ip并观察pod的状态:ifconfig ens33:1 192.168.177.201 netmask 255.255.255.0 up
5、再继续添加网卡、容器就已经初始化完成、发现pod已经启动