管理配置和源存储库之间的依赖关系

问题描述 投票:0回答:1

给您一些背景知识, 我们工作的架构根据 GitOps 方法将代码分离到一个存储库中,将 helm 图表(配置)分离到另一个存储库中。

现在,作为我们 CD 流程的一部分,gitlab ci 中有一个阶段,它使用新建的映像更新 helm 图表值,并应用自上次部署以来所做的所有更改。 这意味着我们对 Helm Chart 所做的任何更改对于 k8s 集群来说都是不可见的,直到我们从源存储库创建的管道进行部署为止。 当前场景的好处是我可以控制对部署环境所做的更改,因此我可以避免配置映射的“版本”与合适的映像版本不对齐的情况,从而防止由于崩溃循环情况缺少/意外的配置更改。

使用具有自动同步功能的 Argo CD 时出现的一个问题是,我无法同时计划代码更改和配置更新,因为如果我更改值,Argo 将修改配置映射,并相应地也会推出部署(我们在部署中有一个注释,其值是 configmap 的 sha,以便部署将通过旧版本的映像随着 configmap 的每次更改而推出。

**总而言之,在某些情况下源和配置是相互依赖的。 **

一种解决方案是从自动同步切换为手动同步。 通过这样做,我们将能够精确控制何时应用 configmap 更改,甚至在更新映像后 CI 过程完成时触发同步。 在这种安排下,configmap 的“版本”和镜像版本之间不会出现任何不一致的情况。

这个解决方案的问题在于,它显着降低了我们使用 Argo 的好处,并且几乎使其处于我们目前仅使用 Argo 的 UI 和其他一些不错的功能的状态。 在这种情况下,我们最好继续当前的工作道路。

如果有任何修复或总体改进的建议,我将不胜感激。 也许我们对 gitops 的所有方法论都没有一个清晰的视角。

顺便说一句,我们目前无法使用 Argo 版本。

谢谢!!

kubernetes argocd gitops
1个回答
0
投票

你有2个选择(据我所知):

  1. 如果您将 ArgoCD 应用程序本身作为代码进行管理,则可以将它们同步在一起。如何? 例如,如果您在 ArgoCD 应用程序中有这些源:
      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。 那么流程将是:

  • 推广新舵图
  • 更新值
  • 使用新值 SHA 和新 helm 版本更新 argo 应用程序
  1. 支持舵机向后兼容。 当您进行更改时,使用功能标志“隐藏它”,然后当您更新值时,启用该标志并更新应用程序,稍后,您可能需要清理
© www.soinside.com 2019 - 2024. All rights reserved.