我使用 Kubernetes 1.12。我有一个服务(例如 pod),它可能有多个实例(例如副本 > 1)
我的目标是执行维护任务(例如创建\升级数据库、生成证书等)before任何服务实例均已启动。
我正在考虑使用 Init Container,但至少据我了解,Init Container 将在创建其他副本(pod)时执行,更糟糕的是 - 这可能会并行发生。在这种情况下,多个 Init 容器可能会并行工作,从而损坏我的数据库和其他所有内容。
我需要一个明确的解决方案来执行引导维护任务只有一次每次部署。您建议如何这样做?
我遇到了同样的问题 https://stackoverflow.com/a/57269987/1763012在每次部署之前运行数据库迁移。这是基于作业资源的解决方案:
kubectl apply -f migration-job.yml
kubectl wait --for=condition=complete --timeout=60s job/migration
kubectl delete job/migration
kubectl apply -f deployment.yml
migration-job.yml
定义了一个Job https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/配置有restartPolicy: Never
和相当低的activeDeadlineSeconds
. Using kubectl wait
确保任何错误或超时migration-job.yml
导致脚本失败,从而阻止应用deployment.yml
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)