본문 바로가기

Platform Engineering

[GitOps] GitOps란 무엇인가?

728x90
반응형

GitOps는 Git을 중심으로 한 운영 방식으로, 인프라 및 애플리케이션 배포를 코드로 관리하는 DevOps의 한 방법론입니다. GitOps는 모든 변경 사항을 Git 리포지토리에 저장하고, 이를 기반으로 시스템 상태를 관리 및 배포합니다. 이 접근 방식은 일관성, 추적 가능성, 자동화된 배포, 협업 강화 등을 통해 소프트웨어 개발 및 운영의 효율성을 높입니다.

GitOps의 핵심 원칙

GitOps의 핵심 원칙은 선언적 인프라 관리, 버전 관리 시스템으로서의 Git, 자동 동기화 및 배포, 모니터링 및 검증으로 구성됩니다. 이 원칙들은 GitOps의 효율적이고 일관된 운영을 보장하며, DevOps 문화의 발전을 촉진합니다. 아래에 각각의 원칙을 자세히 설명하겠습니다.

1. 선언적 인프라 관리 (Declarative Infrastructure Management)

정의: 시스템의 목표 상태를 코드로 정의하여, 인프라와 애플리케이션의 현재 상태와 목표 상태를 명확히 구분합니다.

예시: Kubernetes에서 YAML 파일로 배포할 애플리케이션의 구성(디플로이먼트, 서비스, 인그레스 등)을 정의합니다. 이러한 파일들은 Git 리포지토리에 저장되고, 시스템의 원하는 상태를 명시적으로 기술합니다.

장점:

  • 일관성: 모든 환경에서 동일한 구성으로 배포를 보장합니다.
  • 가독성: 인프라 상태를 명확하게 이해하고 변경할 수 있습니다.

2. 버전 관리 시스템으로서의 Git (Version Control as a Single Source of Truth)

정의: Git 리포지토리를 통해 모든 인프라 및 애플리케이션 변경 사항을 추적하고 관리합니다.

예시: 모든 인프라와 애플리케이션 설정 파일을 Git에 커밋하고, 변경 사항을 관리합니다. 이를 통해 어떤 변경이 언제, 누구에 의해 이루어졌는지 추적할 수 있습니다.

장점:

  • 추적 가능성: 변경 이력을 쉽게 추적하고 감사할 수 있습니다.
  • 협업 강화: 여러 팀원이 동시에 작업하고 코드 리뷰를 통해 품질을 유지할 수 있습니다.

3. 자동 동기화 및 배포 (Automated Synchronization and Deployment)

정의: Git 리포지토리에 변경 사항이 발생하면 자동화된 도구가 이를 감지하고 시스템에 적용합니다.

예시: Argo CD 또는 Flux와 같은 도구를 사용하여, Git 리포지토리에 새로운 커밋이 발생하면 이를 자동으로 Kubernetes 클러스터에 배포합니다.

장점:

  • 효율성: 수동 배포 과정을 제거하고, 배포 속도를 높입니다.
  • 안정성: 자동화된 배포로 인한 오류를 줄이고, 안정적인 배포를 보장합니다.

4. 모니터링 및 검증 (Continuous Monitoring and Validation)

정의: 시스템의 실제 상태를 지속적으로 모니터링하고, 목표 상태와 일치하는지 검증합니다. 만약 불일치가 발생하면 이를 자동으로 수정합니다.

예시: Kubernetes 클러스터의 상태를 모니터링하고, 선언적 구성 파일과 실제 상태를 비교합니다. 만약 차이가 발견되면, 자동으로 원래 상태로 복구합니다.

장점:

  • 신뢰성: 시스템의 상태를 지속적으로 확인하고, 문제 발생 시 빠르게 대응할 수 있습니다.
  • 자동 복구: 선언된 상태와 실제 상태의 불일치가 발생하면 자동으로 수정하여 시스템의 일관성을 유지합니다.

 

GitOps 주요 장점

GitOps는 여러 가지 이점을 제공하여 DevOps 문화를 강화하고, 인프라와 애플리케이션 배포의 효율성을 높입니다. 주요 이점들은 다음과 같습니다:

1. 일관성 및 재현성 (Consistency and Reproducibility)

설명: 선언적 인프라와 애플리케이션 구성을 통해 모든 환경(개발, 테스트, 프로덕션 등)에서 일관된 설정을 유지합니다.

장점:

  • 환경 간 일관성: 동일한 코드 기반으로 모든 환경을 설정하여, 환경 간 불일치로 인한 문제를 방지합니다.
  • 쉽게 재현 가능: 인프라와 애플리케이션 상태를 코드로 관리하므로, 새로운 환경을 신속하게 설정하거나 기존 환경을 쉽게 복원할 수 있습니다.

2. 추적 가능성 및 감사 가능성 (Traceability and Auditability)

설명: 모든 변경 사항이 Git 리포지토리에 커밋되어 추적 가능하며, 변경 내역을 명확히 기록할 수 있습니다.

장점:

  • 변경 내역 추적: 누가, 언제, 어떤 변경을 했는지 명확히 파악할 수 있습니다.
  • 감사 가능성: 규제 준수 및 보안 요구 사항에 맞추어 변경 기록을 감사할 수 있습니다.

3. 자동화된 배포 (Automated Deployment)

