argocd에 helm gitops로 배포하기

argocd

 

 

argocd는 gitops 방식을 활용한 쿠버네티스 배포 도구입니다.

 

helm차트 같은 경우 차트 저장소와 value파일 저장소를 각각 지정하여 병합하여 배포할 수 있도록 지원해주고 있지만 

만약 배포된 helm차트를 업그레이드 한다고 하면 

app을 UI에서 직접 차트 버전을 수정하거나 app도 파일로 관리한다면 그에 맞춰 변경해야 하고

또 변경된 차트 버전에 맞게 values.yaml 파일도 같이 바꿔줘야 해서 번거로워 보인다.

 

그래서 부모-자식 차트 구조를 만들어 배포하는 걸 추천한다.

 

적용하기

▪️  step 1) 빈 폴더에 Chart.yaml 파일 하나를 생성한다.


apiVersion: v2
name: < 배포하고자 하는 차트의 이름 > 
description: 설명 작성
type: application
version: < 배포하고자 하는 차트의 버전 >
appVersion: < 배포하고자 하는 차트의 버전 >

 

이름, 버전, 앱버전 모두 실제로 배포하고자 하는 차트 이름으로 동일하게 가져가는 것이 관리하기 편해 보여 그렇게 지정했지만 

다르게 설정한다고 해서 문제 되지는 않는다.

 

 

▪️ step 2)  배포하고자 하는 차트의 이름을 dependencies에 추가한다.


apiVersion: v2
name: < 배포하고자 하는 차트의 이름 > 
description: 설명 작성
type: application
version: < 배포하고자 하는 차트의 버전 >
appVersion: < 배포하고자 하는 차트의 버전 >
dependencies: # <-- 여기 추가
- name: chart-name
  version: "chartversion.1.1.1"
  repository: "https://example.com/charts"
  #repository: "oci://example.com/charts"

 

dependencies에 실제로 배포하고자 하는 차트의 정보를 적어주면 된다

이때 버전은 앱 버전이 아닌 차트 버전이다  

 

차트 버전 확인하기

 

 

▪️ step 3) 배포하고자 하는 차트의 default values.yaml 파일을 가져온다.


chart-name:
  # helm-docs renders these comments into markdown. Use markdown formatting where
  # appropiate.
  #
  # -- The number of Crossplane pod `replicas` to deploy.
  replicas: 1

  # -- The deployment strategy for the Crossplane and RBAC Manager pods.
  deploymentStrategy: RollingUpdate

  image:
    # -- Repository for the Crossplane pod image.
    repository: xpkg.upbound.io/crossplane/crossplane
    # -- The Crossplane image tag. Defaults to the value of `appVersion` in `Chart.yaml`.
    tag: ""
    # -- The image pull policy used for Crossplane and RBAC Manager pods.
    pullPolicy: IfNotPresent

  # -- Add `nodeSelectors` to the Crossplane pod deployment.
  nodeSelector: {}
  # -- Add `tolerations` to the Crossplane pod deployment.
  tolerations: []
  # -- Add `affinities` to the Crossplane pod deployment.
  affinity: {}

 

values 값들을 한 칸 들여 쓰기 한 뒤 맨 상위에 dependencies에 적어준 이름을 맞춰서 적어주면 된다.

 

 

values 값은 아래처럼 차트 저장소에서 복사해 올 수 있다.

 

예시 1. 기본 values 값 가져오기

 

 

예시2. 기본 values 값 복사하기

 

 


이대로 만들어서 소스 저장소에 push 한 뒤 해당 경로를 바라보도록

app을 생성하면 helm차트도 gitops 방식으로 배포가 가능하다.

 

 

 

사실 이렇게 하지 않아도 gitops 방식으로 배포는 가능하지만

이렇게 구성하게 된건이유가 있는데 

만약 다음 버전으로 업그레이드를 한다고 하면 어디서부터 어디까지 바뀐건지 보기어렵고 

나는 검증하면서 봤다고 하더라 해도 실제로 라이브 환경에 변경을 가하기 전에 검토를 받으면서 다른 사람들도 리뷰를 편하게 하기 위해 helm차트 내부의 기타 다른 template 들은 잘 보지 않게 되니 

그런 파일들 없이 리뷰할 수 있도록 구조를 가져가다보니 나오게  된 방식이다.