Prestop 的语义也很简单,在停止之前调用
但是在什么停止之前呢?容器停止之前?Pod销毁之前?
Prestop的准确调用时间是,在Kubernetes发出 SIGTERM信号之前调用
需要注意的是,SIGTERM信号是发送给Pod的,preStop钩子是容器的
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
lifecycle:
preStop:
exec:
command:
- sh
- -c
- sleep 30
- name: u1
command:
- sleep
- infinity
image: ubuntu
lifecycle:
preStop:
exec:
command:
- sh
- -c
- date "+%Y-%m-%d %H:%M:%S" >> /datetmp.txt && sleep 5
- name: u2
command:
- sleep
- infinity
image: ubuntu
lifecycle:
preStop:
exec:
command:
- sh
- -c
- date "+%Y-%m-%d %H:%M:%S" >> /datetmp.txt && sleep 10
脚本中 Nginx 阻塞30秒,最后应该是被 kill的
两个ubuntu容器阻塞时间有 5秒 的差值,
观察到的结果是,他们都是在最后30秒一起结束的,而preStop脚本则异步同时启动