[Kubernetes] About Argo CD
[Kubernetes] About Argo CD
- Argo CD는 GitOps 스타일의 배포를 지원하는 CD 도구
- Git 저장소의 내용과 Kubernetes 클러스터를 동기화해주는 역할을 하는 에이전트
작동 원리
- Argo CD는 원하는 애플리케이션 상태를 정의하기위한 소스로 Git repository를 사용하는 GitOps 패턴을 따른다.
- Kubernetes 매니페스트는 여러 방법으로 지정할 수 있다.
- Argo CD는 지정된 대상 환경에서 원하는 애플리케이션 상태의 배포를 자동화한다.
설치
1
2
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
GitOps
- 핵심은 git repository에 저장된 Kubernetes manifest 같은 파일을 이용하여 배포를 선언적으로 하는 것이다.
- git 저장소에 있는 것을 Kubernetes 클러스터에 동기화한다.
GitOps의 원칙
- 모든 시스템은 선언적으로 선언되어야 함
선언적(declarative)
이라 함은 명령들의 집합이 아니라 사실(fact)들의 집합으로 구성이 되었음을 보장한다는 의미 쿠버네티스의 manifest들은 모두 선언적으로 작성되었고 이를 Git으로 관리한다면 versioning과 같은 Git의 장점과 더불어, SSOT(single source of truth)를 소유하게 됨 - 시스템의 상태는 Git의 버전을 따라감
Git에 저장된 쿠버네티스 manifest를 기준으로 시스템에 배포되기 때문에 이전 버전의 시스템을 배포하고싶으면 git revert와 같은 명령어를 사용하면 됨 - 승인된 변화는 자동으로 시스템에 적용됨
한 번 선언된 manifest가 Git에 등록되고 관리되기 시작하면 변화(코드수정 등)가 발생할때마다 자동으로 시스템에 적용되어야 하며, 클러스터에 배포할때마다 자격증명은 필요하지 않아야 함 - 배포에 실패하면 이를 사용자에게 경고해야 함
시스템 상태가 선언되고 버전 제어 하에 유지되었을 때 배포가 실패하게되면 사용자에게 경고할 수 있는 시스템을 마련해야 함
기존의 배포 방식
- 개발자가 소스코드를 작성
- git 저장소에 push
- Jenkins, CircleCI, Github Action과 같은 CI를 통해 테스트와 빌드 작업
- 생성한 Container Image를 저장소(ex: Harbor)에 업로드
- 업로드 된 Container Image의 정보를 참조해서 서버에 배포
GitOps의 배포방식
- 개발자가 소스코드를 작성
- git 저장소에 push
- Jenkins, CircleCI, Github Action 같은 CI에 의해서 테스트와 빌드 작업이 실행, 생성한 Container Image를 저장소(ex: Harbor)에 업로드
- GitOps방식으로 관리되는 Manifest 파일의 변경사항을 감시하며, 현재 배포된 환경의 상태와 Git에 정의된 Manifest 상태를 동일하게 유지하는 역할을 수행
This post is licensed under CC BY 4.0 by the author.