Переопределения шаблонов, специфичных для кластера, в наборах приложений ArgoCD с использованием генераторов кластеров


Введение

Создание ApplicationSets является отличным инструментом для сушки шаблонов приложений в ArgoCD. Вы можете генерировать похожие приложения, где единственным различием будет пространство имен для staging и production, или маркировка для таких путей, как canary и stable. Рассмотрим этот вариант использования:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: example-application
  namespace: argocd
spec:
  syncPolicy:
    preserveResourcesOnDeletion: true
  generators:
    - clusters:
        selector:
          matchLabels: #...
        values:
          env: staging
          track: stable
    - clusters:
        selector:
          matchLabels: #...
        values:
          env: production
          track: stable
    - clusters:
        selector:
          matchLabels: #...
        values:
          env: production
          track: canary
template:
  #...
Войти в полноэкранный режим Выход из полноэкранного режима

Эти значения легко установить, так как они являются простыми строками. Вы можете использовать простую интерполяцию для их использования. В нашем случае мы используем несколько различных файлов значений, основанных на этих значениях в спецификациях шаблона.

valueFiles:
  - values.yaml
  - 'values.{{values.env}}.yaml'
  - 'values.{{values.track}}.yaml'
  - 'secrets.{{values.env}}.yaml'
Войти в полноэкранный режим Выход из полноэкранного режима

Проблема

Все это хорошо и замечательно, пока вам не понадобится что-то более сложное. Представьте себе случай, когда вы хотите настроить автоматическую синхронизацию только одного из этих кластеров. В нашем случае, когда бы мы ни меняли версию в таблице helm, мы бы хотели, чтобы staging сразу же синхронизировался. Мы можем установить syncPolicy, но его интерфейс является объектом, и вы не можете интерполировать его специфическим для кластера образом. Чтобы включить это, нам нужно использовать следующее:

syncPolicy:
  automated: {}
Войти в полноэкранный режим Выйти из полноэкранного режима

Где установить эти переопределения, если вы хотите, чтобы они объединялись только для staging, например?

Решение

Вы можете установить переопределения шаблона в объекте cluster. Он будет объединен с шаблоном, определенным в этой диаграмме.

- clusters:
    selector:
      matchLabels: #...
    values:
      env: staging
      track: stable
    template:
      spec:
        syncPolicy:
          automated: {}
Войти в полноэкранный режим Выход из полноэкранного режима

Но нельзя просто установить переопределение шаблона, по какой-то причине есть обязательные ключи, которые должны быть установлены, даже если это просто заполнители. Это означает, что есть минимальная форма, которую нужно установить, чтобы задать что-либо для данного кластера. Это выглядит следующим образом:

  template:
+   metadata: {}
    spec:
+     project: app
+     destination: {}
+     source:
+       repoURL: http://github.com/example/helm-charts
      syncPolicy:
        automated: {}
Войти в полноэкранный режим Выход из полноэкранного режима

Таким образом, чтобы кластер в режиме постановки выглядел правильно, он должен выглядеть следующим образом:

- clusters:
    selector:
      matchLabels: #...
    values:
      env: staging
      track: stable
    template:
      metadata: {}
      spec:
        project: web
        destination: {}
        source:
          repoURL: http://github.com/example/helm-charts
        syncPolicy:
          automated: {}
Войти в полноэкранный режим Выход из полноэкранного режима

Вот так, если вы используете генераторы кластеров и хотите переопределить политику синхронизации для конкретного кластера, теперь вы знаете, как это сделать.

Оцените статью
devanswers.ru
Добавить комментарий