关于PreStop钩子的Kubernetes文档声明如下:
PreStop钩子不是从信号到停止异步执行的容器;钩子必须在TERM之前完成其执行可以发送信号
但是,它没有说明pod中的其他容器。假设terminationGracePeriodSeconds
尚未通过。
在每个容器的PreStop
钩子完成之前,吊舱中的所有容器是否都受到保护而不被终止?或者每个PreStop钩子只保护它自己的容器?
我相信preStop
钩子只保护它所声明的容器。
例如,在以下设置中:
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","sleep 15"]
- name: other-container
image: mysql
env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
如果我终止pod, mysql接收SIGTERM并立即关闭,而nginx容器由于其preStop
钩子而保持额外的15秒存活