미운 오리 새끼의 우아한 개발자되기

[k8s] Mac m1 으로 Minikube 에 local docker image 실행하기 (1) 본문

Containerization/Docker & k8s

[k8s] Mac m1 으로 Minikube 에 local docker image 실행하기 (1)

Serina_Heo 2022. 9. 22. 11:08

1. 사전작업

  • 만들려는 이미지가 정상 작동 되는 것인지 로컬 도커 데몬에서 확인

2. minikube 설치

https://velog.io/@pinion7/macOs-m1-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-kubernetes-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

macOs m1 환경에서 Kubernetes 시작하기(feat. Docker)

- kubernetes 개발환경과 운영환경의 구축 방식이 다름을 이해할 수 있다. - macOs m1 환경에서 kubernetes 개발환경을 구축할 수 있다. - docker와 kubernetes 각각으로 배포를 실습하고 간단한 차이를 인지해

velog.io

에 의하면 m1 은 brew 가 아닌 binary 로 1.25.1 버전을 받아야한다고 함.

curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.25.1/minikube-darwin-arm64 \
  && chmod +x minikube

 

sudo install minikube /usr/local/bin/minikube

그리고 brew 로 kubectl 설치

brew install kubectl

3. minikube 시작하기

minikube start --driver=docker

4. minikube 상태(status) 확인

minikube status

5. 내 터미널에서 minikube 내부의 Docker Engine 사용하기

eval $(minikube docker-env)

6. 연결된 도커 엔진의 이미지 목록 확인해보기 

docker images

7. 실행할 도커 이미지 생성하기 (반드시 5번의 명령어를 친 이후에 도커 이미지를 생성할 것)

docker build -t [생성할 도커 이미지 태그명] -f [Dockerfile 명] .

ex) docker build -t test -f Dockerfile-local .

8. minikube 내 도커에 local registry 생성

8-10 번을 실행하지 않고 pod 를 생성했더니 생성한 이미지를 가져오지 못하여 imagePullBackOff 에러가 발생하며 pod 생성에 실패했다. 8-10 번을 실행하여 docker image를 로컬 레지스트리에서 가져와 pod 생성을 할 수 있었다. 

docker run -d -p 5000:5000 --restart=always --name local-registry registry:2

9. 7번에서 생성한 도커 이미지 tag 달기

docker tag [생성한 도커 이미지명] 127.0.0.1:5000/[도커이미지명(생성한 도커 이미지명과 동일하지않아도 됨)]

ex) docker tag test 127.0.0.1:5000/minikube-test

10. local registry 에 push

docker push [도커 이미지의 새로 만든 태그명]

ex) docker push 127.0.0.1:5000/minikube-test

11. 해당 이미지로 pod 생성하기

kubectl run [생성할 pod명] --image=[도커이미지태그명] --image-pull-policy=Never

ex) kubectl run minikube-test --image=127.0.0.1:5000/minikube-test --image-pull-policy=Never

--image-pull-policy 옵션은 공식문서를 참고할 것 (https://kubernetes.io/docs/concepts/containers/images/)

12. 생성한 pod 확인하기

kubectl get pods [생성한 pod 명]

ex) kubectl get pods minikube-test

pod 가 정상적으로 뜨면 사진과 같이 STATUS 가 Running 으로 뜬다. 

여기까지는 pod 만 띄운 상태라 외부에서 해당 어플리케이션(이미지)으로의 접근이 되지 않는다. 

13. 실행한 이미지의 로그 확인

kubectl logs [생성한 pod 명]

만약 STATUS 가 비정상이라면 아래 명령어로 해당 이미지의 실행 로그를 확인해봐야한다. 

kubectl logs [실행한 pod 명]

ex) kubectl logs minikube-test

14. 생성한 pod 의 description 보기

또는 해당 pod 의 description 을 확인하여 pod 의 상태 및 event를 확인해야한다. 

kubectl describe pods [실행한 pod 명]

ex) kubectl describe minikube-test

13. 생성한 pod 삭제하기

kubectl delete pods [생성한 pod 명]

ex) kubectl delete pods minikube-test

 

추가) 실행하는 어플리케이션에서 터널링을 이용할 경우, 

로컬에서는 아래와 같이 localhost 를 써주어 application.yaml 을 작성했다면, 

url: jdbc:postgresql://localhost:5432/bcheckDB

도커의 경우에는 아래와 같이 host.docker.internal 로 써주어야

내 로컬 pc 에서 터널링된 연결을 유지하여 사용할 수 있다.

url: jdbc:postgresql://host.docker.internal:5432/bcheckDB

 

참고

https://subicura.com/k8s/prepare/kubernetes-setup.html#minikube

 

쿠버네티스 설치

쿠버네티스 실습을 위해 클러스터를 설치합니다.

subicura.com

https://velog.io/@pinion7/macOs-m1-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-kubernetes-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

macOs m1 환경에서 Kubernetes 시작하기(feat. Docker)

- kubernetes 개발환경과 운영환경의 구축 방식이 다름을 이해할 수 있다. - macOs m1 환경에서 kubernetes 개발환경을 구축할 수 있다. - docker와 kubernetes 각각으로 배포를 실습하고 간단한 차이를 인지해

velog.io

https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=162 

 

컨테이너 오케스트레이션 쿠버네티스 살펴보기 | T아카데미 온라인강의

1. 쿠버네티스(Kubernetes)가 무엇인지 알아보고 기본적인 사용방법에 대해 알아본다 2. 쿠버네티스(Kubernetes)의 구성요소와 웹 애플리케이션 배포 방법에 대해 알..

tacademy.skplanet.com