
MacBook M1를 들고 ecr에 이미지를 업로드 했고, 해당 이미지를 사용해 deployment를 생성하는 과정에서 생긴 문제에 대해 기록하려 합니다!
MacBook M1에서 Docker 이미지를 빌드한 뒤, 해당 이미지를 ECR에 푸쉬하고 이를 기반으로 k8s deployment를 생성하려했습니다.
하지만, Pod 생성시 이미지 다운로드 과정에서 오류가 발생했고, Pod는 ImagePullBackOff 상태에 머무르게 되는 상황이었습니다.

kubectl logs -f << Pod 명 >> -n << namespace 명 >>
→ Pod가 생성조차 되지 못했기 때문에 Pod의 log를 확인하는 것이 불가능했습니다.
kubectl describe pod << Pod 명 >> -n << namespace 명 >>
→ k8s의 리소스 상태를 파악하기위해 describe 명령어를 사용해 확인해보았고

⇒ no match for platform in manifest: not found 오류는 이미지는 존재하지만 EKS 노드에서 실행할 수 있는 플랫폼에 맞는 이미지가 없어 생긴 문제였습니다.
MacBook M1 환경에서 이미지를 빌드했기 때문에 생성된 이미지는 inux/arm64 용 이지만, EKS는 일반적으로 linux/amd64이기 때문에 아키텍처가 맞지않아 이미지를 실행할 수 없는 문제로 보였습니다.
# linux/amd64 아키텍처로 이미지 빌드 명령어
# --load 를 통해 local docker에 이미지 저장(이미지는 저장되지만 아키텍처가 달라 error를 띄운다)
docker buildx build --platform linux/amd64 -t << 이미지 명 >> --load .
# EKS push
docker push << 이미지 명 >>
이후 deployment를 생성했더니 정상적으로 pod가 실행되는 것을 확인할 수 있었습니다.

지난 게시글을 통해 컨테이너 이미지의 아키텍처를 정확히 확인하는 것이 얼마나 중요한지 다시 한 번 깨달았습니다.
이번 경험을 통해 EKS의 노드는 기본적으로 linux/amd64 아키텍처를 사용한다는 사실을 알게 되었고, M1 Mac에서 빌드할 경우 별도로 아키텍처를 지정하지 않으면 linux/arm64로 생성된다는 점도 배울 수 있었습니다!
오늘도 해결!