_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[ArgoCD] multiple sources 적용하기
인프라

[ArgoCD] multiple sources 적용하기

2025. 2. 12. 22:23
반응형

ArgoCD에서 UI, CLI로 multiple sources를 적용하는 방법에 대하여 이야기해보려고 합니다.

ArgoCD 구축 및 간단한 설명은 아래 링크 참고 부탁드립니다.

 

 

[infra] k8s에 argocd 구축하기

데이터 플랫폼 업무를 진행하면서, infra에는 kubernetes를 사용하고 있습니다.현재 운영중인 환경에는 argocd가 구축되어 있지 않아, 도입하면 좋겠다는 생각이 들어 argocd에 대해서 이야기해보려고

my-develop-note.tistory.com


ArgoCD UI상에서 App을 생성하려고 할때의 모습입니다.

아래의 내용을 채우면 단일 source를 이용하여 App을 배포할 수 있습니다.

하지만 빨간색 박스의 'EDIT AS YAML'을 이용하여 Yaml 파일을 직접 작성하면 multiple sources를 적용할 수 있습니다.

 

아래의 ArgoCD 공식문서를 확인해보면, multiple sources를 적용하는 예제 코드를 보여줍니다.

https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/

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

sources에 각 연결정보를 입력하면 되고, source는 무시된다고 나와있습니다.

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

위의 예제는 git뿐만 아니라 helm chart를 지원하여 multiple sources를 구현한 예제 내용입니다.


 

 

위 두 내용을 참고하여 배포한 ArgoCD 예제입니다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: trino
spec:
  project: default
  source:
    repoURL: GIT주소
    path: path/trino
    targetRevision: #branch/argocd
    helm:
      valueFiles:
        - values-override.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: trino
  sources:
    - repoURL: #GIT주소
      path: #path/auth
      targetRevision: #branch/argocd 
    - repoURL: #GIT주소
      path: #path/trino
      targetRevision: #branch/argocd
      helm:
        valueFiles:
          - values-override.yaml
    - repoURL: GIT주소
      path: #path/mysql
      targetRevision: #branch/argocd
      helm:
        valueFiles:
          - values-override.yaml
        parameters:
        - name: nameOverride
          value: mysql-history
        - name: auth.database
          value: 'trino'
        - name: primary.service.nodePorts.mysql
          value: '30121'
    - repoURL: GIT주소
      path: #path/hive-metastore
      targetRevision: #branch/argocd
    - repoURL: GIT주소
      path: #path/mysql
      targetRevision: #branch/argocd
      helm:
        valueFiles:
          - values-override.yaml
        parameters:
        - name: nameOverride
          value: hive-metastore-db
        - name: auth.database
          value: 'metastore_db'
        - name: primary.service.nodePorts.mysql
          value: '30122'

위 yaml파일을 적용하면, 알게된 점은 아래와 같습니다.

 

1. source를 공백으로 두면 배포가 되지않는다.

source부분은 sources가 작성이 되면서 무시되지만, 공백으로 비워둔다면 App Create되지 않습니다.

 

2. values-override.yaml로 이미 values.yaml를 override 했지만 parameter를 작성하여 한번 더 override가 가능하다.

기본적으로 사용할 values-override를 만들고, App에 따라서 parameter를 다르게 쉽게 App을 배포할 수 있습니다.

위에서는 trino-query-history로 사용할 mysql과 hive metastore metadb로 사용할 mysql은 각각 역할이 다르지만 같은 values-override를 사용하며 parameter로 override를 한번 더 진행하여 적용하고 있습니다.

 

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: prometheus
spec:
  destination:
    name: ''
    namespace: prometheus
    server: https://kubernetes.default.svc
  source:
    path: ''
    repoURL: https://prometheus-community.github.io/helm-charts
    targetRevision: 27.3.0
    chart: prometheus
  sources:
    - repoURL: https://prometheus-community.github.io/helm-charts
      chart: prometheus
      targetRevision: 27.3.0
      helm:
        valueFiles:
          - $values/2_argocd/prometheus/values-override.yaml
    - repoURL: GIT주소
      targetRevision: branch/argocd
      ref: values
  project: default
  syncPolicy:
    syncOptions:
      - CreateNamespace=true

위의 예제는 prometheus를 배포하는 ArgoCD yaml 파일입니다.

1. helm chart를 prometheus를 지원하는 공식 helm을 원격으로 가져옵니다.

2. 관리하고 있는 git에 올라가있는 values-override.yaml를 사용하여 배포합니다.

 

즉 공식 Helm + custom values-override.yaml의 조합을 배포할 때의 예시입니다.

 

git의 values-override.yaml을 찾기위하여

targetRevision으로 branch를 선택하고 path를 따로 주지 않습니다.

helm chart를 valueFiles를 선택하는 곳에서 ref로 설정한 values와 하위 디렉토리의 path를 적용해야 합니다.


yaml파일은 kubernetes의 CRD로

kubectl 명령어로 제어가 가능합니다.

 

따라서 argocd가 k8s에서 배포가 될때 함께 command를 주어

argocd배포와 동시에 다른 App도 배포되며 관리할 수 있을 것 같습니다.

 

감사합니다.

 

 

반응형

'인프라' 카테고리의 다른 글

[Docker] 폐쇄망 환경에서 Docker 설치  (2) 2024.11.26
[infra] k8s에 argocd 구축하기  (0) 2024.06.11
    '인프라' 카테고리의 다른 글
    • [Docker] 폐쇄망 환경에서 Docker 설치
    • [infra] k8s에 argocd 구축하기
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바