클러스터 생성기를 사용하는 ArgoCD ApplicationSets의 클러스터별 템플릿 재정의

소개



만들기ApplicationSets는 ArgoCD에서 응용 프로그램 템플릿을 건조시키는 훌륭한 도구입니다. 유일한 차이점이 stagingproduction 에 대한 네임스페이스이거나 canarystable 와 같은 트랙에 대한 레이블 지정인 유사한 애플리케이션을 생성할 수 있습니다. 따라서 다음 사용 사례를 고려하십시오.

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 차트에서 버전을 변경할 때마다 스테이징이 즉시 동기화되기를 원합니다. syncPolicy 를 설정할 수 있지만 해당 인터페이스는 개체이므로 클러스터 특정 방식으로 보간할 수 없습니다. 이를 활성화하려면 다음을 사용해야 합니다.

syncPolicy:
  automated: {}


예를 들어 스테이징을 위해서만 병합하려는 경우 이러한 재정의를 어디에서 설정합니까?

해결책


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: {}


이제 클러스터 생성기를 사용 중이고 동기화 정책의 클러스터별 재정의를 원하는 경우 이제 그 방법을 알 수 있습니다.

좋은 웹페이지 즐겨찾기