k8s와 argoCD의 버전 동기화 문제

기존 배포 수행시 도커 이미지 빌드 후 아래와 같은 이미지 변경 명령어를 사용하여 쿠버네티스에 배포를 했었다.

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1

이번에 ArgoCD 도입 이후 Git 저장소와 K8S의 deployment 이미지 버전을 동기화시켜야되는 일이 생긴 것이다. 물론 수동으로 이미지 버전을 수정하여 커밋할 수 있지만 이런 것까지 하기는 매우 귀찮다.

요구사항

일단 아래와 같은 간단한? 요구사항이 있다.

  1. 배포 환경을 분리할 것 (production, test 등)
  2. 배포용 브랜치를 분리할 것
  3. 쿠버네티스 오브젝트 중복은 최소화

Kustomize

Kustomize는 쿠버네티스 오브젝트를 사용자가 원하는 대로 변경할 수 있는 도구이다. 한마디로 명령어나 설정파일로 yaml 파일을 마음 껏 변경할 수 있다는 것! 이것을 알기 전에는 yaml 파일을 sed 같은 찾아바꾸기로 하려 했었다. 또한 기본 base 오브젝트를 두어 overlay 오브젝트로 덮어쓸 수 있다. 덮어쓰는 기능을 사용하면 코드 중복을 줄일 수 있다.

Jenkins

젠킨스는 아주 유명한 빌드 자동화 도구이다. 이번에는 pipeline을 사용해보려고 한다. pipeline은 jenkins에서도 작성할 수 있지만 git 저장소에서 관리할 수도 있다. 소스코드 관리를 위해 git 저장소에서 관리하도록 한다.

ArgoCD

ArgoCD는 Git을 사용하여 쿠버네티스 배포를 자동화한다. 그리고 원 소스코드인 Git을 참조하기에 배포속도가 빠르고 변경기록을 남기기에 안정성이 높다. (GitOps)

Sampe Repository

일단 모든 소스코드는 github에 있다. 참고하면 좋다.

Kustomize 설정

Kustomization.yaml