4

我们有一个 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 同步。

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

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

4

2 回答 2

1

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

于 2020-09-24T15:09:54.680 回答
0

从 ArgoCD 1.8 版开始,负责实现这一点的部分已被删除。更多细节可以在这里找到。

需要更新 argocd-cm 以启用应用程序运行状况检查,使用resource.customizations部分,如下例所示。更多细节可以在这里这里找到。

---
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
于 2021-08-25T10:24:36.857 回答