[DevOps] 쿠버네티스 도입과 CI/CD에 대해서

2해승·2024년 12월 20일

쿠버네티스?!

목록 보기
13/16

쿠버네티스를 공부하면서 이전 프로젝트인 칸반보드의 아키텍처에 쿠버네티스를 적용하려고 하니 기존의 CI/CD 환경이 쿠버네티스 환경에 적합하지 않아 새로운 배포 방식에 대해 찾아보았다.

기존 프로젝트의 아키텍처

[DevOps]칸반보드 인프라 개선기 3탄

  • CI 단계: 소스 코드 변경 사항을 자동으로 빌드하여 컨테이너 이미지를 생성
  • CD 단계: 생성된 이미지를 Docker Hub에 푸시하고 배포

통상적으로 많이 쓰이는 파이프라인을 구축하여 사용하고 있었으며 ECS를 도입함으로써 최종적으로 불편한 사항이 개선되도록 구성했었다. 작은 규모의 단일 애플리케이션으로 구성되어 있어 ECS의 간단한 배포와 관리 워크플로우가 적합하다고 판단했기 때문이다.


쿠버네티스 도입과 CI/CD 구축

칸반보드가 모놀리식 프로젝트인데도 불구하고 쿠버네티스를 도입하게 된 이유는 공부 목적이기도 하지만 아래와 같은 이유로 쿠버네티스를 적용해보고자 한다.

  1. Self-Healing 및 Auto-Scaling의 고도화

ECS도 Auto-Scaling과 장애 복구 기능을 제공하지만 쿠버네티스는 Pod 단위의 더 세분화된 설정이 가능하여 리소스 활용도를 최적화할 수 있다.

  1. 세부적인 커스터마이징

ECS는 AWS의 관리형 서비스로 제공되기 때문에 빠른 구축과 운영에는 유리하지만 세부적인 커스터마이징이나 고급 기능이 필요한 경우 제약이 있는데 쿠버네티스를 통해 인프라를 프로젝트에 맞춤화 할 수 있다.


쿠버네티스 환경에서의 CI/CD

쿠버네티스를 효율적으로 운영하기 위해서는 쿠버네티스의 확장성, 탄력성 등 특성에 맞는 새로운 CI/CD 환경이 필요하다. 이를 구현하는 데 있어 GitOps 기반의 접근 방식이 주목받고 있다.

위의 그림은 GitOps와 ArgoCD를 활용한 CI/CD 파이프라인의 흐름으로 GitOps의 핵심 원칙에 기반하고 있다. GitOps는 애플리케이션의 선언적 상태를 Git 저장소에 기록하고 배포하는 방식으로 운영 자동화와 환경 간 일관성을 보장하는 데 필수적인 접근 방식이다.

파이프라인에 대한 설명을 하기 이전에 GitOps와 ArgoCD에 대해 먼저 알아보자.

GitOps란?

간단하게 말해서 Git을 활용한 K8S 기반의 애플리케이션을 배포하고 인프라를 관리하는 방식으로 애플리케이션의 배포와 운영에 관련된 모든 요소들을 Git에서 관리한다는 뜻이다.

GitOps 핵심 원칙

  • 선언형 방식
    쿠버네티스에서는 구성을 Manifest 파일로 구성할 수 있는데 이를 Git에 저장하여 관리

  • 버전관리와 불변성
    시스템의 상태는 Git의 버전을 따라감 -> Git에 저장된 Manifest 기준으로 배포되기 때문에 이전 시스템을 배포하고 싶으면 git revert와 같은 명령어를 사용할 수 있음

  • 변경사항 승인과 자동 반영
    한번 선언된 manifest가 Git에 등록되고 관리되기 시작하면 변화가 발생할때마다 자동으로 시스템에 적용되어야 함

  • 지속적 조정 및 알림
    배포에 실패하면 사용자에게 경고할 수 있는 시스템을 마련해야 함

GitOps 배포 전략

  1. Push Based

Git Repo가 변경되었을 때 파이프라인을 실행시키는 구조로, 배포 환경 개수에 영향을 받지 않으며 접속 정보를 추가하거나 수정하는 것만으로도 간단하게 배포 환경을 추가하거나 변경할 수 있다.

  1. Pull Based(= Agent Based)
    Push Based와 비슷할 수 있으나 GitOps Agent(ex-ArgoCD)가 주기적으로 Manifest 저장된 Git에 변경사항이 있는지 확인한다.

ArgoCD란?

ArgoCD는 GitOps를 구현하기 위한 도구로 Manifest 파일의 변경사항을 감시하고 현재 배포된 환경의 상태와 Git에 정의된 Manifest 상태를 동일하게 유지하는 역할을 수행한다.

배포 상태를 Git 커밋으로 관리하기 때문에 특정 커밋으로 간단하게 롤백할 수 있는 장점 또한 있다.



앞으로 구축할 CI/CD 파이프라인에서 중요한 역할을 하는 GitOps와 ArgoCD에 대해 간단히 알아보았는데 이번 도입을 통해 장기적으로 더 나은 시스템으로 발전시키는 기반을 마련해보고자 한다.

다음 시간에는 CI/CD 구축 과정과 함께 더 자세한 내용을 다뤄보도록 하겠다.


[참고자료]
https://gruuuuu.github.io/cloud/argocd-gitops/
https://asuraiv.tistory.com/20
https://f-lab.kr/insight/kubernetes-ci-cd-pipeline-20240906
https://beer1.tistory.com/39

profile
주니어 데브옵스 엔지니어

0개의 댓글