我们在 Jobs/Cron Jobs 中面临有关 sidecar 的问题。我们使用 EFK 堆栈进行日志记录,并使用 filebeat 作为 sidecar 容器来传输日志 应用程序到 ElasticSearch。但是,在批处理作业中实现此操作时,一旦主容器(主作业脚本)终止,边车容器就不会被终止。所以工作永远不会 转至已完成/已终止状态。有关如何处理此问题的任何指示。 - 一旦主容器终止,就杀死边车容器。
来自 https://carlosbecker.com/posts/k8s-sidecar-shutdown/
我仍然需要对此进行测试,但基本上容器之间有一个共享卷。主容器本质上是一个带有陷阱的finally 块,当文件退出时会触及文件。
然后 sidecar 容器会轮询该文件是否存在,并在存在时存在。
containers:
- name: agent
command: ["/bin/sh", "-c"]
args:
- |
trap 'touch /usr/share/pod/done' EXIT
buildkite-agent-entrypoint start \
--disconnect-after-job \
--disconnect-after-idle-timeout=50
# ...
volumeMounts:
- mountPath: /usr/share/pod
name: tmp-pod
- name: dind
command: ["/bin/sh", "-c"]
args:
- |
dockerd-entrypoint.sh &
while ! test -f /usr/share/pod/done; do
echo 'Waiting for the agent pod to finish...'
sleep 5
done
echo "Agent pod finished, exiting"
exit 0
# ...
volumeMounts:
- mountPath: /usr/share/pod
name: tmp-pod
readOnly: true
# ...
volumes:
- emptyDir: {}
name: tmp-pod
# ...
很恶心吧?希望1.28的一流sidecar容器能够为这种情况提供更好的支持