BLOG

[2021 AWS SUMMIT Session Review] 컨테이너 및 서버리스를 위한 효율적인 CICD 아키텍처 구성하기
작성일: 2021-08-31

블로그 콘텐츠의 내용 및 의견은 AWS SUMMIT 2021의 세션을 리뷰한 내용입니다. 

 

이번 포스팅에서는 flex팀의 EKS를 활용해 빌드 및 개발/테스트 속도를 개선하는 방법을 소개하고 자 합니다.

 

flex팀은 EKS를 플랫폼을 표준화할 수 있으며 다음과 같은 기능들을 지원합니다.

  • Container Orchestrator의 de facto
  • Control Plane 관리
  • 리소스 관리 => Infra :Terraform / Application: Helm
  • 보안 => Infra: IAM / Application: EKS의 RBAC

 

 

1.CI 성능 개선 사례

 

기존에 사용하던 Codebuilder

기존에 사용하던 Codebuilder는 트리거시키면 큐에 대기 후 Provisioning, 이후 소스 코드를 다운 받고 빌드를 실행하는 과정으로 되어있습니다. Codebuild는 서버리스 리소스로 재사용이 힘듭니다. Provisioning의 경우 재사용시 시간 소요가 없고 Local Cache의 경우 Docker layer로 특정 경로의 Cache가 가능하지만 재사용시 사용 가능합니다. S3 Cache는 작은 사이즈의 아티팩트를 Cache하는 용도로 Gradle,와 Docker layer등은 부적합합니다. 이러한 Codebuilder를 사용하는 것은 평균적으로 11분 30초로 빌드 시간이 오래 걸렸습니다.

 

 

EKS와 Jenkins 활용

EKS위에 Jenkins를 올려서 CI를 방법입니다. Statefulset으로 Master Agent를 올리고 연결에 필요한 정보는 configMap이나 secret에 입력하여 Helm Chart로 관리합니다. Statefulset한 Machine이 추가되는 부담은 있으나 항상 Pot이 떠있어서 Provisioning시간을 줄일 수 있으며 pv에 Cache되어 빌드 속도의 향상이 예상됩니다. 실제로도 속도가 향상되었습니다.

 

 

개발/ 테스트 속도 개선 사례

단일 QA환경에서 테스트를 진행하였을 때 문제가 발생했습니다. 이를 위해 각 서비스 별 독립적 개발 환경을 만들어서 속도를 개선했습니다. 또한 Application의 helm chart생성을 통해 Production과 동일한 환경을 Argocd로 배포하여 브랜치 별 환경을 제공했습니다.

 

EKS로 변경 후 배포 파이프라인 속도도 약 70% 개선되었습니다.

 

 

2.  Klocust! EKS Fargate를 활용한, 쉽고 간단한 부하테스트 CLI 도구

DevOps 철학의 올바른 개념적 이해와 철학에 기반한 이상적인 구현을 위해서 DevOps 프로젝트의 목적인 업무 속도와 효율화를 위해 다양한 코드를 공유하고 오픈소스를 개발하고 있습니다.

 

 

Locust

Locust는 오픈소스 로드 테스팅 도구로 Python기반의 테스트 스크립트로 분산 및 확장이 가능한 구조를 가지고 있습니다. 이는 간단한 웹 UI구조로 사용이 용이합니다. 부하테스트를 위한 자원은 쉽고 빠른 Provisioning과 Serverless모델을 사용하는 것이 적합하므로 EKS에 Fargate가 적합합니다.

 

 

Klocust

 

개발 배경은 오픈소스 loadtest 도구는 ec2기반으로 사용하였을 때 비즈니스 속도가 빨라져 ec2 프로비저닝시간이 오래 걸리는 문제가 있었습니다. 이를 위해 쿠버네티스 기반에 locust를 쉽게 구축하고 클러스터링 형태로 개발하는 것을 기획했습니다. 테스트 변경 시  configMap만 업데이트 후 k8s만 재가동하면 되므로 빠른 적용이 가능합니다. klocust는 분산 로드테스팅 도구인 locust를 k8s에 쉽게 배포하고 관리하는 CLI 도구입니다. klocust init 명령어는 locust 를 구성하는 설정 yaml 과 locust 기본 python 코드를 생성하며 klocust init $name 명령어로, klocust 구성을 위한 파일 생성 klocust apply 명령을 통해 실제로 kubernetes 구성요소를 생성, locust 배포합니다. 배포 이후 아래 load test UI에서 테스트를 할 수 있습니다.

발표자료URL: https://www.slideshare.net/awskorea/configuring-an-efficient-cicd-architecture-for-container-and-server-leases

 

*해당 블로그는 메가존클라우드 임직원이 AWS SUMMIT 2021 “컨테이너 및 서버리스를 위한 효율적인 CICD 아키텍처 구성하기” 세션을 보고 작성한 글로 발표 자료 및 자세한 내용은 위의 URL에서 확인하실 수 있습니다.