Document toolboxDocument toolbox

4. Argo-CD


1. Argo CD 개요

CI/CD 파이프라인 구축 시 애플리케이션을 지속적으로 관찰하여 최신 상태로 유지시켜주는 CD(Continuous Delivery) 솔루션이 필요하며, PlayceKube 패키지에서는 Argo-CD를 이용하여 기능을 구현합니다.

Continuous Delivery란?

배포 자동화 과정을 말하며, CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미합니다.
테스트 및 배포를 자동화하는 DevOps 파이프라인 이전 단계가 모두 수행되면 자동으로 변경사항이 운영 환경에 배포됩니다.

Argo CD란?

애플리케이션 정의, 구성 및 환경은 선언적이고 버전이 제어되어야 하고 애플리케이션 배포 및 수명 주기 관리는 자동화되고 감사 가능하며 이해하기 쉬워야 합니다.
Argo-CD는 쿠버네티스를 위한 CD 솔루션으로 사용하기 쉬운 인터페이스를 제공하며 SSO, 멀티 클러서터 관리, RBAC 등 기능을 지원합니다.

Argo CD 특징

  • 지정된 대상 환경에 애플리케이션 자동 배포

  • 여러 구성 관리/템플릿 도구 지원(Kustomize, Helm, Jsonnet, plain-YAML)

  • 여러 클러스터를 관리하고 배포하는 기능

  • SSO 통합(OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)

  • 승인을 위한 다중 테넌시 및 RBAC 정책

  • Git 레포지토리에 커밋된 모든 애플리케이션 구성으로 롤백/롤

  • 애플리케이션 리소스의 상태 분석

  • 자동화된 구성 드리프트 감지 및 시각화

  • 애플리케이션을 원하는 상태로 자동 또는 수동 동기화

  • 애플리케이션 활동의 실시간 보기를 제공하는 웹 UI

  • 자동화 및 CI 통합을 위한 CLI

  • Webhook 통합(GitHub, BitBucket, GitLab)

  • 자동화를 위한 액세스 토큰

  • PreSync, Sync, PostSync는 복잡한 애플리케이션 롤아웃(예: 블루/그린 및 카나리아 업그레이드)을 지원합니다.

  • 애플리케이션 이벤트 및 API 호출에 대한 감사 추적

  • 프로메테우스 매트릭

  • Git에서 helm 매개변수 재정의를 위한 매개변수 재정의

 

Argo CD의 구조

Argo CD는 실행 중인 애플리케이션을 지속적으로 모니터링하고 현재 라이브 상태를 원하는 대상 상태(Git 저장소에 지정된 상태)와 비교하는 쿠버네티스 컨트롤러로 구현됩니다.
라이브 상태가 대상 상태와 차이가 생기게 되면 다시 자동 또는 수동으로 동기화하는 기능을 제공하며, 차이점을 보고 및 시각화합니다.

 

2. Argo CD 사용

GitOps를 위한 애플리케이션 생성

(1) Argo CD GUI 페이지 접속 (ex. https://argo.k8s.test.playce.cloud)

  • KeyCloak 등 연동되어 있는 경우 OIDC PROVIDER를 통해 로그인 하며, LOCAL DB 통해서 로그인 할 수 있습니다.

(2) Git Repository 생성

  • Repositories : 레포지토리 연결

  • Certificates : Git 레포지토리 연결을 위한 인증서 추가

  • GnuPG keys : 사용자 인증을 위해 GnuPG 키로 암호화 설정

  • Clusters : 쿠버네티스 클러스터 연결

  • Project : Argo CD에서 관리하는 프로젝트 구성

  • Accounts : Argo CD 계정

 

 

(3) Repository 연결

  • git에서 URL 확인 후 연결

  • 연결 확인

(4) Argo CD에서 관리하는 애플리케이션 생성

(5) 애플리케이션 정보 입력

  • Sync Policy는 Manual, Automatic 중에 선택하며, Automatic 옵션을 선택하면 Self Heal 옵션이 추가로 생성

  • Repository URL은 Git에서 확인

  • Revision은 Git의 특정 Branch, Tag를 선택

  • Path는 Git의 어떤 디렉토리를 대상으로 할지 선택

  • 배포 대상이 되는 클러스터와 네임 스페이스 지정

(6) 생성된 애플리케이션 확인

(7) 해당 애플리케이션에서 생성된 리소스 생성 및 상태 확인

(8) 클러스터에서 생성된 리소스 확인

애플리케이션 롤백

(1) 애플리케이션 상태 확인 페이지 상단에 [HISTORY AND ROLLBACK] 버튼 클릭

  • KeyCloak 등 연동되어 있는 경우 OIDC PROVIDER를 통해 로그인 하며, LOCAL DB 통해서 로그인 할 수 있습니다.

(2) Git에서 소스가 변경 되면 Argo CD에서 옵션에 따라 Deploy를 진행하며, 변경 된 히스토리 리스트 확인이 가능합니다.

  • 특정 버전으로 애플리케이션 롤백을 원할 경우, 더보기 버튼에서 [Rollback]을 클릭

애플리케이션 동기화

(1) helm으로 배포된 Argo-CD는 기본 3분 주기로 Git과 동기화를 진행하며, 시간을 변경하고 싶을 경우 helm chart에서 appResyncPeriod 값을 변경이 가능합니다.

(2) 수동 Refresh

  • 3분 주기를 기다리지 않고 사용자가 수동으로 Refresh를 할 수 있으며, git에 업데이트 된 내용을 쿠버네티스 클러스터에 바로 적용할 경우 사용합니다.

  • [REFRESH] 더보기 버튼을 누르면 Hard Refresh를 수행 할 수 있으며, 캐시를 무효화 시키고 Refresh를 수행합니다.

(3) Sync

  • Sync는 Git에 있는 의도된 상태를 쿠버네티스 클러스터에 배포하여 동기화하는 것을 의미하며, Git 상태와 쿠버네티스 상태에 차이가 있을 경우 수행합니다.

  • Argo CD에서 애플리케이션을 생성할 때 Sync 모드를 manual 또는 Automatic으로 선택 할 수 있으며, [APP DETAILS] 버튼에서 수정이 가능합니다.

  • Git 상태와 쿠버네티스 클러스터 상태가 다를 경우 주황색 화살표 그림과 함께 OutOfSync로 상태가 표시되며, SYNC 버튼으로 동기화 합니다.

(4) Prune

  • 애플리케이션 Sync 정책이 Automated일 경우 [PRUNE RESOURCERS] 옵션을 선택할 수 있습니다.

  • Prune 옵션이 활성화되면 Git에서 리소스를 삭제할 때 해당 리소스를 쿠버네티스 클러스터에서 같이 삭제가 되며, 비활성화 시 클러스터에서는 해당 리소스가 삭제되지 않습니다.

  • Git에서 리소스가 삭제되고 Prune 옵션이 비활성화일 경우, 아래 그림과 같이 삭제된 리소스(nginx-service)에 노란색 X 표시가 발생하며 쿠버네티스에서도 삭제되지 않습니다.

3. Argo CD 기술자료

https://argo-cd.readthedocs.io/en/stable/

4. Argo CD 릴리즈 노트

https://github.com/argoproj/argo-cd/releases