1. 개요
CI/CD Pipeline 환경을 구성하기 위해서 Jenkins 또는 Gitlab과 같은 도구들을 많이 사용합니다.
수많은 빌드들이 CI/CD Pipeline에서 동시다발적으로 수행되어야 하기 때문에 auto-scaling을 구성하기 위해서
AWS의 ECS 또는 EKS 클러스터 기반으로 Worker(Jenkins의 경우 Agent, Gitlab의 경우 Runner라고 부릅니다.)를 구성하면 편리합니다.
Fargate 기반으로 구성할 경우 비용 효율적으로 사용할 수 있는 장점도 생깁니다.
하지만 Fargate 기반으로 Docker Build를 수행해야 하는 경우 Docker 명령 실행 시 문제가 발생을 합니다.
이 문제의 원인과 해결하기 위한 방법에 대해서 알아보겠습니다.
2. 원인과 해결 방안
2.1 Fargate 기반 Docker 명령 실행 시 문제의 원인
Fargate는 Container를 AWS Managed로 제공하는 서비스입니다.
Container 내부에서 Docker 명령을 실행하기 위해서는 Docker 명령 실행을 위한 추가적인 권한이 필요합니다.
Docker 실행 시 privileged 옵션을 추가하여 사용하는 것을 Docker in Docker라고 부릅니다.
2.2 Docker in Docker(DIinD)로 해결이 가능할까?
Container 내부에서 Docker 데몬을 실행하기 위한 방법입니다.
아래와 같이 도커 실행 시 –privileged 옵션을 추가하여 Docker in Docker를 사용할 수 있습니다.
Docker in Docker로 사용할 경우 Host의 권한을 Docker Container에게도 주는 것이기 때문에 보안 문제가 발생할 가능성이 존재합니다.
또한 Fargate로 구성하는 경우 privileged를 허용하지 않기 때문에 다른 방식으로 해결해야 합니다.
2.3 Docker Out of Docker(DooD)로 해결이 가능할까?
host의 docker socket을 에이전트 컨테이너에 -v 옵션을 통해 공유하고, host의 docker daemon을 이용해 container의 docker 명령을 실행하는 방식을 말합니다. docker socket은 docker cli 명령을 docker daemon에게 전달하는 역할을 합니다. Container에게 privileged 권한을 주지 않고 실행할 수 있습니다.
하지만 Fargate로 구성하는 경우에는 host의 docker socket을 사용할 수 없습니다.
2.4 Kaniko를 이용하여 해결해 보자.
Kaniko는 Container Build Tool로 Container 내부 or Kubernetes에서 동작 가능합니다.
Docker Daemon 없이 Container 빌드가 가능한 장점이 있어서, Fargate 환경에서도 Container 빌드가 가능해집니다.
3. Kaniko 구성 방안
3.1 아키텍처
3.2 Kaniko 장점
● Docker Build Cache를 지원하기 때문에 Container 빌드 속도가 빠릅니다.
● 빌드 대상의 Language에 대한 제약이 없습니다.
3.3 Kaniko 단점
● Dockerbuild에 사용하는 Artifact를 S3에 Upload 해야 하기 때문에 Upload 시간이 추가적으로 필요합니다.
● Kaniko 실행을 위한 별도의 Container를 기동해야 합니다.
3.4 구성 방법
3.4.1 구성 준비
● EKS에서 Kaniko가 사용할 Namespace (선택 사항)
● ECR credential 정보가 저장될 Configmap (필수)
● Kaniko Yaml ( 필수)
● 응용 프로그램 저장용 ECR Repo
● 캐시 저장용 ECR Repo
4. 마무리
Fargate 기반으로 CI/CD Pipeline을 구축할 때의 문제와 원인에 대해 알아보고, Kaniko를 사용해서 해결하는 방법까지 알아보았습니다.
Kaniko 외에도 Container 내부에서 Docker 명령을 수행하지 않고 Container 이미지 빌드를 하기 위한 다양한 툴들이 나오고 있습니다. (JIB, BuildPack 등) 프로젝트 상황에 맞게 툴을 선택해서 사용하시면 Fargate를 더욱 안전하고 편리하게 사용할 수 있습니다.