【问题标题】:ArgoCD sync waves between apps应用程序之间的 ArgoCD 同步波
【发布时间】:2020-12-27 14:24:17
【问题描述】:

我们有一个 ArgoCD 项目。在这个项目中,我们有多个应用程序(我们称它们为 A、B 和 C),它们通过 Kafka 集群相互传递消息。为此,需要创建主题。

应用 A 负责管理 Kafka 集群(除其他外)。我们在应用 A 中有一个 PreSync 挂钩,用于在更新应用 B 和 C 所依赖的其他资源之前创建和配置主题。

这意味着我们需要应用 A 在其他应用之前同步,以确保顺利推出。为了尝试管理这一点,我们将应用 A 添加到 SyncWave -1,其他默认为 0

kind: Application
metadata:
  name: "A"
  annotations:
    argocd.argoproj.io/sync-wave: "-1"

我们最初的假设(也许是愚蠢的)是同步协调应用于项目内,但是,它似乎只应用于应用程序内

所以发生的情况是应用 A 中的资源等待 PreSync 挂钩按预期配置主题,但应用 B 和 C 不等待应用 A 同步。

有没有办法控制项目内应用程序之间同步的顺序/依赖关系?

我看到有人提到“app-of-apps”模式,在这种模式下,您有一个应用程序可以部署所有其他应用程序。这样做是否允许我们利用 SyncWave 来确保应用程序 A 在尝试同步应用程序 B 和 C 之前完全解析?如果没有,还有其他方法吗?

【问题讨论】:

    标签: kubernetes microservices argocd gitops


    【解决方案1】:

    从 ArgoCD 1.8 版开始,负责实现这一点的部分已被删除。更多详情可以查看here

    需要更新 argocd-cm 以使用 resource.customizations 部分启用应用程序运行状况检查,如下例所示。更多详情请见herehere

    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: argocd-cm
      namespace: argocd
      labels:
        app.kubernetes.io/name: argocd-cm
        app.kubernetes.io/part-of: argocd
    data:
      resource.customizations: |
        argoproj.io/Application:
          health.lua: |
            hs = {}
            hs.status = "Progressing"
            hs.message = ""
            if obj.status ~= nil then
              if obj.status.health ~= nil then
                hs.status = obj.status.health.status
                if obj.status.health.message ~= nil then
                  hs.message = obj.status.health.message
                end
              end
            end
            return hs
    

    【讨论】:

      【解决方案2】:

      我们有一个应用程序应用程序(引导应用程序),这就是我们在应用程序之间编排同步波的方式。我没有运气,但是也将同步波添加到每个应用程序的清单中。从文档看来,清单是按种类应用的(例如,首先是命名空间),然后按名称的字母顺序(不区分大小写)。

      【讨论】:

        猜你喜欢
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2016-06-12
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多