messenger:consume
在 Kubernetes 上运行任务的最佳方式是什么?
部署?
如果我们使用具有一定数量副本的部署来做到这一点,这可能会起作用,但是如果我们对部署进行滚动更新,然后导致一个 pod 被替换,尽管它现在处理了一个长时间运行的消息呢?
为了防止这种情况,我们可能会设置一个高点terminationGracePeriodSeconds
并lifecycle.preStop
结合使用?
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: deploy
name: deploy
spec:
replicas: 1
selector:
matchLabels:
run: deploy
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: deploy
spec:
terminationGracePeriodSeconds: 6000
containers:
- command:
- sh
- -c
- sleep 1d # bin/console messenger:consume
image: bash
name: deploy
lifecycle:
preStop:
exec:
command:
- sh
- -c
- echo "Test if a message is consumed at the moment and prevent POD shutdown till then?"
但是在我的测试过程中,即使lifecycle.preStop
任务提前停止,由定义的完整时间terminationGracePeriodSeconds
仍然会等到 Pod 终止。
有人有好主意吗?