본문 바로가기
Cloud Side/Container > Kubernetes

[k8s] AKS exec user process caused: exec format error 오류 해결

by developerBeluga 2022. 8. 5.
728x90
반응형

 

 

kubectl get pods

pod들을 상태를 조회해보니 STATUS가 Error일때도 있고 ImagePullBackOff 혹은 CrashLoopBackOff 일때가 있었다.

 

kubectl logs <podName>

무슨 일인지 좀 더 상태를 구체적으로 파악하기 위해 log를 조회했다.

 

standard_init_linux.go:228: exec user process caused: exec format error

그랬더니 위와 같은 메시지를 얻었다.

찾아보니 대부분 맥 M1 유저들한테 발생하는 문제라고 한다.

 

docker inspect <imageName>

docker image의 기본 설정을 확인해보자.

 

그랬더니 정말로 image의 기본 설정이 arm64였다.

인제 해결하는 방법에 대해서 알아보도록 하자.

 

 

1. ACR에 올라가 있는 모든 Repositories 삭제하기

이미 여러분들은 컨테이너 레지스트리에 Docker 이미지를 올렸을 것이다.

이것들이 컨테이너 레지스트리에 arm64로 올라가 있기 때문에 이걸 삭제해주지 않으면 무슨 짓을 해도 달라지지 않는다.

 

삭제하는 방법은 포텔을 기준 말을 해보자면, 이미지의 점 3개을 누르면

 

Delete repository가 있다.

그럼 해당 문제가 되는 이미지들을 제거해주면 된다.

 

 

2. platform 명시해주기

인제 docker image에 platform을 linux/amd64으로 명시해주시고 build 해주면 된다.

 

2-1. docker-compose일 경우

 services:
 	...:
    	image: ...
   	platform: linux/amd64

docker-compose.yaml에 각 컨테이너마다 platform을 명시해주기.

 

2-2. 단일 컨테이너일 경우

FROM --platform=linux/amd64 node:14

Dockerfile에 platform을  명시.

 

 

 

3. 레지스트리에 이미지 푸시와 배포

 

// 단일 컨테이너일 경우
docker push <acrLoginServer>/<imageName2>:v1

// docker-compose일 경우
docker-compose push

build를 해주신 다음 레지스트리에 이미지를 푸시.

 

 

 

그 다음 Azure 포텔에서 보면 ACR에서 이미지 하나를 눌러 타고 타고 들어가시면 상세 명세서를 볼 수 있다.

위 캡쳐처럼 Platform이 amd64로 바뀐 것을 확인!

 

az aks get-credentials --resource-group <groupName> --name <clusterName>

클러스터와 연결해주신 다음 

 

kubectl apply -f <k8s yaml>

애플리케이션을 배포만 해주시면 정상적인 AKS를 실행 할 수 있다.

 

이 오류에서 가장 중요한 것은 이미 ACR에 올라간 이미지들이 arm64로 올라가 있기 때문에 삭제를 해주지 않을 경우 오류에서 벗어나기 힘듭니다.

그러니 꼭 삭제하시고 docker에 플랫폼 명시해주시고 처음부터 다시해주시길 바랍니다.

 

 

 

 

728x90
반응형

댓글