MSA 쿠버네티스 배포 파이프라인
코드너리 | 2022. 03. 07
CI/CD
MSA
사용된 기술:
간단 요약
모든 빌드와 배포는 Spinnaker pipeline을 사용하며, 대부분의 경우 Web UI로 해당하는 pipeline을 trigger 하면서 시작됩니다. HTTP나 git webhook을 사용하는 것도 가능합니다. 예를 들어, 새로운 데이터를 사용하여 주기적으로 학습시키는 kubeflow 기반의 microservice의 경우 모델 검증 후 webhook을 사용하여 자동으로 pipeline을 trigger 합니다.
기본적인 pipeline은 다음과 같은 단계로 되어있습니다.
- Trigger: Docker image 버전, source code repo의 branch와 values.yaml이 존재하는 repo의 branch를 입력합니다. Production의 경우 master branch 외에는 배포할 수 없도록 하여 혹시 모를 장애를 예방하고 있습니다.
- Build: Pipeline의 첫 번째 stage입니다. Jenkins를 호출하여 build를 시작합니다.
- Harbor에 동일한 이름과 버전의 이미지가 존재하는지 확인하여 중복 build를 방지합니다.
- Vault에 로그인하여 deploy key를 가져와 git repository를 clone 합니다. 이때, Jenkins EC2 node의 instance role을 사용하여 로그인합니다. Docker image를 build합니다.
- Docker BuildKit을 지원하며, maven 등 자주 사용하는 build process는 속도 향상을 위한 별도 명령을 먼저 실행합니다.
- 마지막으로 생성된 Docker image를 Harbor에 push하고, 로컬에서는 삭제합니다. - Bake Manifest: Harbor에서 Helm chart를, git에서 values.yaml을 가져와서 Kubernetes YAML manifest를 생성합니다.
- Deploy: 앞서 생성된 manifest를 apply하고, rolling update가 끝날 때까지 상태를 추적합니다.