개발 공부/DevOps

ARM64에서 만든 컨테이너 AMD64에서 안 올려질 때

susong 2023. 6. 30. 22:49
728x90

컨테이너가 안올라가진다..

평화롭던 어느날 언제나와같이 쿠버네티스를 파드를 만들고 있었는데, 내가 방금 만든 컨테이너가 지속적으로 FAIL하는 문제가 발생했다. 분명 내가 바로 앞에서 MAC으로 빌드하고, 그것을 바로 Docker Repository에 push하고 해당 이미지로 실행시켰는데도 안되는 문제였다.

 

1시간정도 고민 끝에 모든 것을 다 해결하고도 혹시나 싶어서 한 부분이 맞아서 해당 해결방법을 서술하기 위해서 작성해본다.

처절한 BackOff의 흔적


해결의 실마리

이번 문제의 실마리는 kubectl logs <파드 이름>이 작동하지 않는 것이었다.

어떻게든 문제 원인을 찾고싶어서 kubectl logs를 사용하는데 지속적으로 entrypoint를 잡지 못했다. 이런 경우는 거의 없기에 혹시나 이런 가능성을 야기할 수 있는 시스템적인 차이에 주목했고, 내가 사용하는 맥북은 ARM64 그리고 내가 현재 접속한 클라우드 서버(MASTER 노드)는 AMD64라는 것에 주목했다.


해결방법 

docker에는 docker buildx라고 하는 Docker CLI플러그인이 존재하는데 이 녀석은 빌드 타임 때 멀티 아키텍처 이미지를 만드는 기능을 포함하고 있다. 그리고 이 녀석을 사용하면 docker build 간에 멀티 클라우드를 지원하게 할 수 있다.

 

해당 문제 해결을 위해서 나 또한 docker buildx를 사용했고, 해당 방법을 사용한 결과 현재는 쿠버네티스에 원하는 POD를 잘 띄울 수 있게 되었다.

 

사용방법

가장 먼저 본인의 도커 버전이 19.03 이상인지 확인해야된다. (19.03이상의 버전에는 buildx가 포함되어있다.) 그리고 그 후에 buildx를 활성화시켜야된다. 아래 명령어를 입력하면 buildx가 활성화된다.

docker buildx install

두번째로, 새로운 builder instance를 설치해야된다.

# docker buildx create --name <원하는 이름> --use
docker buildx create --name newbuilder --use

세번째로, 빌더 인스턴스를 시작해야된다.

docker buildx inspect --bootstrap

마지막으로, buildx를 이용해서 원하는 도커 이미지를 빌드하면된다.

docker buildx build --platform linux/amd64,linux/arm64 -t <your-image-name>:<tag> --push .

 

위와같은 방법으로 아키텍처 차이로인한 원인모를 에러에서 벗어날 수 있다.

내 컴퓨터가 M1 혹은 M2라면 늘 주의하자!(나 처럼 1시간 날리지 말고!)

728x90

'개발 공부 > DevOps' 카테고리의 다른 글

쿠버네티스에 대한 흥미로운 사실들 24가지  (0) 2023.06.08