최근 배포 도구 지분의 큰 축을 담당하고 있는 argoCD, 매니페스트 저장소를 활용한 gitOps 패턴 구현을 위한 배포 도구로 많은 사랑을 받고 있습니다. 그중 핵심적인 배포 패턴이 바로 헬름(helm) 차트를 argoCD로 배포하는 것이죠.
오픈소스 운영도구들도 헬름 차트를 사용해 많이 설치하는데요, karpenter,prometheus,ingress-nginx 등 정말 많습니다.
하지만 이 수십개의 운영도구들의 버전을 체계적으로 관리하는 것은 쉬운 일이 아닙니다. 매 번 수동으로 릴리즈 노트를 찾아 업데이트를 하거나, 아무 일도 없으면 아무 일이 아니다...라는 마음가짐으로 그냥 낮은 버전을 고정시켜 두는 경우도 있는데요. 이유를 굳이 설명하지 않아도, 당연하지만 좋은 행동은 아닙니다.
Renovate를 사용해서 argoCD의 애플리케이션을 자동으로 업데이트하는 PR을 올리도록 구성해 보겠습니다.
들어가기 전에...
Renovate는 자동화된 dependency 업데이트를 위한 도구입니다. 다양한 언어들과 플랫폼을 지원하죠. (dependabot과 비슷합니다.)
Renovate를 설정하려면 공식 문서를 참고해 진행해 주세요. 이후 과정은 Renovate 봇 설정이 완료되었다는 가정하에 진행됩니다.
매니페스트 구성
argoCD의 배포를 위한 매니페스트 저장소의 파일 구성은 다양하게 구현할 수 있습니다. 이 예제에서는 다음과 같이 파일의 구조가 있음을 가정하겠습니다.
argocd
└── eks-prod
├── argocd.yaml
├── atlantis.yaml
├── gha-runner-scale-set.yaml
├── karpenter.yaml
└── sonarqube.yaml
argoCD 배포를 위한 구성이니 애플리케이션은 다음과 같이 리소스가 정의되어 있습니다. 간단하게 예제로 `gha-runner-scale-set.yaml` 파일의 구성을 보면,
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gha-runner-scale-set
namespace: argo-cd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: devops
destination:
namespace: arc-systems
server: https://kubernetes.default.svc
syncPolicy:
syncOptions:
- CreateNamespace=true
- Replace=true
source:
chart: gha-runner-scale-set
repoURL: https://danmanners.github.io/gha-scale-set-helm
targetRevision: 0.6.1
helm:
releaseName: gha-runner-dev
values: |
githubConfigUrl: "https://github.com/newdeal123"
maxRunners: 3
minRunners: 0
## 이하 생략 ...
다음과 같이 구성되어 있겠죠?
여기서 renovate 봇은 `chart`, `repoURL`과 `targetRevision`을 보고 릴리즈 내역과 메니페스트 구성을 비교하게 됩니다.
renovate 공식문서의 Managers 리스트를 참고하면, argoCD 말고도 terraform, crossplane, ansible 등 다양한 데브옵스의 친구들이 있는 것을 확인할 수 있죠.
https://docs.renovatebot.com/modules/manager/
renovate 구성에서 argoCD를 추가하려면 `fileMatch` 패턴을 구성해 매니페스트 파일들의 경로를 지정해줘야 합니다.
"argocd": {
"fileMatch": [
"argocd/eks-prod/.*\\.yaml",
],
},
올바르게 renovate가 구성되었다면 다음과 같이 PR에 helm release 목록이 이쁘게 올라오는 것을 확인할 수 있습니다.
renovate파일을 고도화해 구성한다면 오너십을 가지고 있는 팀별로 릴리즈 서비스의 라벨과 리뷰어를 지정해 줄 수도 있죠.
정리
Renovate bot을 사용해 argoCD 애플리케이션의 헬름차트를 자동으로 업데이트하도록 구성하는 간단한 방법에 대해 살펴봤습니다.
renovate 구성은 크게 어렵지 않으니 가볍게 추가하는 것만으로도 자동 업데이트 프로세스가 만들어져 운영도구 릴리즈 관리가 간편해집니다.
물론, 릴리즈 노트를 꼭 읽어보고 브레이킹 체인지나 서비스에 영향이 가는 변경점이 있는지 확인해야겠죠.
긴 글 읽어주셔서 감사드립니다. 오늘도 좋은 하루 보내세요.
'🏋️♀️ DevOps, SRE' 카테고리의 다른 글
엔보이(envoy) 딥-다이브 (2) : 엔보이 로깅의 2가지 종류 (1) | 2024.02.27 |
---|---|
엔보이(envoy) 딥-다이브 (1) : 엔보이가 패킷을 받아 처리하기 까지 (1) | 2024.02.11 |
Github Actions Kubernetes에서 self-hosted 설치&운영하기 (0) | 2023.09.05 |
DevOps vs SRE , 차이점과 공통점에 대해 (0) | 2023.08.22 |
짧은 생각 모음집 - crossplane, eBPF 편 (2) | 2023.07.06 |