이번에 에이콘출판사에서 예제로 배우는 ArgoCD 책이 출판되었습니다.
한국어로 출간되는 첫 ArgoCD 관련 기술 서적으로 알고 있는데,
내용이 굉장히 좋아서 관심이 있다면 한 번 사서 읽어보는 것을 추천드립니다.
예제로 배우는 Argo CD
본 글은 책을 읽으며 공부한 내용을 축약하여 작성되었습니다.
1. GitOps 소개
GitOps 는 Flux 를 개발한 웨이브웍스 (Weaveworks) 직원들이 2017년 처음 사용
현재 GitOps 는 DevOps 다음으로 영향력 있는 단어가 되었습니다.
1.1. GitOps 의 다양한 정의
- GitOps 는 다양하게 정의 될 수 있습니다.
- Weavworks
- Weavworks 에서는 PR 을 통한 운영을 GitOps 라고 지칭했습니다.
- GitLab
- GitLab 에서는 개발 관행 (버전 제어, 협업, 규정 준수, CI/CD) 를 인프라 자동화에 적용하는 것을 GitOps 라고 지칭했습니다.
- OpenGitOps - 링크
- GitOpsCon / ArgoCon 을 주최하는 OpenGitOps 에서는 다음 4가지를 GitOps 원칙이라고 정의합니다.
1) Declarative
시스템은 선언형으로 관리되어야 한다.
2) Versioned and Immutable
Desired State 는 버전 관리가 되는 불변의 저장소에 저장되어야 한다.
3) Pulled Automatically
Software Agents 는 소스로부터 자동으로 선언된 Desired State 를 적용한다.
4) Continuously Reconciled
Software Agents 는 지속적으로 현재 시스템을 관찰하고 Desired State 를 적용한다.
1.2. Kubernetes 와 GitOps
Kubernetes 는 구글 엔지니어들이 Borg 란 이름으로 내부 컨테이너 오케스트레이션 시스템을 구축하던 것을 2014년에 오픈소스로 공개하면서 시작되었습니다.
현재 Kubernetes 는 매우 유연하고 확장이 용이한 특징을 가지고 플랫폼 구축을 위한 플랫폼이라 불리우며, 컨테이너 생태계의 표준이 되었습니다.
Kubernetes 컴포넌트 구성
- Control Plane - 클러스터 관리 역할
- API 서버
- 데이터베이스 (ETCD)
- 컨트롤러 매니저
- 스케쥴러
- 클라우드 컨트롤러 매니저
- Data Plane - 사용자 워크로드 실행 역할
- 컨테이너 런타임
- Kubelet
- Kube-Proxy
1.3. Contoller Manager
모든 Kubernetes 컴포넌트가 중요하지만, GitOps 개념과 직접적인 연관관계가 있는 것은 컨트롤러 입니다.
컨트롤러의 기본 역할과 개념에 대해 알아보고 추후에 ArgoCD 가 컨트롤러를 어떻게 활용하는 지 알아볼 예정입니다.
컨트롤러 역할
실제 상태 (Live State / Current State) 와 원하는 상태 (Desired State) 가 일치하는 지 관찰하고,
최종 상태에 도달하기 위해 지속적으로 조정하는 것
컨트롤러 vs 오퍼레이터
- 컨트롤러 : 쿠버네티스 내부 오브젝트에서 동작
- 오퍼레이터 : 쿠버네티스와 그 외의 것들까지 동작, 커스텀 리소스(Custom Resource) 를 사용해 수행
1.4. IaC vs GitOps
IaC 와 깃옵스는 비슷하면서도 다른 개념입니다.
IaC 와 깃옵스 공통점
- 소스 제어를 통해 상태 저장
- 스테이징과 프로덕션 환경 간의 불일치 (구성 드리프트) 가 줄어듬
IaC 와 깃옵스 차이점
- IaC
- 인프라 변경 사항을 적용하는 오퍼레이터나 컨트롤러가 없음
- Push 방식 변경 사항 업데이트
- 파이프라인이나 CI/CD 시스템이 프로덕션 자격 증명을 가져야 함
- 깃옵스
- Pull 방식 변경 사항 업데이트 (보안상 우세)
- 에이전트가 자격 증명 저장하고 신뢰할 수 있는 계정에서 실행
- 컨트롤러, 오퍼레이터 존재
IaC 를 깃옵스 방식으로 활용하는 법
- Terraform + Atlantis 함께 사용
- Atlantis : 원격 설정으로 에이전트 실행, 파이프라인이 실행하는 것이 아니라 에이전트가 명령 실행
참고 문서
https://www.yes24.com/Product/Goods/125018027
https://about.gitlab.com/topics/gitops/
- GitOps Principles - OpenGitOps
https://opengitops.dev/