///
Search
🀄

08.MiniKube 설치부터 활용까지

참고자료 및 출처

하나 더 만들기
MiniKube를 설치하기 전에
Minikube는 가상환경을 사용해 쿠버네티스 클러스터를 가상으로 구현한다. 다음 사이트를 확인하면 각각에서 제공되는 정보를 확인할 수 있다.

미니큐브 공식 사이트: 설치하기

쿠버네티스 공식 사이트: Minikube로 쿠버네티스 설치

미니큐브는 리눅스, macOS, 윈도우 환경을 모두 제공하는데 일반적으로 가상환경을 제공하는 애플리케이션을 사용하여 구축한다.
도커, KVM, VirtualBox, Bare-metal, Podman 환경에서 각 설치 방법이 모두 다르다. 여기서는 앞서 설명한 것처럼 우분투 18.04 환경에 도커를 설치하고 미니큐브 설치를 진행한다.

도커부터 일단 설치하자

패키지 업데이트
sudo apt-get update
Go
복사
docker 설치
sudo apt install docker.io -y
Go
복사
docker를 일반유저가 사용하도록 권한을 주자
sudo usermod -aG docker $USER && newgrp docker
Go
복사
도커의 모든 컨테이너를 조회하여 문제사항 있는제 check하자
docker ps -a
Go
복사
minikube 사이트
일단 아래의 명령어를 입력해서 curl를 설치부터 하자
sudo apt install curl
Go
복사
상기의 사이트에서 linux 버전으로 설치 명령어를 입력하자
아래는 명령어
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb sudo dpkg -i minikube_latest_amd64.deb
Go
복사
minikube 실행하기
minikube start --driver=docker
Go
복사
도커 환경을 사용하기 위해서 driver 옵션에 docker를 넣는다.
root 권한으로 설치를 하면 안된다.
시간이 꽤 걸린다.

Minikube 접속하기

minikube에 클라이언트로 접속하는 가장 간단한 방법은 kubectl
이때 kubectl을 별도로 설치해주어야 하는데 snap을 통해 다운로드 받을 수 있다.
만약 오류와 함께 --classic 옵션을 붙여달라는 문구가 나오면 "sudo snap install kubectl --classic" 를 실행하고 안나오면 --classic을 지운다.
sudo snap install kubectl --classic
Go
복사
쿠버네티스의 노드를 조회하는 명령을 수행한다.
erver1@server1-VirtualBox:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready control-plane,master 4m22s v1.21.2 server1@server1-VirtualBox:~$
Go
복사

minikube에 SSH로 접속하기

