给您一些背景知识, 我们工作的架构根据 GitOps 方法将代码分离到一个存储库中,将 helm 图表(配置)分离到另一个存储库中。
现在,作为我们 CD 流程的一部分,gitlab ci 中有一个阶段,它使用新建的映像更新 helm 图表值,并应用自上次部署以来所做的所有更改。 这意味着我们对 Helm Chart 所做的任何更改对于 k8s 集群来说都是不可见的,直到我们从源存储库创建的管道进行部署为止。 当前场景的好处是我可以控制对部署环境所做的更改,因此我可以避免配置映射的“版本”与合适的映像版本不对齐的情况,从而防止由于崩溃循环情况缺少/意外的配置更改。
使用具有自动同步功能的 Argo CD 时出现的一个问题是,我无法同时计划代码更改和配置更新,因为如果我更改值,Argo 将修改配置映射,并相应地也会推出部署(我们在部署中有一个注释,其值是 configmap 的 sha,以便部署将通过旧版本的映像随着 configmap 的每次更改而推出。
**总而言之,在某些情况下源和配置是相互依赖的。 **
一种解决方案是从自动同步切换为手动同步。 通过这样做,我们将能够精确控制何时应用 configmap 更改,甚至在更新映像后 CI 过程完成时触发同步。 在这种安排下,configmap 的“版本”和镜像版本之间不会出现任何不一致的情况。
这个解决方案的问题在于,它显着降低了我们使用 Argo 的好处,并且几乎使其处于我们目前仅使用 Argo 的 UI 和其他一些不错的功能的状态。 在这种情况下,我们最好继续当前的工作道路。
如果有任何修复或总体改进的建议,我将不胜感激。 也许我们对 gitops 的所有方法论都没有一个清晰的视角。
顺便说一句,我们目前无法使用 Argo 版本。
谢谢!!
你有2个选择(据我所知):
sources:
- repoURL: helm repo URL
chart: some chart
targetRevision: 'chart version'
helm:
ignoreMissingValueFiles: true
valueFiles:
- '$values/default.yaml'
- repoURL: https://github.com/helm-values.git
targetRevision: master
ref: values
然后您可以使用 git repo 值的确切 SHA。 那么流程将是: