배포 파이프라인과 쿠버네티스
코드너리 | 2022. 03. 07
쿠버네티스 구조
CI/CD
사용된 기술:
간단 요약
- SCM:
Git으로 애플리케이션 코드를 관리하며 Gitflow 전략을 사용합니다. - Jenkins Pipeline:
- Prepare
- Check Environment
- 배포 과정에서 필요한 파라미터를 설정하고 기존 환경 및 변경될 환경을 검증합니다.
- Warm Up
- 후속 빌드 과정에서 사용할 Jenkins Agent Pod들을 미리 병렬로 구동하여 전체 파이프라인 실행 시간을 약간이나마 줄입니다.
- Check Environment
- Build
- Checkout
- Git Repository의 코드를 fetch 하고 배포할 브랜치로 checkout 합니다.
- Compile
- Gradle을 이용하여 build 합니다.
- Jib을 사용하여 애플리케이션의 컨테이너 이미지를 생성합니다. Jib을 이용하면 Docker daemon 없이 Docker 혹은 OCI규격의 컨테이너 이미지를 생성할 수 있습니다.
- Checkout
- Build Image
- Kaniko로 Docker Image를 생성하여 AWS ECR에 Push 합니다. Kaniko는 각 Layer 별 캐싱을 통해 Image 생성 시간을 단축합니다.
- Image Layer
- Base(centos/8)
- JDK
- 서비스 공통 설정(구동 스크립트 등)
- Compile 단계에서 생성한 애플리케이션 컨테이너 이미지
- Deploy
- Helm을 사용하여 애플리케이션을 배포합니다. 초기 세팅 시에는 애플리케이션의 여러 모듈을 manifest로 테스트하고, 정리가 되면 Helm chart로 패키징하여 관리합니다.
- Prepare
- 쿠버네티스와 프로메테우스:
- AWS EKS
- AWS EKS를 사용하며 관리형 서비스에서 얻을 수 있는 이점을 최대한 사용합니다. 특정 서비스를 깊이 사용하다 보면 그 서비스에 매몰되는 것을 항상 걱정하게 되는데요. 계속 상황을 보면서 유연하게 선택해야 합니다. 얻을 것은 얻고 포기할 것은 어느 정도 포기해야 합니다.
- Prometheus
- Prometheus를 사용하여 쿠버네티스 metric을 모니터링합니다.
- Grafana
- Grafana를 구축하여 현재 쿠버네티스의 상태를 Dashboard를 통해 모니터링합니다.(Pod, Container의 CPU, Memory, Network, Count 등)
- AWS EKS