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 |