minikube는 가상의 노드를 하나 만들고 그 안에 쿠버네티스 시스템을 구축하는 형태로 돌아간다. 도커를 조회하는 명령을 내리면 하나의 도커가 도는 모습이 보인다. 사실 쿠버네티스 클러스터는 모든 컴포넌트가 컨테이너 형태로 돌아가기 때문에 원래는 다수의 컨테이너가 보여야 한다.
server1@server1-VirtualBox:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db71a94bd4e4 gcr.io/k8s-minikube/kicbase:v0.0.25 "/usr/local/bin/entr…" 12 minutes ago Up 12 minutes 127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp minikube server1@server1-VirtualBox:~$
Go
복사
이 도커 컨테이너가 가상으로 떠있는 노드다.
접속해서 내용을 확인하자. 노드에 접속하는 방법은 minikube 명령을 사용하기 바란다.
minikube ssh 명령을 실행하면 minikube 셸이 떨어진다.
server1@server1-VirtualBox:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db71a94bd4e4 gcr.io/k8s-minikube/kicbase:v0.0.25 "/usr/local/bin/entr…" 12 minutes ago Up 12 minutes 127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp minikube server1@server1-VirtualBox:~$
Go
복사
여기서 다시 docker ps 명령을 수행한다. 드디어 쿠버네티스 클러스터가 돌아가는데 필요한 다양한 컴포넌트가 보인다.
server1@server1-VirtualBox:~$ minikube ssh docker@minikube:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52c73a47d5c8 6e38f40d628d "/storage-provisioner" 12 minutes ago Up 12 minutes k8s_storage-provisioner_storage-provisioner_kube-system_d0716785-a5d6-4c1e-9931-e701f913804c_0 68a720ddde34 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_storage-provisioner_kube-system_d0716785-a5d6-4c1e-9931-e701f913804c_0 5af4982a2f4b 296a6d5035e2 "/coredns -conf /etc…" 12 minutes ago Up 12 minutes k8s_coredns_coredns-558bd4d5db-42kph_kube-system_755d2b65-8ef2-40d4-9363-ab49da325520_0 9f12d45709c1 a6ebd1c1ad98 "/usr/local/bin/kube…" 12 minutes ago Up 12 minutes k8s_kube-proxy_kube-proxy-cpjxq_kube-system_76135fb6-55c2-41d5-bdd0-75eaaf542371_0 a871ac0b7915 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-proxy-cpjxq_kube-system_76135fb6-55c2-41d5-bdd0-75eaaf542371_0 64bafb9a8c0f k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_coredns-558bd4d5db-42kph_kube-system_755d2b65-8ef2-40d4-9363-ab49da325520_0 83613953ee5c 0369cf4303ff "etcd --advertise-cl…" 12 minutes ago Up 12 minutes k8s_etcd_etcd-minikube_kube-system_be5cbc7ffcadbd4ffc776526843ee514_0 6588aca11090 f917b8c8f55b "kube-scheduler --au…" 12 minutes ago Up 12 minutes k8s_kube-scheduler_kube-scheduler-minikube_kube-system_a2acd1bccd50fd7790183537181f658e_0 48863aa114a3 106ff58d4308 "kube-apiserver --ad…" 12 minutes ago Up 12 minutes k8s_kube-apiserver_kube-apiserver-minikube_kube-system_cefbe66f503bf010430ec3521cf31be8_0 72bf6b9ba008 ae24db9aa2cc "kube-controller-man…" 12 minutes ago Up 12 minutes k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_a5754fbaabd2854e0e0cdce8400679ea_0 0bef8da52358 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-apiserver-minikube_kube-system_cefbe66f503bf010430ec3521cf31be8_0 14cb56c968e2 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_etcd-minikube_kube-system_be5cbc7ffcadbd4ffc776526843ee514_0 d621b5059e5b k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-scheduler-minikube_kube-system_a2acd1bccd50fd7790183537181f658e_0 d0b3b3625e54 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-controller-manager-minikube_kube-system_a5754fbaabd2854e0e0cdce8400679ea_0 docker@minikube:~$
Go
복사
다음은 minikube가 갖는 아키텍처의 모습을 그림으로 표현한 것이다. VM안에 노드가 떠있는 모습이다.
접속을 종료하고자 할 때는 exit 명령을 수행한다.
server1@server1-VirtualBox:~$ minikube ssh docker@minikube:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52c73a47d5c8 6e38f40d628d "/storage-provisioner" 12 minutes ago Up 12 minutes k8s_storage-provisioner_storage-provisioner_kube-system_d0716785-a5d6-4c1e-9931-e701f913804c_0 68a720ddde34 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_storage-provisioner_kube-system_d0716785-a5d6-4c1e-9931-e701f913804c_0 5af4982a2f4b 296a6d5035e2 "/coredns -conf /etc…" 12 minutes ago Up 12 minutes k8s_coredns_coredns-558bd4d5db-42kph_kube-system_755d2b65-8ef2-40d4-9363-ab49da325520_0 9f12d45709c1 a6ebd1c1ad98 "/usr/local/bin/kube…" 12 minutes ago Up 12 minutes k8s_kube-proxy_kube-proxy-cpjxq_kube-system_76135fb6-55c2-41d5-bdd0-75eaaf542371_0 a871ac0b7915 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-proxy-cpjxq_kube-system_76135fb6-55c2-41d5-bdd0-75eaaf542371_0 64bafb9a8c0f k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_coredns-558bd4d5db-42kph_kube-system_755d2b65-8ef2-40d4-9363-ab49da325520_0 83613953ee5c 0369cf4303ff "etcd --advertise-cl…" 12 minutes ago Up 12 minutes k8s_etcd_etcd-minikube_kube-system_be5cbc7ffcadbd4ffc776526843ee514_0 6588aca11090 f917b8c8f55b "kube-scheduler --au…" 12 minutes ago Up 12 minutes k8s_kube-scheduler_kube-scheduler-minikube_kube-system_a2acd1bccd50fd7790183537181f658e_0 48863aa114a3 106ff58d4308 "kube-apiserver --ad…" 12 minutes ago Up 12 minutes k8s_kube-apiserver_kube-apiserver-minikube_kube-system_cefbe66f503bf010430ec3521cf31be8_0 72bf6b9ba008 ae24db9aa2cc "kube-controller-man…" 12 minutes ago Up 12 minutes k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_a5754fbaabd2854e0e0cdce8400679ea_0 0bef8da52358 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-apiserver-minikube_kube-system_cefbe66f503bf010430ec3521cf31be8_0 14cb56c968e2 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_etcd-minikube_kube-system_be5cbc7ffcadbd4ffc776526843ee514_0 d621b5059e5b k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-scheduler-minikube_kube-system_a2acd1bccd50fd7790183537181f658e_0 d0b3b3625e54 k8s.gcr.io/pause:3.4.1 "/pause" 12 minutes ago Up 12 minutes k8s_POD_kube-controller-manager-minikube_kube-system_a5754fbaabd2854e0e0cdce8400679ea_0 docker@minikube:~$ exit logout server1@server1-VirtualBox:~$
Go
복사

