이번 프로젝트에서 CI/CD 파이프라인을 구축하기 위해서 Flask로 띄운 서버들의 소스코드를 도커 이미지로 띄어서 ECR (Amazon Elastic Container Registry) 레포지토리에 올리는 것을 담당하였습니다. 이 과정에서 마주한 이슈들을 기록하려 합니다.
Mac에서 빌드한 이미지가 EKS 파드로 배포되지 않는 이유
처음 도커로 이미지를 빌드하여 배포하는 테스트를 진행할 때는 서비스를 배포한 환경에서 진행한 것이 아니라 Mac OS 로컬 환경에서 테스트를 진행해 보았습니다. 그러나 Mac에서 빌드한 이미지가 EKS에서 Pod로 배포되지 않는 오류를 맞이 했습니다. 문제 분석 결과, 소프트웨어를 구동하는 하드웨어 아키텍처가 다를 경우 빌드한 도커 이미지를 배포할 때, 오류가 발생하는 사실을 알게되었습니다.
즉, 필자의 Mac OS의 경우 M1칩 모델로 ARM 하드웨어 아키텍처를 기반으로 하고, EKS는 x86-64 하드웨어 아키텍처를 기반으로 하여 플랫폼 충돌이 일어난 것입니다.
해결
기존에 Mac 환경에서 이미지를 빌드할 때는 평소와 동일하게 아래와 같은 이미지를 사용하였습니다.
docker build -t test:test .
그러나 빌드한 이미지가 다른 하드웨어 아키텍처 환경에서 사용될 경우 --platform 옵션을 추가해 문제를 해결하였습니다.
docker buildx build --platform linux/amd64 -t test:test .
맥OS 환경에서 빌드된 Docker 이미지를 Amazon EKS에서 파드로 띄우려 할 때 발생하는 문제는 소프트웨어를 구동하는 하드웨어 아키텍처의 차이로 인해 발생할 수 있습니다. 이를 정리해보겠습니다:
무거운 도커 이미지를 경량 시키는 법 (.dockerignore)
본 프로젝트에서는 한정된 지원금 안에서 AWS 자원을 사용해야 됐기 때문에 서비스를 개발하는 EC2의 용량을 최소화하여 개발에 들어갔습니다. 그래서 EC2 서버에서 개발된 서비스를 도커 이미지로 빌드할 때, 용량이 초과하는 문제를 맞이했습니다.
문제를 해결하기 위해서 단순하게 EC2의 메모리를 늘리기에는 EKS 클러스터를 배포하고 있는 상황에서 부담이 되었습니다. 그러던 중 .dockerignore라는 개념을 알게되었습니다. 이를 통해서 EC2의 메모리를 늘리지 않고, 최소한의 자원으로 이미지를 빌드할 수 있었습니다.
'개발 > SmileStock 😃📈' 카테고리의 다른 글
[프로젝트 회고] CI/CD를 적용하기 위한 노력, 과금 문제 (0) | 2024.05.01 |
---|---|
[개발 이슈] 성능은 유지하며 모델 학습 시간은 단축하다 (0) | 2024.05.01 |
[개발 이슈] API 응답 소요시간 1분 (0) | 2024.05.01 |
[프로젝트 회고] 소통에 나이 차이는 중요하지 않다 (0) | 2024.05.01 |
[프로젝트 회고] 주식 종가 예측 개발 회고 (0) | 2024.04.26 |