-
k8s와 gitlab(+ArgoCO)을 이용한 CI/CD 모험기 - 손주호세미나, 영상 요약정리 2023. 1. 29. 00:01728x90
https://www.youtube.com/watch?v=-hO1m__aLu8
손주호님의 영상을 요약한 내용입니다.
CI/CD인프라 구성 배경
컨테이너화 된 배포를 진행하고 있었지만 오케스트레이션을 따로 구성하진 않은 상황이었습니다.
다양한 잠재적인 위험요소가 있었습니다.
- 특정 태그를 전달받아 해당 태그 이미지를 배포하는 형식이라 휴먼에러가 발생할 수 있었습니다.
이외에도 여러 이슈가 있었습니다.
1개의 VM에 1개의 컨테이너를 띄워서 사용하고 있었습니다.
이때 VM 스펙이 비해 컨테이너 리소스가 많이 낭비되고 있었습니다.
DEV용 테스트 코드를 빌드하더라도 Deploy는 운영자에게 요청해야 하는 작업이 비효율적이었습니다.
CI구축
CI를 위해서는 gitlab CI를 사용했습니다.
이때 gitlab-ci.yml에 정의된 동작을 실행시키기 위해서 gitlab RUNNER를 사용했습니다.
컨테이너 이미지 빌드를 위해서는 Kaniko를 활용하여 컨테이너 위에서도 이미지를 빌드할 수 있도록 합니다.
이렇게 만들어진 이미지는 Harbor라는 private image Registy에 저장됩니다.
CD구축
k8s를 통해 서비스가 구동되는 Backgound를 구성했습니다.
Argo를 통해 k8s에 애플리케이션 배포를 도와주기 위해 원격지 manifest 저장소를 이용해 GUI로 배포했습니다.
kutomize를 사용하여 서비스 manifest를 하나의 kustomize 묶음으로 관리 및 배포를 가능하게 합니다.
Argo Rollout을 통해 blue-green, canary와 같은 배포 전략의 자동화를 위해 사용했습니다.
구축된 CI/CD 예시
하나의 거대 클러스터 안에 각각의 환경을 네임스페이스로 구분하였습니다.
Dev 환경은 Auto로 구성되어 있으며 QA~Live 환경은 별도의 관리자의 개입이 필요하도록 설정되어 있습니다.
얻게 된 성과
- 환경 별 설정 파일을 별도 Repo에서 관리 및 적용
- 환경 별 CONTAINER IMAGE를 하나로 통합
- 환경 별 ci/cd pipeline을 하나로 통합
- Rolling Update의 자동화
- 하나의 머신에 N개의 컨테이너로 비용 효율화
- 개발자 스스로 pipeline 수정 및 적용 가능 함으로 인한 배포 및 테스트의 속도 상승
'세미나, 영상 요약정리' 카테고리의 다른 글
ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 (1) 2023.04.23 천만 사용자를 위한 AWS 클라우드 기반 웹 서비스 확장하기1 (0) 2023.03.30 클라우드 환경에서의 Kafka 운영기 (0) 2023.01.23 고품격 Kotlin 개발: 테스트 코드를 우아하게 작성하는 방법 (0) 2023.01.10 Kotlin Coroutines 톺아보기 (0) 2022.12.28