问题描述
我们有一个ArgoCD项目。在这个项目中,我们有多个应用程序(分别称为A,B和C),它们通过Kafka集群相互传递消息。为此,需要创建主题。
App 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之前能够完全解析?如果没有,还有其他方法吗?
解决方法
我们有一个应用程序(引导应用程序),这就是我们协调应用程序之间的同步波的方式。我没有运气,但是还向每个应用程序的清单中添加了同步波。从文档看来,清单是按Kind(例如,首先是名称空间)应用的,然后按名称的字母顺序(不区分大小写)应用。