【发布时间】:2020-06-04 04:50:29
【问题描述】:
我有安装到共享持久卷的脚本。主要部署图表的一部分是在initContainers 中运行一些 bash 脚本,这将克隆脚本存储库并将其复制/挂载到共享持久卷。我的问题是有时主应用程序没有更改或 values.yaml 文件没有更新,因此实际上不会发生 helm 升级。我认为这很好,但我想要做的是有一个任务仍然会克隆脚本存储库并将其复制/挂载到持久卷。
我正在阅读有关 k8s 作业(安装后挂钩)的信息,但我不确定这是否能满足我的需要。
【问题讨论】:
-
如果我理解正确,您需要在每次运行
helm upgrade时执行initContainer脚本,即使没有在应用程序或values.yaml文件中进行更新。这是正确的吗?initContainers只会在创建 pod 时运行一次,如果要再次运行它,则需要销毁容器并重新创建。您可以尝试在helm upgrade命令中使用--force flag 重新创建所有资源。如果您能更详细地解释您的用例,对于获得更多帮助将非常有用。 -
是的。
initContainers在部署资源中执行得很好。它还检测 configmap/secrets 中的更改。在initContainers中执行的脚本是一个git clone脚本存储库。指定了分支名称(例如 master)。如果对值/配置映射进行了更改,它会在helm upgrade期间正常部署。但是脚本 repo 的 master 分支发生了一些变化,如果你重新运行helm upgrade,helm 不会检测到任何变化,因此不会发生部署。它不知道 master 分支是否发生了变化,除非我指定一个不同的分支名称来克隆。 -
我确认如果没有更改,Job 将不会运行安装后挂钩。
helm history仍将注册部署,因为添加了具有新修订号的新条目。 -
所以我想因为无论部署是否发生都强制作业运行,我想知道是否有一个我可以的钩子(不是预安装或安装后)用于指示无论 helm 升级状态如何都运行此作业。
标签: kubernetes kubernetes-helm kubernetes-pod