새소식

CICD

[CI/CD Study 1주차] GitOps 소개

  • -

CoudNet@ 팀의 가시다님께서 리딩하시는 CI/CD Study 1주차 스터디 내용 정리

 

 

이번 스터디에서는 GitOps Cookbook, 예제로 배우는 ArgoCD, Getting Started with HashiCorp Vault 3개의 책을 통해 CI/CD 에 대해서 공부할 예정입니다.

 

GitOps 에 대한 개념은 예전에 쿠버네티스 개념과 같이 글에서 한 번 다룬 적이 있습니다.
해당 글도 참고하면 좋을 것 같습니다.

 

GitOps 개념과 Kubernetes

이번에 에이콘출판사에서 예제로 배우는 ArgoCD 책이 출판되었습니다. 한국어로 출간되는 첫 ArgoCD 관련 기술 서적으로 알고 있는데,내용이 굉장히 좋아서 관심이 있다면 한 번 사서 읽어보는 것

kimalarm.tistory.com

 

이번 글에서는 스터디에서 공부한 내용과 정보를 다뤄보겠습니다.

 

 

 

1. GitOps 소개

 

1.1. GitOps 란??

 

GitOps 는 다양하게 정의 될 수 있지만, 한 마디로 정의하면 다음과 같습니다.

 

Git 저장소를 단일 소스로 사용하여 인프라를 코드로 제공하는 방법론 및 관행

 

 

* GitOps 3가지 중요 원칙

 

1. Git 을 신뢰할 수 있는 단일 소스로 취급 - Git is the single source of truth

2. 모든 것은 코드로 표현 - Treat Everything as Code

3. 작업은 Git Workflow 를 통해 수행 - Operations are performed through Git workflows

 

 

또한, 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. GitOps 도입 이점 4가지

 

1. 표준 워크플로 (Standard Workflow)

- 애플리케이션 개발팀에서 익숙한 도구와 Git Workflow 사용

 

2. 강화된 보안 (Enhanced Security)

- 변경 사항을 미리 검토하고, 예기치 않은 구성 변동을 감지하여 조치

 

3. 가시성 및 감사 (Visibility and Audit)

- Git 저장소 변경 이력을 통한 클러스터의 변경 사항 추적 가능

 

4. 멀티 클러스터 일관성 (Multicluster Consistency)

- 많은 환경과 쿠버네티스 클러스터들에 대한 배포를 안정적이고 일관되게 구성



 

1.3. 쿠버네티스 CI/CD

 

CI (Continuous Integration, 지속적 통합)CD (Continuous Delivery, 지속적 배포) 는 앱 개발의 각 단계에 자동화를 도입하여 앱을 더 자주 배포할 수 있도록 하는 방법론입니다.

 

보통 CI/CD 는 다음과 같은 프로세스를 가집니다.

 

* CI: 제출된 코드 확인
* CD: 보안 체크, 빌드 및 배포

 

 

GitOps 는 쿠버네티스 배포 환경에서 자주 사용되는 방법론인데,

GitOps 를 통해 쿠버네티스 클러스터 내부에 CI/CD 파이프라인을 쉽게 구현할 수 있습니다.

 

* CI: 컨테이너 이미지 생성 및 저장(Push)
* CD: 컨테이너 이미지 풀(Pull), 매니페스트(Manifest) 변경을 통한 Git 동기화

 

 

 

1.4. 쿠버네티스에 GitOps 를 접목한 앱 배포 방법



쿠버네티스에서 GitOps 는 다음과 같은 4가지 생명 주기를 가집니다.

 

1. 배포(Deploy)

- Git 에 저장된 매니페스트 배포

 

2. 모니터링(Monitor)

- Git 저장소와 클러스터 상태를 모니터링

 

3. 변화 감지(Detect Drift)

- Git 에 저장된 내용과 클러스터 간의 구성 차이 감지

 

4. 반영(Take Action)

- Git 에 저장된 내용으로 클러스터에 반영 (롤백 또는 3-way diff) 실행
- Git 저장소만을 신뢰의 원천으로 봄
- 모든 변경은 Git Workflow 를 통해 수행

 

쿠버네티스 애플리케이션 배포를 위한 Git 저장소

 

쿠버네티스에서는 애플리케이션 배포를 위해 최소 2개 이상의 Git 저장소가 필요합니다.

 

* 소스코드 보관용 Git

- 애플리케이션 소스 코드 보관
- 빌드 대상 저장소 (컨테이너 이미지 생성, Push)

 

* 쿠버네티스 매니페스트 보관용 Git

- CD 도구(ArgoCD, FluxCD) 등이 바라보는 Git 저장소
- 배포 대상 (Kubernetes Manifest, Helm Chart, Kustomize)

 

 

1.5. DevOps 및 기민성

 

DevOps 가 애자일(Agile) 소프트웨어 개발 프로세스를 보완한다면,

GitOps 는 인프라 자동화 및 애플리케이션 수명 주기 관리 측면에서 DevOps 를 보완합니다.

 

애자일 방법론의 가장 중요한 개념은 요구 사항을 식별하고 충족하는 데까지걸리는 시간인 납기(Lead Time) 를 줄인다는 것입니다.

 

Contents

포스팅 주소를 복사했습니다