일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Buffered channel
- GoF 디자인패턴
- 디자인패턴
- Infra
- go
- notification system
- UnBuffered channel
- 대규모 시스템 설계
- apollo router
- GoF
- tenneling
- 배포 파이프라인
- AWS
- Golines
- Kubernetes
- goland
- Logrus
- intellij ide
- 컴포지트패턴
- Intellij
- Bastion Server
- 윈도우키보드
- body size
- 배포 프로세스
- http 413
- golang
- Helm V3
- System Design
- gitops
- AWS Infra
- Today
- Total
Fall in IT.
CI & CD 배포 파이프라인 구축 본문
이 문서는 필자의 프로젝트에서 사용 중인 배포 파이프라인에 대해 설명합니다.
배포 파이프라인은 Kubernetes, ArgoCD, AWS ECR 등의 클라우드 및 컨테이너 기술을 활용하여 애플리케이션을 효율적으로 배포하고 관리하기 위해 구성되었습니다.
사전 지식
ArgoCD란?
ArgoCD는 Kubernetes 애플리케이션을 GitOps 방식으로 배포하고 관리하는 도구입니다. 애플리케이션의 선언적 설정 파일을 Git 리포지토리(혹은 OCI 레지스트리)에서 가져와서 Kubernetes 클러스터에 동기화하며, Git 상태와 클러스터 상태 간의 차이를 모니터링하여 자동화된 배포를 수행합니다.
GitOps란?
GitOps는 애플리케이션 배포 및 인프라 관리를 Git을 중심으로 수행하는 방법론입니다. 즉, 애플리케이션의 선언적 설정 파일과 인프라 상태를 Git 리포지토리에서 관리하고, 이를 통해 시스템을 자동으로 구성하거나 변경하는 방식입니다. GitOps는 CI/CD 파이프라인과 인프라 관리를 일관되게 유지하는 데 사용됩니다.
GitOps의 동작 원리
- Git에 애플리케이션 코드와 인프라 설정 저장:
- 애플리케이션의 설정 파일(Kubernetes 매니페스트, Helm 차트 등)과 인프라 설정 파일(Terraform, Ansible 등)은 모두 Git 리포지토리에 저장되어 관리됩니다.
- Git 리포지토리와 클러스터 상태 동기화:
- GitOps 도구(예: ArgoCD)가 Git 리포지토리를 주기적으로 모니터링하여 최신 변경 사항을 감지합니다.
- 변경 사항 자동 적용:
- 리포지토리에 변경 사항이 발생하면 GitOps 도구는 이를 감지하고 자동으로 Kubernetes 클러스터에 반영합니다.
- 실시간 상태 확인 및 롤백:
- GitOps 도구는 클러스터와 Git 상태를 지속적으로 비교하여 불일치가 발생하면 이를 수정합니다.
- 문제가 발생할 경우 Git 히스토리를 기반으로 과거 버전으로 롤백할 수 있습니다.
OCI란?
OCI(Open Container Initiative)는 컨테이너 기술에 대한 표준을 정의하는 프로젝트입니다. Docker와 같은 컨테이너 런타임을 위한 표준을 제공하며, 최근 Helm 3.7 버전부터 Helm 차트를 OCI 레지스트리에 저장 및 관리할 수 있게 되었습니다. 이를 통해 도커 이미지와 동일한 레지스트리에서 Helm 차트를 관리할 수 있습니다.
배포 환경
- Kubernetes: AWS EKS(Elastic Kubernetes Service)를 사용하여 Kubernetes 클러스터를 관리
- Docker Registry: AWS ECR(Elastic Container Registry)을 사용하여 컨테이너 이미지 및 Helm 차트를 저장
- ArgoCD: Kubernetes에 GitOps 방식으로 애플리케이션을 배포하고 관리
사용 기술
- GitHub Actions: CI/CD 파이프라인을 자동화하는 데 사용
- Docker: 애플리케이션 컨테이너화 및 빌드
- Helm: Kubernetes 애플리케이션 배포를 위한 패키징 및 배포 도구. Helm 3.7부터는 OCI 레지스트리와 연동하여 Docker 이미지와 동일한 레지스트리에서 Helm 차트를 관리 가능
Helm과 OCI 사용
Helm 3.7 버전 이후부터 Helm 차트를 OCI 레지스트리에 저장할 수 있습니다. 이를 통해 도커 이미지와 함께 Helm 차트를 AWS ECR에서 관리하고, Kubernetes 클러스터에 배포할 수 있습니다. ECR을 사용하면 하나의 중앙 레지스트리에서 컨테이너 이미지와 Helm 차트를 모두 관리할 수 있는 장점이 있습니다.
배포 프로세스
- PR(Pull Request) 이벤트:
- Pull Request가 발생하면 test job이 실행되어 테스트 코드가 수행됩니다.
- 이 단계에서는 코드 품질을 보장하기 위한 유닛 테스트가 자동으로 동작합니다.
- Tag Push 이벤트:
- develop_v* 또는 release_v* 형식의 태그가 푸시되면 build job과 deploy job이 실행됩니다.
- 각각의 태그는 배포 준비가 완료된 코드를 구분하기 위한 기준점입니다.
- Test Job:
- Pull Request가 들어오면 실행되며, 프로젝트 내의 테스트 코드가 동작합니다.
- 코드의 안정성과 정확성을 검증하는 단계입니다.
- Build Job:
- 소스코드 빌드: Git 리포지토리에서 소스코드를 가져와 Dockerfile을 기반으로 Docker 이미지를 빌드합니다.
- 이미지 태그 생성: 유니크한 값(버전 태그)과 latest 두 가지 태그로 이미지를 생성합니다.
- 유니크한 값은 롤백을 쉽게 하기 위한 버전 관리 목적.
- 이미지 푸시: 빌드된 이미지를 AWS ECR에 푸시합니다.
- 이를 통해 이미지를 저장하고 이후 배포 단계에서 사용할 수 있도록 준비합니다.
- Deploy Job:
- Helm 차트 패키징: 현재 Git 태그를 기반으로 Helm 차트를 패키징합니다.
- Helm 앱 버전은 Git 태그에 맞춰 설정하여 배포 버전을 관리합니다.
- ECR에 Helm 차트 푸시: 패키징된 차트를 ECR(OCI 레지스트리)에 푸시합니다.
- ArgoCD를 통한 배포: ArgoCD를 사용하여 ECR에 저장된 Helm 차트를 Kubernetes 클러스터에 배포합니다.
- ArgoCD는 ECR에서 최신 차트를 가져와 Kubernetes에 애플리케이션을 배포하고, GitOps 방식으로 클러스터 상태를 관리합니다.
- Helm 차트 패키징: 현재 Git 태그를 기반으로 Helm 차트를 패키징합니다.
배포 프로세스 요약
- PR 발생: 테스트 코드를 실행하여 코드 검증
- Tag Push 발생: build job과 deploy job 실행
- Docker 이미지 빌드 및 ECR 푸시
- Helm 차트 패키징 및 ECR 푸시
- ArgoCD를 통한 Kubernetes에 배포
배포 프로세스의 장점
- GitOps 기반 배포: ArgoCD를 사용하여 Git 리포지토리의 선언적 구성 파일을 Kubernetes에 배포 및 관리하여 인프라의 일관성을 유지
- 롤백 기능: ECR에 저장된 유니크한 Docker 이미지 태그를 통해 과거 버전으로의 롤백이 용이
- 통합 관리: ECR에서 Docker 이미지와 Helm 차트를 통합 관리함으로써 배포 간소화 및 관리 편의성 제공
- CI/CD 자동화: GitHub Actions를 통한 빌드, 테스트, 배포 과정의 자동화로 개발 생산성 향상
이와 같은 파이프라인을 통해 배포의 안정성과 효율성을 높이며, 애플리케이션의 일관된 배포를 유지할 수 있습니다.
'기타' 카테고리의 다른 글
프론트엔드에서 발생한 HTTP 413 상태 코드 이슈 해결하기 (0) | 2024.10.27 |
---|---|
맥 터미널에서 Goland(IntelliJ IDE) 실행방법 (0) | 2024.06.12 |
윈도우 PC용 키보드 MAC에서 사용하는 방법 (ver. Sonoma) (0) | 2024.04.23 |
DIP(Dependency Inversion Principle)에 관하여 (0) | 2024.03.09 |
도커, 도커 컴포즈 도대체 왜 필요한데? (0) | 2023.12.16 |