
혼자서 쿠버네티스 공부하면서 집에서 놀고있는 윈도우 노트북의 Hyper-V를 이용해서 쿠버네티스 서버를 구축하였다.
성능이 느린 노트북이라 서버를 구축하는데 굉장히 애를 먹었다. 그렇게 쿠버네티스 설치를 완료하고나서 최근에 진행한 미니프로젝트의 스프링부트 백엔드를 배포를 하려고 했다.
먼저 mysql을 Pod에 배포를 하였고 PV와 PVC를 생성하여서 영구저장소 연결을 해주었고 mysql을 성공적으로 Pod에 배포했다. 마지막으로 스프링부트 백엔드 서버를 도커라이징해서 Pod에 배포하는일만 남았는데 pod에서 계속해서 CrashLoopBackOff 에러가 났다.
kubectl logs <pod-name>을 통해서 log를 찍어보니 exec format error가 계속해서 났다. 그 이유를 찾아보니 호환이 맞지않는 도커파일을 사용하게 된다면 에러가 날 수 있다고 되어 있었다. 그래서 떠올린게 현재 도커라이징은 m1 맥북에서 진행했고 그 도커이미지를 window amd 기반의 ubuntu 쿠버네티스 서버에서 돌릴려고하니 호환성 에러가 나는게 아닐까 하여 Docker로 amd64에 맞는 버전으로 도커 빌드를 할 수 있는 방법을 찾아보았고 Docker buildx를 통해서 여러 os에 맞는 도커이미지를 만들 수 있는 방법을 찾게 되었다.
그리고 완성된 도커이미지를 쿠버네티스 서버에서 pull해서 pod에 배포를 했는데 성공을 하였다.
다른분들도 같은 상황에 처했다면 아래 buildx를 통해서 --platform을 linux/amd64로 지정해주고 빌드할 도커 이미지와 태그를 넣어서 빌드를 하게 된다면 아마 해결이 될거라고 생각이 된다.
docker buildx build --platform=linux/amd64 -t ggprgrkjh/kubernetes-spring-mysql-demo:1.5 .