Kubernetes 支持 postStart 和 preStop 事件。当一个主容器启动后,Kubernetes 将立即发送 postStart 事件;在主容器被终结之前,Kubernetes 将发送一个 preStop 事件。
主机配置规划
服务器名称(hostname) | 系统版本 | 配置 | 内网IP | 外网IP(模拟) |
---|---|---|---|---|
k8s-master | CentOS7.7 | 2C/4G/20G | 172.16.1.110 | 10.0.0.110 |
k8s-node01 | CentOS7.7 | 2C/4G/20G | 172.16.1.111 | 10.0.0.111 |
k8s-node02 | CentOS7.7 | 2C/4G/20G | 172.16.1.112 | 10.0.0.112 |
Pod容器生命周期
Pause容器说明
每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷)。
Pod中的各个容器可以访问在Pod级别定义的Volumes。
主容器生命周期事件的处理函数
Kubernetes 支持 postStart 和 preStop 事件。当一个主容器启动后,Kubernetes 将立即发送 postStart 事件;在主容器被终结之前,Kubernetes 将发送一个 preStop 事件。
postStart 和 preStop 处理函数示例
pod yaml文件
1 | [root@k8s-master lifecycle]# pwd |
启动pod,查看pod状态
1 | [root@k8s-master lifecycle]# kubectl apply -f lifecycle-events.yaml |
查看pod详情
1 | [root@k8s-master lifecycle]# kubectl describe pod lifecycle-demo-pod |
此时在k8s-node02查看输出信息如下:
1 | [root@k8s-node02 log]# pwd |
由上可知,init Container先执行,然后当一个主容器启动后,Kubernetes 将立即发送 postStart 事件。
停止该pod
1 | [root@k8s-master lifecycle]# kubectl delete pod lifecycle-demo-pod |
此时在k8s-node02查看输出信息如下:
1 | [root@k8s-node02 log]# pwd |
由上可知,当在容器被终结之前, Kubernetes 将发送一个 preStop 事件。
完毕!