简介
此文讲述如何给容器的声明周期时间添加处理器,Kubernetes支持postStart
和preStop
事件。Kubernetes在容器启动之后立即发送postStart
事件,在容器终止之前立即发送preStop
事件。
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
定义 postStart 和 preStop 处理器
创建一个包含一个容器的Pod,容器中有postStart
和preStop
事件。文件名:lifecycle-events.yaml
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]
在配置文件中,postStart
命令写入一条message
文件到容器的/usr/share/message
目录。preStop
命令平滑停止nginx
。如果容器由于故障而终止,这将很有帮助。
# kubectl apply -f /root/k8s-example/pods/lifecycle-events.yaml
确认Pod中的容器正在运行
# kubectl get pod lifecycle-demo
NAME READY STATUS RESTARTS AGE
lifecycle-demo 1/1 Running 0 26h
进入容器的shell
# kubectl exec -it lifecycle-demo -- /bin/bash
在shell中确认postStart
处理器创建的message
文件存在
[email protected]:/# cat /usr/share/message
Hello from the postStart handler
创建容器后,Kubernetes立即发送postStart
事件。 但是,不能保证在调用Container的entrypoint
之前先调用postStart
处理程序。 postStart
处理程序相对于Container的代码异步运行,但是Kubernetes对容器的管理会阻塞,直到postStart
处理程序完成。 在postStart
处理程序完成之前,容器的状态不会设置为RUNNING
。
原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12227852.html
时间: 2024-11-07 03:14:10