我必须在Kubernetes部署清单文件中将terminationGracePeriodSeconds
从30更改为120,但是当我使用helm部署时:
helm upgrade --install <chartname> --values <valuesfilename>
旧豆荚立即终止,新豆荚开始运行。
但是,预期的行为是保持旧的豆荚处于终止状态,并按照定义继续其当前进程120秒。
这里还可能缺少什么?
这能解决我的问题吗?
containers:
- name: containername
lifecycle:
preStop:
exec:
command: [ "/bin/sleep", "20" ]
我的一个问题是,添加睡眠命令是否会停止执行当前的荚进程,而只是在处于终止状态时睡觉呢?
发布于 2022-02-22 00:32:28
Kubernetes参数terminationGracePeriodSeconds
决定Kubernetes等待多久,直到它强行杀死您的容器。换句话说,当Kubernetes想要终止您的Pod时,它执行以下操作:
SIGTERM
发送到您的容器terminationGracePeriodSeconds
用于执行以下操作序列:PreStop
钩子SIGKILL
发送到您的容器(以及您的PreStop
容器),从而强制终止它们。注意,您的容器和PreStop
容器不是同时执行的,而是一个接一个地同步执行的。
在Kubernetes Hook Handler执行阅读更多内容。
发布于 2022-02-22 14:10:29
基本上,它是terminationGracePeriodSeconds
的预期行为,因为它是可选的持续时间(以秒为单位),pod需要优雅地终止。
在结束符终止时-生命周期被描述为这里 - pod接收terminating
状态,并从所有服务的端点列表中删除,并停止获得新的通信量。SIGTERM
信号立即发送到在pod中运行的进程,而Kubernetes在terminationGracePeriodSeconds
选项中指定的宽限期内等待吊舱正常自动停止。一旦terminationGracePeriodSeconds
到期,SIGKILL
信号就会强行杀死Pod。在您的例子中,豆荚中的进程通常在120秒宽限期过去之前就被关闭了。
在其回合中,preStop
钩子将在pod终止之前立即被调用,这意味着在kubectl
将SIGTERM
发送到pod之前将执行该钩子。正如文档中所述,在发送停止容器的TERM
信号之前,钩子必须完成TERM
。terminationGracePeriodSeconds
正在与preStop钩子和SIGTERM
信号并行发生,并在执行preStop
钩子之前开始倒计时。吊舱最终将在吊舱的终止宽限期内终止,而不管吊钩是否完成。
因此,在接收到用于preStop
钩子的preStop
命令时,pod已经标记为Terminating
,但尚未终止其中的进程--因此容器可以在此期间完成所有活动请求。
https://stackoverflow.com/questions/71216061
复制