首页 > 解决方案 > 什么是每次部署运行一次的 initContainer/job 的正确替代品?

问题描述

每次将配置应用到 Kubernetes 时,我都需要运行一次作业。我尝试使用作业,但它不允许更新图像版本并且需要删除以前的作业。我尝试使用 initContainer ,但它似乎有点矫枉过正,因为我不需要每次启动 pod 时都运行它。本质上,我使用单个 pod 进行了简单的部署,并且每次我在部署中更新映像时都需要在部署发生之前运行一项作业,并且混淆了实现它的最佳方法是什么。工作似乎很适合这个,但问题是我不能第二次提交相同的配置并更新工作的图像标签。

标签: kubernetes

解决方案


恐怕没有其他选择。我最近遇到了类似的情况,这就是我正在做的工作娱乐:

kubectl get <job name> -o json | \
jq -r '.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"' | \
kubectl replace --save-config --force -f -

它使用"kubectl.kubernetes.io/last-applied-configuration"注释,该注释包含应用的初始作业配置,没有自动生成/集群字段。然后kubectl replace将完全用自己的副本替换当前的,模拟您正在寻找的“重新运行”。

然后,您可以在kubectl replace.


推荐阅读