1、简介
容器生命周期回调是指在容器的生命周期中执行用户定义的操作。
- kubernetes支持以下生命周期回调
PostStart(容器启动后):在容器启动后立即执行的回调,它可以用于执行一些初始化任务
PreStop(容器停止前):在容器停止之前执行的回调。它可以用于执行清理或保存状态的操作
可以通过使用exec、httpGet或tcpSocket方法配置回调。有关这些方法的具体用法参考这个链接 https://www.cnblogs.com/suyj/p/18376865
2、PostStart
- PostStart回调在容器启动后立即执行,它有以下应用场景
执行预热操作:执行一系列预热操作,例如加载应用程序所需的数据或缓存数据,以提高应用程序的响应速度
准备文件:修改容器中已有文件或外部地址下载文件,以确保应用程序可以使用到正确的文件
通知其他组件:向其他组件发送通知(如调用api),以通知它们容器以启动
- PostStart回调配置示例如下:
[root@k8s-master k8s]# cat pod-poststart.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-poststart
name: pod-poststart
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo $(date) 'Container started' > /tmp/poststart.log"]
[root@k8s-master k8s]# kubectl apply -f pod-poststart.yaml
pod/pod-poststart unchanged
[root@k8s-master k8s]# kubectl exec -it pod-poststart -- cat /tmp/poststart.log
Thu Sep 5 09:50:07 UTC 2024 Container started
在上述配置中,lifecycle部分定义了一个PostStart回调,用于在容器启动后执行 echo $(date) 'Container started' > /tmp/poststart.log命令
例如:有一个Python Django开发的web应用,它要求在启动之前执行数据同步操作,以确保对ORM模型代码的变更应用到数据库中。这一需求可以通过配置postStart回调来实现,配置示例如下:
[root@k8s-master k8s]# cat django-app.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: django
name: django-app
spec:
containers:
- name: web
image: lizhenliang/django-app:v1
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- |
python mamage.py makeigrations &&
python manage.py migrate
通过这样的配置,pod启动时执行 python mamage.py makeigrations 和python manage.py migrate命令分别生成数据库迁移文件,执行数据同步操作
需要注意的是,这里的command字段使用横岗-写法,与中括号[]等价,当执行复杂命令时,这种写法更易读
3、preStop
- preStop回调在容器终止之前执行,它有以下应用场景
优雅关闭连接:关闭数据库连接,网络连接等,以确保数据的完整性和资源的正确释放
保存状态和数据:将应用程序生成的状态和数据写入数据库中或远程存储,以便在下次启动时恢复到之前的状态
通知其他组件:向其他组件发起通知,以通知它们容器即将终止
- preStop回调配置示例如下:
[root@k8s-master k8s]# cat pod-prestop.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-prestop
name: pod-prestop
spec:
containers:
- name: web
image: uhub.service.ucloud.cn/librarys/nginx:1.23
lifecycle:
preStop:
exec:
command: ["nginx", "-s", "quit"]
[root@k8s-master k8s]# kubectl apply -f pod-prestop.yaml
pod/pod-prestop created
[root@k8s-master k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-prestop 1/1 Running 0 1s
在上述配置中,lifecycle部分定义了一个preStop回调,用于在容器终止前执行 nginx -s quit命令。该命令向正在运行的nginx进程发送关闭信号,使该进程在处理完当前正在进行的请求后,优雅的停止服务,释放相关资源,并最终关闭与客户端的链接。这种做法确保了正在处理的请求得到正确处理,避免了异常终止或数据丢失,并提高了网站的稳定性和可靠性
标签:容器,D16,生命周期,kubernetes,回调,master,pod,k8s,poststart
From: https://www.cnblogs.com/suyj/p/18398888