ArgoCD는 DevOps를 위한 CD 툴 중 하나이다.

GitOps 라고 하는데, 간단하게 설명하자면 설정파일들을 Git에 올려놓고

Git Pull 요청을 통해 이 설정을 불러와서 인프라 프로비저닝과 배포를 진행한다고 보면 된다.

 

예를 들어서, 개발환경에 0.0.2 버전을 배포하기 위해서

Git과 연동되어 있는 프로젝트에서

원격 컨테이너 레지스트리에 업로드된 0.0.2 버전의 이미지를 pull 하도록 설정파일을 변경하고 git push 한 뒤에,

ArgoCD에서 배포를 진행하면 0.0.2 버전으로 개발환경에 배포가 진행되는 것이다.

 

이렇게 되면 Git에 설정이 보관되어 있기 때문에

설정의 변동사항을 파악하기도 쉽고 롤백도 간단하다.

 

저번 게시글에서 서버들간의 통신을 위한 Subnet을 구성하고

nginx controller를 설치한 뒤 외부 배포까지 진행했으니까

이번에는 ArgoCD를 통해 애플리케이션의 변경사항을 반영해본다!

 

 

 

1. 설치하기 전에

ArgoCD를 설치하기 전, 모든 설정파일은 Git Repository에 연결되어 있어야 한다.

 

namespace, secret 과 같은 한번 설정하고 바뀌지 않는 설정파일은 클러스터 내에서 apply를 해주고,

Repository에는 올리지 않는 것이 좋아보인다.

(따로 오류가 발생하지는 않지만, ArgoCD에서 sync 관련 경고 문구가 출력됨)

 

이 게시글에서는 ingress, service, deployment를 repository에 올리고 테스트를 진행한다.

 

 

2. ArgoCD 설치

ArgoCD를 설치하자. 명령어 한개면 된다.

#argocd 설치
k create namespace argocd
k apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

 

설치하고나서 argocd namespace에 생성된 것들을 확인해보면

정상적으로 설치된 것을 확인할 수 있다.

 

 

3. 접속을 위한 설정

위에서는 이미 적용되어 있지만, 외부에서 접속하기 위해 argocd-server service를 nodeport로 변경한다.

(클라우드 플랫폼에서 쿠버네티스 관리형 서비스를 사용하고 있으면 클라우드 load balancer를 사용해서 접근해도 된다)

#nodeport 타입으로 변경
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

 

 

4. 비밀번호 확인 및 접속

최초 로그인을 위한 비밀번호를 조회한다.

#초기 비밀번호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

 

 

5. 접속 및 저장소 연결

아까 {서버 공인IP}:{노드포트로 오픈한 포트}로 접속해서

ID: admin

PW: {아까 조회한 비밀번호}

로 로그인을 진행한다.

 

(최초 로그인 시에는 따로 프로젝트가 없음)

 

왼쪽 메뉴를 눌러 이동한 뒤

첫번째 [Repositories] 메뉴 클릭.

상단에 본인이 원하는 방법으로 Git을 연결한다.

 

 

6. 프로젝트 생성!

메인 화면으로 돌아와서

좌측 상단 [NEW APP]을 클릭한다.

 

Application Name을 임의로 입력하고, Project Name은 default로 했다.

그 다음 Git Repository를 선택하는데

나는 각 브랜치 별로 배포 환경을 설정할 예정이라서

dev 브랜치를 바라보도록 했다.

(stag, prd 환경에서는 각각 브랜치를 생성해서 설정 파일을 따로 관리할 예정)

Path는 설정 파일들을 저장한 위치를 지정해준다.

 

마지막으로 Cluster URL과 Namespace를 설정하면

(내부 API서버 호스트 이름을 변경한 경우 Cluster URL를 변경하면 된다)

 

메인화면에 추가한 프로젝트가 생성된다!

 

 

7. 배포

마지막으로 배포를 진행한다.

해당 프로젝트를 클릭해서 들어간 뒤에

상단에 [SYNC] 버튼을 한번 클릭하면

배포 완료!

 

혹시 배포 중 오류가 난다면

오류가 발생한 Object를 클릭해서 [EVENTS], [LOG] 탭을 확인하면 된다.

 

버전이나 설정을 변경해서 다시 배포해야 하는 경우

새로 Git에 푸쉬하고, 똑같이 [SYNC] 버튼을 클릭하면 된다.

아니면 Object를 클릭해서 해당 Object만 따로 SYNC를 할 수도 있다.

(새로 Pod를 올려서 배포를 진행하고 기존 Pod를 없애는 과정을 콘솔에서 확인할 수 있는데, 엄청 신기하다)

 

 

끝!

+ Recent posts