[GitOps]ArgoCD와 Kustomize를 이용해 kubernetes에 배포하기

Hoone·2021년 6월 1일
0
post-thumbnail

Kustomize + ArgoCD

Kustomize

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 설정확인

kustomize build overlays/dev/
또는
kubectl kustomize overlays/dev/

명령을 입력하면 확인할 수 있습니다.

kustomize 적용

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

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 버튼을 클릭해서 애플리케이션을 등록합니다.

기본정보 입력

소스 저장소 정보와 Kubernetes 설정

현재 작업코드는 dev branch에 저장되어있어서 Revision을 dev로 설정했습니다.
그리고 Pathoverlays/dev로 설정합니다.
DESTINATION에 namespace는 미리 생성했던 example-app을 입력합니다.

생성된 화면

마지막으로 CREATE 버튼을 클릭하면 아래와 같이 추가된 화면이 나옵니다.

상세화면

아직 생성만 했고 동기화되기 전 화면입니다.

SYNC 버튼을 누르면 Git 저장소의 내용을 가져와서 kubernetes에 적용을 합니다.

동기화 완료 화면

자동 동기화

상단의 APP DETAILS 버튼을 클릭해서 아래 이미지에 보이는 ENABLE AUTO-SYNC 버튼을 누르면 자동 동기화가 활성화되어서 저장소에 수정사항이 자동으로 반영이 됩니다.

Next

Kustomize를 이용해서 이미지 태그를 변경할 수 있는 kubernetes 설정과 그 설정을 가져와서 자동으로 동기화해주는 ArgoCD까지 구성을 했습니다.
이제 다음 단계에는 애플리케이션의 이미지가 배포가 되면 kustomization.yaml의 버전 정보를 수정하는 작업을 추가해보겠습니다.

References:

profile
도움이 되고픈 개발자

0개의 댓글