SW Engineering/DevOps, SRE

[kubernetes] minikube에서 로컬 docker image 사용하기

SungWookKang 2023. 9. 7. 22:23
반응형

[kubernetes] minikube에서 로컬 docker image 사용하기

 

l  Kubernetes, Docker

 

일반적으로 로컬 컴퓨터에서 쿠버네티스(Kubernetes)를 테스트할 때 minikube 환경을 많이 사용한다. 도커 데스크탑(docker desktop)이 설치된 환경에서도 쿠버네티스를 활성화하면 minikube가 활성화되어 동작한다. 이러한 환경에서 kubectl run 또는 yaml로 파드를 생성할 때, 로컬의 이미지를 사용할 경우 이미지를 가져올 수 없다는 오류와 함께 파드가 생성된 후 종료된다. 이번 포스트에서는 minikube 환경에서 로컬의 docker image를 사용하여 파드를 생성하는 방법을 알아본다.

 

로컬의 docker images에서 커스텀 빌드된 이미지 proxysql이 있다.

 

로컬의 도커 이미지를 사용하여 파드를 생성하면 오류가 발생한다.

kubectl run my-proxysql --image=proxysql

 

 

오류를 살펴보면 ErrImagePull이라는 상태 메시지를 볼 수 있는데, 상태를 자세히 확인하기 위해 kubectl describe 명령을 사용하여 상세 메시지를 확인한다.

kubectl describe pods my-proxysql

 

 

마지막에 오류 메시지를 보면, 이미지를 가져올 수 없어 발생한 오류라는 것을 확인할 수 있다.

Failed to pull image "proxysql": rpc error: code = Unknown desc = Error response from daemon: pull access denied for proxysql, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

 

일반적으로 생각할 때, 쿠버네티스를 사용하여 파드를 생성하면, 로컬의 이미지를 사용할 줄 알았는데 그렇지 않다. 그래서 minikube에서 로컬의 이미지를 사용할 수 있도록 minikube와 도커를 연결해야해는데, 다행히 쿠버네티스에서는 공식적으로 이러한 부분을 지원하고 있다.

 

아래 명령어를 사용하면, 현재 minikube에서 도커 host와 연결할 수 있는 방법을 알려준다. 결과 정보를 바탕으로 일일이 등록해도 되지만, 마지막줄에서 도커 호스트와 한번에 연결할 수 있는 명령어를 제공하기 때문에 그대로 복사해서 사용할 수 있다.

minikube docker-env

 

 

마지막 줄의 명령어를 실행하여 minikube에서 docker host에 연결한다.

eval $(minikube -p minikube docker-env)

 

명령어실행 후 도커에서 컨테이너를 조회해 보면 쿠버네티스의 컨테이너가 조회되는 것을 확인할 수 있다.

 

지금부터는 docker 이미지가 minikube에서 동작하는 driver(docker)와 연결되었기 때문에 이제부터 생성되는 docker image는 minikube 위에 생성하게 된다.

 

다시 한번 이미지를 빌드 한다. 이번에는 이전과 차별을 두기 위해 my-proxysql 이라는 이름으로 이미지를 생성하였다.

docker build -t my-proxysql .

 

아래 명령을 사용하여 minikube 이미지 목록을 확인한다. 방금 빌드한 이미지 목록을 확인할 수 있다.

minikube image ls --format table

 

 

아래 명령을 사용하여 파드를 실행한다. 이때 로컬의 이미지를 사용하도록 --image-pull-policy=Never 옵션을 함께 사용한다. 정상적으로 파드가 실행중인 것을 확인할 수 있다.

kubectl run my-proxysql1 --image=my-proxysql --image-pull-policy=Never --restart=Never

 

 

 

[참고자료]

l  https://minikube.sigs.k8s.io/docs/handbook/pushing/#1-pushing-directly-to-the-in-cluster-docker-daemon-docker-env

l  https://www.baeldung.com/docker-local-images-minikube

l  https://egkatzioura.com/2020/03/08/use-local-docker-image-on-minikube/

 

 

 

2023-09-07 / Sungwook Kang / https://sungwookkang.com

 

 

도커파일, dockerfile, minikube, Kubernetes, 로컬이미지 사용, 파드생성, pod create, 도커이미지

반응형