애플리케이션의 다중 소스
애플리케이션의 다중 소스 (Multiple Sources for an Application)
기본적으로 Argo CD 애플리케이션은 단일 소스와 클러스터 사이의 연결입니다. 그러나 여러 위치의 파일을 결합해 하나의 Application을 만들고 싶을 때가 있습니다. Argo CD는 단일 Application에 대해 여러 소스를 지정할 수 있으며, 모든 소스를 컴파일하고 결합된 리소스를 조정합니다.
출처: 문서
본문
애플리케이션의 다중 소스
기본적으로 Argo CD 애플리케이션은 단일 소스와 클러스터 사이의 연결입니다. 그러나 때로는 여러 위치의 파일을 결합해 하나의 Application을 만들고 싶을 수 있습니다.
Argo CD는 단일 Application에 대해 여러 소스를 지정할 수 있습니다. Argo CD는 모든 소스를 컴파일하고 결합된 리소스를 조정합니다.
sources 필드를 사용해 여러 소스를 제공할 수 있습니다. sources 필드를 지정하면 Argo CD는 source(단수) 필드를 무시합니다.
여러 소스를 지정하는 아래 예시를 참조하세요:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-billing-app
namespace: argocd
spec:
project: default
destination:
server: https://kubernetes.default.svc
namespace: default
sources:
- repoURL: https://github.com/mycompany/billing-app.git
path: manifests
targetRevision: 8.5.1
- repoURL: https://github.com/mycompany/common-settings.git
path: configmaps-billing
targetRevision: HEAD
위 예시는 "billing" 애플리케이션을 만들기 위해 결합해야 하는 두 소스를 지정합니다. Argo CD는 각 소스에 대한 매니페스트를 별도로 생성하고 결과 매니페스트를 결합합니다.
경고: 다중 소스를 남용하지 마세요 — 이 기능은 서로 다른/관련 없는 애플리케이션을 그룹화하는 일반적인 방법으로 의도된 것이 아닙니다. 여러 애플리케이션에 대한 단일 엔티티를 원한다면 applicationsets와 app-of-apps 패턴을 살펴보세요. sources 배열에 2-3개 이상의 항목을 사용하고 있다면 거의 확실히 이 기능을 남용하는 것이며 애플리케이션 그룹화 전략을 다시 생각해야 합니다.
여러 소스가 같은 리소스(같은 group, kind, name, namespace)를 생성하면, 리소스를 생성하는 마지막 소스가 우선합니다. 이 경우 Argo CD는 RepeatedResourceWarning을 생성하지만 리소스를 동기화합니다. 이는 Git 저장소의 리소스로 차트의 리소스를 재정의하는 편리한 방법을 제공합니다.
외부 Git 저장소의 Helm value 파일
다중 소스를 사용하는 가장 흔한 시나리오 중 하나는 다음과 같습니다:
- 조직에서 외부/공개 Helm 차트를 사용하려는 경우
- Helm 값을 자신의 로컬 값으로 재정의하려는 경우
- Helm 차트를 로컬로도 복제하고 싶지 않은 경우(중복이 발생하고 업스트림 변경을 수동으로 모니터링해야 하므로)
이 시나리오에서는 다중 소스 기능을 사용해 외부 차트와 자신의 로컬 값을 결합할 수 있습니다.
Helm 소스는 git 소스의 value 파일을 참조할 수 있습니다. 이를 통해 커스텀하고 git에 호스팅된 값과 함께 타사 Helm 차트를 사용할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
sources:
- repoURL: 'https://prometheus-community.github.io/helm-charts'
chart: prometheus
targetRevision: 15.7.1
helm:
valueFiles:
- $values/charts/prometheus/values.yaml
- repoURL: 'https://git.example.com/org/value-files.git'
targetRevision: dev
ref: values
위 예시에서 prometheus 차트는 git.example.com/org/value-files.git의 value 파일을 사용합니다. Argo가 value 파일을 포함하는 외부 Git 저장소를 참조하려면 저장소에 ref 파라미터를 설정해야 합니다. 위 예시에서 ref: values 파라미터는 $values 변수에 매핑되며, 이는 value-files 저장소의 루트로 해석됩니다. $values 변수는 value 파일 경로의 시작 부분에서만 사용할 수 있고 그 경로는 항상 참조된 소스의 루트에 상대적이라는 점을 유의하세요.
$values 소스에 path 필드가 설정되어 있으면 Argo CD는 해당 URL의 git 저장소에서 리소스를 생성하려 시도합니다. path 필드가 설정되지 않으면 Argo CD는 저장소를 value 파일의 소스로만 사용합니다.
참고: ref 필드가 설정된 소스는 chart 필드를 포함할 수 없습니다. 현재 Argo CD는 value 파일의 소스로 다른 Helm 차트를 사용하는 것을 지원하지 않습니다.
참고: ref 필드가 path 필드와 함께 구성된 경우에도
$value는 여전히 ref 필드가 있는 소스의 루트를 나타냅니다. 결과적으로 valueFiles는 소스의 루트에서 상대 경로로 지정되어야 합니다.