Kustomize는 kustomization 파일을 통해 쿠버네티스 오브젝트를 사용자가 원하는 대로 변경하는(customize) 독립형 도구이다.
애플리케이션의 새 버전의 이미지가 배포가 되면 kubernetes 환경에서 새 버전의 이미지로 설정을 변경해서 적용을 시켜야합니다.
kustomize의 edit set image를 활용하면 이미지 태그만 변경해서 적용할 수 있습니다.
kubernetes의 manifests 수정하는 여러 방법중에 저는 simple하게 kustomize를 선택했습니다.
kustomize에 edit set image
로 애플리케이션 image의 버전을 수정해서 저장소에 commit 하려고 합니다.
기타 사용법은 이곳에 잘 나와있으니 참고하시면 됩니다.
앞서 만든 설정파일을 kustomize 구조로 변경했습니다.
base/kustomization.yaml
resources:
- secret.yaml
- configmap.yaml
- deployment-db.yaml
- deployment.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: ghcr.io/wlgns5376/example-app
newTag: dev
resources:
- ../../base
kustomize build overlays/dev/
또는
kubectl kustomize overlays/dev/
명령을 입력하면 확인할 수 있습니다.
kustomize build overlays/dev/ | kubectl apply -f -
또는
kubectl apply -k overlays/dev/
cd overlays/dev/
kustomize edit set image ghcr.io/wlgns5376/example-app:latest
kustomization.yaml 파일의 내용을 확인해보면 아래와 같이 이미지 태그가 변경된 것을 확인할 수 있습니다.
다시 kustomize build .
를 실행해보면 이미지 태그가 변경된 것을 확인할 수 있습니다.
이렇게 설정한 파일을 ArgoCD와 연동하기 위해 Git 저장소에 push했습니다.
https://github.com/wlgns5376/example-app-kustomize/tree/dev
ArgoCD는 Kubernetes 용 선언적 GitOps 지속적 배포 도구입니다.
git 저장소에 kubernetes manifests를 올려놓고 ArgoCD에 저장소를 등록해 놓으면 이후 저장소에 변경사항을 확인해서 동기화하는 도구입니다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
기본적으로 Argo CD API 서버는 외부 IP로 노출되지 않습니다.
API 서버에 액세스하는 3가지 방식이 있으니 여기를 확인하시고 원하는 방법으로 노출하면 됩니다.
저는 연습중이기 때문에 port-forward로 노출했습니다.
kubectl port-forward svc/argocd-server -n argocd 8080:443
그런 다음에 localhost:8080
으로 접속할 수 있습니다. ArgoCD는 https가 기본이라서 브라우저에서 접속하면 아래와 같은 화면이 열립니다.
고급
버튼을 누르면 안전하지 않음
으로 무시하고 접속할 수 있습니다.
초기 UI 로그인 계정은 자동으로 생성됩니다.
아이디는 admin
이고 패스워드는 아래의 명령을 실행하면 확인할 수 있습니다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
기본적인 설정 방법은 여기를 참고하면 됩니다.
NEW APP
버튼을 클릭해서 애플리케이션을 등록합니다.
현재 작업코드는 dev
branch에 저장되어있어서 Revision을 dev로 설정했습니다.
그리고 Path는 overlays/dev
로 설정합니다.
DESTINATION에 namespace는 미리 생성했던 example-app을 입력합니다.
마지막으로 CREATE
버튼을 클릭하면 아래와 같이 추가된 화면이 나옵니다.
아직 생성만 했고 동기화되기 전 화면입니다.
SYNC
버튼을 누르면 Git 저장소의 내용을 가져와서 kubernetes에 적용을 합니다.
상단의 APP DETAILS
버튼을 클릭해서 아래 이미지에 보이는 ENABLE AUTO-SYNC
버튼을 누르면 자동 동기화가 활성화되어서 저장소에 수정사항이 자동으로 반영이 됩니다.
Kustomize를 이용해서 이미지 태그를 변경할 수 있는 kubernetes 설정과 그 설정을 가져와서 자동으로 동기화해주는 ArgoCD까지 구성을 했습니다.
이제 다음 단계에는 애플리케이션의 이미지가 배포가 되면 kustomization.yaml
의 버전 정보를 수정하는 작업을 추가해보겠습니다.
References: