기존의 소프트웨어 배포 및 관리 방식은 인프라 환경을 수동으로 관리해야 했기에 문제가 많았음. 소프트웨어 형상과 인프라를 따로 관리
해야 했으며, 이로 인해 인프라와 소프트웨어 개발환경 간의 불일치로 배포 및 운영 과정에서 사람의 실수로 문제가 발생할 가능성이 높았던 것.
이러한 기존 방식에 대한 대안으로 GitOps
가 탄생함.
GitOps는 Git 저장소를 사용하는 소프트웨어 배포 접근 방식으로, 인프라와 소프트웨어를 함께 관리하기 때문에 운영 환경의 일관성을 유지함. 또한 모든 코드 및 인프라 변경 사항이 Git 저장소에 저장되기 때문에 변경 내역을 추적/롤백하기가 유용함.
좀 더 정확하게, GitOps라는 용어는 Cloud Native 프로젝트에 DevOps를 어떻게 적용할 지에 대한 실천적 방법론
임. 통상 Kubernetes 환경에서 Continuous Deployment를 수행하기 위한 원칙이자 방법론이며, IaC(Infrastructure as a Code), 즉 인프라를 코드로 표현하는 도구들을 활용해 이를 구현할 수 있음.
ArgoCD
는 이러한 GitOps를 구현하기 위한 도구 중 하나로, Kuberenetes 애플리케이션의 자동 배포를 위한 오픈소스 도구임. Git 저장소에서 변경 사항을 감지하여 자동으로 Kubernetes 클러스터에 애플리케이션을 배포(변경사항을 적용)할 수 있는 기능을 제공함.
동작 방식은 위 그림과 같음. Git 변경을 감지하여 Kubernetes 배포 방식인 Helm 등으로 배포.
여기서 말하는 Git 저장소는 Helm 차트 프로젝트의 리포지토리를 말함.
학습메모 3을 참고하여 helm으로 ArgoCD를 설치해준다.
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd
설명을 잘 읽어야 한다. 먼저 아래 명령으로 admin password를 얻고
kubectl -n default get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
port forwarding으로 브라우저로 접속할 수 있도록 해야 함.
kubectl port-forward service/argocd-server -n default 8080:443
그러면 접속 가능!
짜잔
우선 만들어둔 Helm Chart를 Git 저장소에 옮겨놓아야 한다. 여기서부턴 학습메모 2 참고.
리포지토리 하나 만들고, 로컬에서 git remote add origin
으로 주소 등록해서 push하자. 간단하니까 과정 캡쳐는 생략
git init . # 프로젝트 루트에서
git remote add origin https://github.com/qkrwogk/kube-test-helm-chart.git
git add .
git commit -m "[INIT] init helm chart"
git branch
git switch -c develop
git push origin develop
잘 올라갔다!
아까 실행해둔 ArgoCD 웹페이지로 가서 Settings -> Repositories
. CONNECT REPO
버튼 클릭
HTTPS
, git
, URL은 git repo url 입력하고 CONNECT
Successful!
Applications
에서 NEW APP
선택
어플리케이션 이름을 짓고(kube-test-argocd
) AUTO-CREATE NAMESPACE
체크
SOURCE
에는 아까 push한 helm chart의 github repository를 HEAD
revision, .
경로로 등록하고
DESTINATION
에는 minikube의 URL인 https://kubernetes.default.svc
를, namespace는 적절히(argocd
) 지정한다.
정상적으로 설정이 된다면 하당 HELM
영역에 PARAMETERS가 만든 helm chart와 동일하게 표시된다. 확인!
잘 생성되었다면 SYNC
, SYNCHRONIZE
버튼을 클릭해 동기화.
이제 Synced가 표시되며 파란불이 뜬다! 상세 페이지로 들어가면 운영중인 쿠버네티스 오브젝트의 상태를 볼 수 있음.
kubectl로 namespace argocd
인 오브젝트를 모두 검색해보자.
kubectl get all -n argocd
잘 표시된다.
kubectl get services -n argocd
minikube service kube-test-argocd-kube-test-helm-chart -n argocd
Pending 상태인 서비스를 실행시켜 보았다. 잘 실행됨
성공!
k9s에서도 namespace로 argocd
를 선택하면 실행중인 pod들을 확인할 수 있다.