이전 시간에는 ArgoCD에서 Git Repository에 있는 매니페스트 파일을 사용하여 쿠버네티스로 배포하는 방법에 대해서 알아보았다. 이번 시간에는 ArgoCD에서 매니페스트 파일이 아닌 Helm chart를 배포하는 방법에 대하여 알아보자.
Prerequisites
Helm chart, Helm repository에 대해 잘 모른다면 아래 포스팅을 참고하자.
2023.09.17 - [DevOps/Kubernetes] - Helm Chart 소개
2023.10.09 - [DevOps/Kubernetes] - Helm Chart Repository 만들기 (1) - Github
Helm repository 등록
먼저 ArgoCD에서 helm chart를 배포하기 위해서는 Helm repository를 등록해야 한다. ArgoCD 웹앱에 접속한 후 Settings > CONNECT REPO를 클릭하자.
그 다음 차트 레포지토리 정보를 입력한다. method를 HTTPS로 하고 Type을 helm으로 변경한 후 Repository URL에는 helm chart repository 주소를 입력하면 된다. 만약 사설 레포지토리인 경우 username, password를 입력해야 한다.
Application 생성
레포지토리를 등록했다면 Application을 만들면 된다. Applications > NEW APP을 클릭하여 Application을 만들어보자.
적절한 이름을 입력하고..
Source의 Repository URL을 Helm chart repository url으로 등록하면 타입이 HELM으로 변경되며 아래에 Chart와 Version을 선택할 수 있는 박스가 뜬다. 배포하려는 차트와 버전을 알맞게 입력하자.
그 다음에 values 입력란에 values.yaml 파일 내용을 입력하고 CREATE를 누르면 끝!
그러면 다음 그림과 같이 Helm 타입의 ArgoCD Application이 완성된다.
단점: 갖다 버려진 GitOps
그런데 막상 이런 방식으로 Helm chart를 배포하려니 망설여진다. 왜냐하면 Values.yaml 파일을 Git repo로 부터 가져오는 것이 아닌 ArgoCD Application Spec 하위에 저장하기 때문이다. ArgoCD Application도 쿠버네티스 커스텀 리소스 (CR)이기 때문에 kubectl으로 매니페스트를 조회할 수 있다.
GitOps의 대표 도구로 ArgoCD를 사용하는데, 이렇게 배포해버리면 GitOps가 되지 않는다. Git repo에 있는 values.yaml파일을 받아올 수 없는 대표적인 이유는 Application의 Source가 Helm으로 되어있기 때문이다. 이런 방식은 아무도 사용 하지 않을 것 같다.
Helm을 GitOps 방식으로 배포할 수는 없을까?
다행히도 ArgoCD 2.6버전 이후부터는 GitOps 방식으로 Helm 배포가 가능해졌다. 2.6 버전 이후부터는 Multiple Sources가 가능해졌기 때문인데, 즉 Helm과 Git repo가 동시에 가능하다. 그러니 2.5 버전 이하로 사용 중이라면 얼른 2.6 버전 이상으로 업그레이드 하자.
대신 Multiple Sources로 구성하려면 ArgoCD에서 기본적으로 제공하는 Application 생성 UI는 사용할 수 없다. UI상에서는 Multiple Source 구성을 할 수 없기 때문이다. vscode 등의 편집기로 직접 매니페스트 파일을 만들어 적용시키자.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: todo-api
namespace: argocd
spec:
sources:
- repoURL: 'https://beer-one.github.io/charts'
targetRevision: 0.1.0
chart: spring-app
helm:
valueFiles:
- $values/todo-list/todo-api.yaml
- repoURL: 'https://github.com/beer-one/k8s-manifests.git'
targetRevision: main
ref: values
destination:
name: ''
namespace: todo
server: 'https://kubernetes.default.svc'
project: default
syncPolicy:
automated:
prune: true
selfHeal: false
syncOptions:
- CreateNamespace=true
- 기존에는
spec.source
에 Helm 또는 Git 타입의 source 정보가 저장되어있는데 Multiple source의 경우spec.sources
에 배열 형식으로 여러 sources를 구성할 수 있다. - 두 번째 source에는 git repo에 대한 정보를 선언하였고 helm chart values.yaml 파일이 저장되어있는 레포로 구성하면 된다. 여기서 중요한 것은
ref
필드인데, 다른 source에서 git repo에 접근하기 위한 ref 변수이름을 지정할 수 있다. - 첫 번째 source에는 helm chart repo에 대한 정보이며 여기서
helm.valueFiles
에 Git에 저장되어있는 values.yaml 파일에 접근한다. git source에서 선언한ref
필드 이름으로 경로 접근을 하여 git repo에 있는 values.yaml에 접근할 수 있다. (실제 values.yaml 경로는 k8s-manifests 레포의 todo-list/todo-api.yaml이다.)
kubectl apply -f
명령어로 적용시키면 ArgoCD 웹앱에서 성공적으로 Helm 형태의 애플리케이션이 생성된다.
- Helm repo를 첫 번째 source로 등록해야 Helm 딱지가 붙는다. 만약 첫 번째 source가 Git repo이면 Git 딱지가 붙는다.
- 물론 내부적으로는 똑같이 helm 배포가 진행된다. 그러니 보기 좋게 하려면 helm을 위로 올리는게 낫다.
만약 Git에 저장되어있는 values.yaml 파일을 변경하면 ArgoCD application이 자동으로 동기화를 시켜줄 것이다.
'DevOps > CI.CD' 카테고리의 다른 글
Jenkins 소개 및 Kubernetes에 설치 (0) | 2023.11.07 |
---|---|
CI / CD란 무엇일까? (0) | 2023.11.04 |
ArgoCD 아키텍처 이해하기 및 여러가지 옵션 (3) | 2023.10.14 |
ArgoCD 소개와 설치 (0) | 2023.09.03 |
GitOps란 무엇인가? (0) | 2023.09.03 |
댓글