ArgoCD를 이용한 CD 구현

박재하·2024년 1월 11일
0

DevOps 기초

목록 보기
9/9

ArgoCD

GitOps란?

기존의 소프트웨어 배포 및 관리 방식은 인프라 환경을 수동으로 관리해야 했기에 문제가 많았음. 소프트웨어 형상과 인프라를 따로 관리해야 했으며, 이로 인해 인프라와 소프트웨어 개발환경 간의 불일치로 배포 및 운영 과정에서 사람의 실수로 문제가 발생할 가능성이 높았던 것.

이러한 기존 방식에 대한 대안으로 GitOps가 탄생함.

GitOps는 Git 저장소를 사용하는 소프트웨어 배포 접근 방식으로, 인프라와 소프트웨어를 함께 관리하기 때문에 운영 환경의 일관성을 유지함. 또한 모든 코드 및 인프라 변경 사항이 Git 저장소에 저장되기 때문에 변경 내역을 추적/롤백하기가 유용함.

좀 더 정확하게, GitOps라는 용어는 Cloud Native 프로젝트에 DevOps를 어떻게 적용할 지에 대한 실천적 방법론임. 통상 Kubernetes 환경에서 Continuous Deployment를 수행하기 위한 원칙이자 방법론이며, IaC(Infrastructure as a Code), 즉 인프라를 코드로 표현하는 도구들을 활용해 이를 구현할 수 있음.

ArgoCD란?

ArgoCD는 이러한 GitOps를 구현하기 위한 도구 중 하나로, Kuberenetes 애플리케이션의 자동 배포를 위한 오픈소스 도구임. Git 저장소에서 변경 사항을 감지하여 자동으로 Kubernetes 클러스터에 애플리케이션을 배포(변경사항을 적용)할 수 있는 기능을 제공함.

스크린샷 2024-01-05 오전 12 51 06

동작 방식은 위 그림과 같음. Git 변경을 감지하여 Kubernetes 배포 방식인 Helm 등으로 배포.
여기서 말하는 Git 저장소는 Helm 차트 프로젝트의 리포지토리를 말함.

ArgoCD로 CD 구현

minikube에 ArgoCD 설치

학습메모 3을 참고하여 helm으로 ArgoCD를 설치해준다.

helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd
스크린샷 2024-01-11 오전 11 56 47

설명을 잘 읽어야 한다. 먼저 아래 명령으로 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
스크린샷 2024-01-11 오후 12 01 38

그러면 접속 가능!

스크린샷 2024-01-11 오후 12 02 05

짜잔

GitHub 리포지토리에 Helm Chart 저장

우선 만들어둔 Helm Chart를 Git 저장소에 옮겨놓아야 한다. 여기서부턴 학습메모 2 참고.

스크린샷 2024-01-11 오후 12 09 47

리포지토리 하나 만들고, 로컬에서 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
스크린샷 2024-01-11 오후 12 12 33

잘 올라갔다!

ArgoCD에서 Git 리포지토리 연결

스크린샷 2024-01-11 오후 12 13 49

아까 실행해둔 ArgoCD 웹페이지로 가서 Settings -> Repositories. CONNECT REPO 버튼 클릭

스크린샷 2024-01-11 오후 12 14 57

HTTPS, git, URL은 git repo url 입력하고 CONNECT

스크린샷 2024-01-11 오후 12 15 22

Successful!

App 생성 및 Synchronize

스크린샷 2024-01-11 오후 12 21 28

Applications에서 NEW APP 선택

스크린샷 2024-01-11 오후 12 24 49

어플리케이션 이름을 짓고(kube-test-argocd) AUTO-CREATE NAMESPACE 체크

스크린샷 2024-01-11 오후 12 26 38

SOURCE에는 아까 push한 helm chart의 github repository를 HEAD revision, . 경로로 등록하고

DESTINATION에는 minikube의 URL인 https://kubernetes.default.svc를, namespace는 적절히(argocd) 지정한다.

스크린샷 2024-01-11 오후 12 27 14

정상적으로 설정이 된다면 하당 HELM 영역에 PARAMETERS가 만든 helm chart와 동일하게 표시된다. 확인!

스크린샷 2024-01-11 오후 12 27 51 스크린샷 2024-01-11 오후 12 27 59

잘 생성되었다면 SYNC, SYNCHRONIZE 버튼을 클릭해 동기화.

스크린샷 2024-01-11 오후 12 28 10 스크린샷 2024-01-11 오후 12 29 02

이제 Synced가 표시되며 파란불이 뜬다! 상세 페이지로 들어가면 운영중인 쿠버네티스 오브젝트의 상태를 볼 수 있음.

kubectl, k9s로 확인

kubectl로 namespace argocd인 오브젝트를 모두 검색해보자.

kubectl get all -n argocd
스크린샷 2024-01-11 오후 12 29 39

잘 표시된다.

kubectl get services -n argocd
minikube service kube-test-argocd-kube-test-helm-chart -n argocd
스크린샷 2024-01-11 오후 12 56 58

Pending 상태인 서비스를 실행시켜 보았다. 잘 실행됨

스크린샷 2024-01-11 오후 12 57 02

성공!

스크린샷 2024-01-11 오후 1 01 36 스크린샷 2024-01-11 오후 12 32 22

k9s에서도 namespace로 argocd를 선택하면 실행중인 pod들을 확인할 수 있다.

학습 메모

  1. ArgoCD란? 1
  2. ArgoCD란? 2
  3. argocd 설치
profile
해커 출신 개발자

0개의 댓글