ArgoCD синхронизирует волны между приложениями

У нас есть проект ArgoCD. В этом проекте у нас есть несколько приложений (назовем их A, B и C), которые передают сообщения друг другу через кластер Kafka. Для этого нужно создать темы.

Приложение A отвечает за управление кластером Kafka (помимо прочего). У нас есть перехватчик PreSync в приложении A для создания и настройки тем перед обновлением других ресурсов, от которых зависят приложения 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? Если нет, есть ли другой способ?

2 ответа

Начиная с версии 1.8 ArgoCD, часть, делающая это возможным, была удалена. Более подробную информацию можно найти здесь .

Необходимо обновить 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

У нас есть app-of-apps (приложение для начальной загрузки), и именно так мы организуем волны синхронизации между приложениями. Однако мне не повезло, ТАКЖЕ добавление волн синхронизации в манифесты В каждом приложении. Судя по документации, манифесты применяются по типу (например, сначала пространства имен), а затем в алфавитном порядке по имени (без учета регистра).

Другие вопросы по тегам