도커 이미지를 GKE에 배포하였으나 pod가 CrashLoopBackOff
상태로 실행되지 않았다.
kubectl logs pod/<pod-name>
명령어로 CrashLoopBackOff
오류가 발생한 pod의 log를 확인해보니
exec user process caused “exec format error”
와 같은 오류 메시지를 발견할 수 있었다.
원인을 찾아보니 이는 M1 mac 을 사용하는 사람들에게 발생하는 오류임을 알 수 있었다.
- m1 mac을 사용하는 경우
docker build image
의 기본 설정은arm64
이다 - 허나 kubernetes의 클러스터는
amd
기반이기 때문에 오류가 발생하는 것이다
docker buildx
- Multi-Architecture 빌드를 지원하는 docker CLI 플러그인
- 도커 데스크탑을 이용하고 있다면 따로 설치할 필요 없이 바로 사용이 가능하다
docker buildx ls
명령어로 현재 도커 드라이버를 확인해보자.
위와 같이 기본적으로 arm64
플랫폼만 지원하고 있음을 확인할 수 있다.
새로운 도커 빌더 생성
docker buildx create --name mybuilder --driver docker-container --bootstrap --use
--driver
: 기본 docker 빌더는 멀티 플랫폼 기능이 지원되지 않으므로docker-container
드라이버 사용--bootstrap
: 생성한 빌더가 올바르게 부팅되었는지 확인--use
: 생성한 빌더를 사용하도록 설정
도커 이미지 빌드
docker buildx build --platform linux/amd64,linux/arm64 -t myrepo/myimage:v1 --push .
이렇게 컨테이너 레지스트리에 멀티 플랫폼 이미지를 올려두면, docker pull
명령어를 수행할 때 호스트에 아키텍처를 자동으로 감지하여 해당하는 이미지를 가져올 수 있다. 즉, M1/M2 mac에서 docker pull
을 하면 ARM64
컨테이너 이미지를 가져오고, Intel VM에서 docker pull
을 하면 x86_64
컨테이너 이미지를 가져온다.
'Cloud' 카테고리의 다른 글
[K8S] timezone 설정 (0) | 2024.01.23 |
---|---|
Cloud Platform 클라우드 플랫폼 알아보기 (0) | 2023.09.08 |
[Kubernetes] 쿠버네티스 알아보기 (0) | 2023.09.08 |