목표

  • Argo CD의 용도가 무엇인지 이해한다.
  • Argo CD 사용을 시작하는 방법을 이해한다.

Argo CD란

  • 쿠버네티스를 위해 사용되는 GitOps 패턴의 CD(Continuous Delivery) 도구이다.
  • GitOps: git 레포지토리를 사용하여 인프라 프로비저닝 프로세스를 자동화하는 DevOps 기법이다.
  • 쿠버네티스 매니페스트을 git 레포지토리에 명시하면, Argo CD는 지정된 환경에 애플리케이션 상태를 모니터링하고 원하는 상태가 되도록 배포를 자동화한다.

Argo CD 구조

  • 3가지 컴포넌트로 나뉜다.
    • API Server: 웹 UI, CLI 및 CI/CD 시스템에 소비하는 API를 노출하는 gRPC/REST 서버이다.
    • Repository Server: 애플리케이션 매니페스트를 보관하는 git 레포지토리의 로컬 캐시를 유지하는 내부 서비스다.
    • Application Controller: 실행 중인 애플리케이션을 지속적으로 모니터링하고 현재 상태를 원하는 목표 상태와 비굘하는 쿠버네티스 컨트롤러다. 동기화 되지 않은 애플리케이션 사태를 감지하면 수정 조치를 취한다. 라이프사이클 이벤트(PreSync, Sync, PostSync)에 대한 사용자 정의 후크를 호출한다.

Argo CD 시작하기

1. Argo CD 설치

  • argocd라는 namespace를 만들고
  • Argo CD 서비스와 애플리케이션 리소스를 생성한다.
kubectl create namespace argocd 
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

2. Argo CD CLI 다운로드

brew install argocd

3. Argo CD API 서버 접근

  • 기본적으로 Argo CD API는 외부 API로 노출되어 있지않다.
  • 아래 방법 중 하나로 API 서버로 접근 가능하게 해야된다.
    • Load Balancer
    • Ingress
    • Port Forwarding
  • 필자는 Load Balancer 를 사용했고, 아래의 명령어를 사용하면 된다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}' 

4. CLI를 사용해서 로그인

  • 아래 명령어를 통해 admin 계정의 초기 비밀번호를 생성하고, argocd 네임스페이스의 argocd-initial-admin-secret 이름의 secret의 password 필드로 저장한다.
argocd admin initial-password -n argocd
  • 아래 명령어를 통해 admin 계정으로 로그인할 수 있다. <ARGOCD_SERVER>는 IP나 호스트명을 입력하면 된다.
argocd login <ARGOCD_SERVER>
  • 아래 명령어로 패스워드를 변경할 수 있다.
argocd account update-password

5. Git 레포지토리로부터 애플리케이션 생성

  • CLI를 사용하는 방법 UI를 사용하는 방법 두 가지가 가능하다.
  • CLI를 사용하는 방법은 아래와 같다.
kubectl config set-context --current --namespace=argocd
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

6. 애플리케이션 Sync(Deploy)

  • 여기서도 CLI와 UI 두 가징 방법이 있다.
  • 아래는 CLI를 사용하는 방법이다.
  • 생성된 애플리케이션 상태 확인
    • 아래 예시에서는 애플리케이션이 아직 배포되지 않았고 쿠버네티스 리소스가 생성되지 않았기 때문에 OutOfSync 상태이다.
$ argocd app get guestbook 
Name: guestbook 
Server: https://kubernetes.default.svc 
Namespace: default 
URL: https://10.97.164.88/applications/guestbook 
Repo: https://github.com/argoproj/argocd-example-apps.git 
Target: 
Path: guestbook 
Sync Policy: <none> 
Sync Status: OutOfSync from (1ff8a67) 
Health Status: Missing 

GROUP KIND NAMESPACE NAME STATUS HEALTH 
apps Deployment default guestbook-ui OutOfSync Missing 
     Service default guestbook-ui OutOfSync Missing
  • sync(deploy) 하기위해서는 아래와 같이 명령어를 사용할 수 있다.
    • 아래 명령어는 git 레포지토리에서 매니페스트를 탐색하고, 매니페스트의 kubectl apply를 실행한다.
argocd app sync guestbook
  • UI로는 아래와 같이 상태를 확인하고 sync할 수 있다.

참고 자료