설명: Git에 커밋된 변경 사항을 자동으로 감지하여, CI/CD 파이프라인을 통해 시스템에 배포합니다.

장점:

  • 배포 속도 향상: 수동 배포 과정을 제거하여 배포 속도를 크게 높입니다.
  • 오류 감소: 자동화된 배포로 인해 수동 실수로 인한 오류를 줄일 수 있습니다.

4. 롤백 기능 (Rollback Capabilities)

설명: 문제가 발생할 경우, Git의 이전 커밋으로 쉽게 롤백할 수 있습니다.

장점:

  • 빠른 복구: 문제가 발생했을 때 신속하게 이전 상태로 복구하여 가동 중단 시간을 최소화합니다.
  • 안전성 향상: 안정적인 이전 버전으로 돌아갈 수 있으므로 배포에 대한 부담을 줄입니다.

5. 협업 강화 (Improved Collaboration)

설명: 코드 리뷰, 병합 요청 등을 통해 팀 간 협업을 원활하게 할 수 있습니다.

장점:

  • 코드 품질 향상: 코드 리뷰 과정을 통해 더 높은 품질의 코드를 유지할 수 있습니다.
  • 팀 간 협업: 여러 팀원이 동시에 작업할 수 있으며, 코드 리뷰와 병합 요청을 통해 변경 사항을 효과적으로 관리할 수 있습니다.

6. 보안 강화 (Enhanced Security)

설명: GitOps는 접근 제어와 코드 리뷰 프로세스를 통해 보안을 강화합니다.

장점:

  • 세밀한 접근 제어: Git의 접근 제어 기능을 사용하여, 인프라와 애플리케이션 변경 권한을 세밀하게 관리할 수 있습니다.
  • 변경 검토: 모든 변경 사항을 코드 리뷰를 통해 검토하여, 보안 취약점을 사전에 차단할 수 있습니다.

7. 지속적인 모니터링 및 자동 복구 (Continuous Monitoring and Automatic Reconciliation)

설명: 시스템의 실제 상태를 지속적으로 모니터링하고, 목표 상태와 일치하는지 검증합니다. 불일치가 발생하면 자동으로 수정합니다.

장점:

  • 신뢰성 향상: 시스템의 상태를 지속적으로 확인하고, 문제 발생 시 자동으로 수정하여 안정성을 높입니다.
  • 문제 예방: 목표 상태와 실제 상태의 차이를 신속히 감지하고 수정하여, 문제를 사전에 예방합니다.

 

GitOps의 파이프라인 구성 방식 

 

PUSH 방식

https://beer1.tistory.com/39

PUSH 방식은 주로 CI 서버에서 배포를 트리거하여 클러스터에 변경 사항을 적용하는 방식입니다. 이 방식은 일반적으로 다음과 같은 흐름을 따릅니다:

  1. 개발자가 Git 리포지토리에 코드 변경 사항을 커밋합니다.
  2. CI 서버(CircleCI, Jenkins, GitLab CI 등)가 변경 사항을 감지하고, 빌드 및 테스트를 수행합니다.
  3. CI 서버가 빌드가 성공적으로 완료되면 변경 사항을 클러스터에 배포합니다. 이는 클러스터의 API 서버에 직접 요청을 보내거나, kubectl 등을 사용하여 이루어집니다.

장점:

  • 즉시성: 변경 사항이 푸시되자마자 배포가 트리거되어 빠른 피드백이 가능합니다.
  • 컨트롤: CI 서버에서 배포 과정을 세밀하게 제어할 수 있습니다.

단점:

  • 보안: CI 서버가 클러스터에 대한 접근 권한을 가지고 있어야 하므로, 잘못된 설정이나 보안 문제가 발생할 수 있습니다.
  • 복잡성: CI 서버 설정과 관리가 복잡할 수 있습니다.

 

PULL 방식

https://beer1.tistory.com/39

PULL 방식은 클러스터 내부의 에이전트가 Git 리포지토리를 지속적으로 모니터링하고, 변경 사항이 있을 때 이를 클러스터에 적용하는 방식입니다. 이 방식은 다음과 같은 흐름을 따릅니다:

  1. 개발자가 Git 리포지토리에 코드 변경 사항을 커밋합니다.
  2. 클러스터 내부의 GitOps 에이전트(예: Argo CD, Flux)가 Git 리포지토리를 주기적으로 모니터링합니다.
  3. 에이전트가 변경 사항을 감지하면, 자동으로 클러스터에 해당 변경 사항을 적용합니다.

장점:

  • 보안: 클러스터 내부에서 모든 작업이 이루어지므로, 외부 CI 서버가 클러스터에 접근할 필요가 없습니다.
  • 단순성: Git 리포지토리와 클러스터 상태를 동기화하는 과정이 간단하고 일관적입니다.
  • 신뢰성: 선언적 구성 파일을 기반으로 클러스터 상태를 유지하므로, 안정성과 일관성이 높아집니다.

단점:

  • 지연 시간: 에이전트가 주기적으로 리포지토리를 확인하므로, 배포가 실시간으로 이루어지지 않을 수 있습니다.
  • 유연성: CI 서버에서 제공하는 다양한 빌드 및 배포 옵션을 활용하기 어려울 수 있습니다.
728x90
반응형

'Platform Engineering' 카테고리의 다른 글

플랫폼 엔지니어링에 대해 알아보기  (0) 2024.02.05