minikube에 애플리케이션 배포하기

kubectl로 minikube에 애플리케이션을 배포하자.
예시로 쓰는 애플리케이션은 쿠버네티스 공식사이트에서 제공하는 매우 간단한 echoserver이다.
그리고 외부에서 접근이 가능하도록 expose 명령으로 노드포트를 열도록 한다.
쿠버네티스 클러스터의 컨테이너는 서비스라는 객체 없이 외부로 서비스가 불가능하다.
때문에 반드시 expose 명령이 필요하다.
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10 kubectl expose deployment hello-minikube --type=NodePort --port=8080
Go
복사
실행 콘솔화면
server1@server1-VirtualBox:~$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10 deployment.apps/hello-minikube created server1@server1-VirtualBox:~$ kubectl expose deployment hello-minikube --type=NodePort --port=8080 service/hello-minikube exposed server1@server1-VirtualBox:~$
Go
복사
명령이 성공적으로 잘 실행됐다면 쿠버네티스에 배포된 애플리케이션과 서비스를 확인해보도록 하자.
server1@server1-VirtualBox:~$ kubectl get all NAME READY STATUS RESTARTS AGE pod/hello-minikube-5d9b964bfb-v92lx 1/1 Running 0 60s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/hello-minikube NodePort 10.102.64.199 <none> 8080:32161/TCP 58s service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/hello-minikube 1/1 1 1 60s NAME DESIRED CURRENT READY AGE replicaset.apps/hello-minikube-5d9b964bfb 1 1 1 60s server1@server1-VirtualBox:~$
Go
복사
위에서부터 차례대로 포드, 서비스, 디플로이먼트, 레플리카셋이 보인다. 디플로이먼트는 레플리카셋을 관리하고, 다시 레플리카셋은 포드를 관리하는 구조다.
그리고 포드가 실질적으로 컨테이너를 포함한다. 이 포드는 외부로 서비스하기 위해 서비스를 갖고 여기서 30017이라는 노드 포트로 외부에 열려있다.
server1@server1-VirtualBox:~$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-minikube NodePort 10.102.64.199 <none> 8080:32161/TCP 17m kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35m server1@server1-VirtualBox:~$
Go
복사
또 다른 확인 방법으로 --url 옵션을 주어도 좋다.
server1@server1-VirtualBox:~$ minikube service hello-minikube --url http://192.168.49.2:32161 server1@server1-VirtualBox:~$
Go
복사
직접 브라우저를 통해 접속해보자.
노드는 docker 인터페이스를 사용하고 있으므로 192.168.49.2:32161로 접속해야 한다.
실제로 외부에서 접속하려면 docker의 프록시 기능을 사용해야 한다.
아래는 우분투에서 노드 포트에 접속하는 화면
여기서는 간단히 kubectl의 port-forward 기능을 사용해본다. 포드에 직접 접근해 8080 포트로 접근할 수 있도록 했다.
kubectl port-forward hello-minikube-5d9b964bfb-v92lx 8080:8080
Go
복사
마찬가지로 잘 접속되는 모습을 확인할 수 있다. 이 포트는 외부에서도 접속이 가능하다.