https://minikube.sigs.k8s.io/

 

Kubernetes를 공부할 때 실습 환경으로 종종 minikube가 언급되지만

개인적으로 Kubernetes 공부 용도로는 minikube를 절대 추천하지 않는다.

 

사실 여러 부분에서 K8s를 제대로 구성한 것과의 차이가 꽤 크기 때문이다.

 

그리고 제대로 K8s 공부하기 위해서는 3대 이상의 머신 구성이 필요하지만

minikube로는 그런 상황에 대해서 실습을 할 수 없다.

 

그리고, 결정적으로 실제 업무 용도로 minikube를 사용하지 않기에

굳이 minikube에 시간 투자할 필요가 없다고 생각했었다.

 

하지만, 세상 모든 것은 나름의 쓸모가 있다!

 

그렇다. minikube가 필요해서 설치 과정을 정리해보고자 한다 ^^

 

 

0. What you’ll need

- 2 CPUs or more

- 2GB of free memory

- 20GB of free disk space

- Internet connection

- Container or virtual machine manager

  . such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation

 

1. 실습 환경

나는 VirtualBox를 이용하기로 했다.

VirtualBox

 

- 2 CPUs or more

- 4GB of free memory

- 50GB of free disk space

- Internet connection

 

VBox

 

- OS: Ubuntu 20.04 LTS

- Container or virtual machine manager : Docker

  . Docker 설치 방법: https://www.whatwant.com/entry/docker-buildx

docker

 

2. minikube 설치

- 공식 홈페이지에서는 각 환경 別 설치 방법을 상당히 편리한 UX로 제공해주고 있다.

  . https://minikube.sigs.k8s.io/docs/start/

 

https://minikube.sigs.k8s.io/docs/start/

 

> curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

> sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

그대로 실행하면 끝이다.

minikube install

 

3. minikube start

minikube를 구동시키면 귀여운 이모지들과 함께 다운로드 및 설치 등이 진행된다.

minikube start

 

4. kubectl 설치

Kubernetes(minikube)에 명령어를 전달하기 위해서는 'kubectl'가 필요하다.

  . https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

 

가이드 문서에 있는 내용을 참조해서 설치 진행하면 된다.

kubectl install

 

❯ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

❯ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

❯ kubectl version --client

 

잘 동작하는지 살펴보자.

kubectl

 

5. Dashboard

대시보드도 손쉽게 볼 수 있다.

dashboard

 

❯ minikube addons enable metrics-server

❯ minikube dashboard 

 

 

간단하게 Kubernetes를 맛보기 하는 용도로 정말 간단하게 설치할 수 있는 좋은 도구이다!!!

 

반응형


기본 환경은

아래와 같이 준비해놓자


Minikube Install

https://www.whatwant.com/entry/Minikube-install-in-Ubuntu-1804-in-VirtualBox


Node.js Install

https://www.whatwant.com/entry/Nodejs-install-in-Ubuntu-1804




1. 준비


    - Minikube 시작해 놓고...


❯ minikube start


    - dashboard 띄워서 눈으로 보고...


❯ minikube dashboard


    - 웹서버 소스 파일 준비해놓고....


❯ nano ./server.js


var http = require('http');

var os = require('os');


var host = os.hostname();

var handleRequest = function(request, response) {

    console.log('Received request for URL: ' + request.url);

    response.writeHead(200);

    response.end('Server is running on: ' + host);

};


var www = http.createServer(handleRequest);

www.listen(8080);




2. docker 환경 맞추기


    - Minikube를 위한 docker 환경을 갖춰야 한다.


    - Minikube에서 요구하는 docker-env는 뭔지 확인해본다.


❯ minikube docker-env


export DOCKER_TLS_VERIFY="1"

export DOCKER_HOST="tcp://192.168.99.100:2376"

export DOCKER_CERT_PATH="/home/chani/.minikube/certs"

export MINIKUBE_ACTIVE_DOCKERD="minikube"


# To point your shell to minikube's docker-daemon, run:

# eval $(minikube -p minikube docker-env)


    - 뭘 해야하는지 밑에서 알려줬다.


❯ eval $(minikube -p minikube docker-env)


    - 잘 되었는지 확인해보자.


❯ docker images -a


REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZE

gcr.io/k8s-minikube/storage-provisioner   v2                  9c3ca9f065bb        2 weeks ago         32.2MB

kubernetesui/dashboard                    v2.0.1              85d666cddd04        3 months ago        223MB

k8s.gcr.io/kube-proxy                     v1.18.3             3439b7546f29        3 months ago        117MB

k8s.gcr.io/kube-apiserver                 v1.18.3             7e28efa976bd        3 months ago        173MB

k8s.gcr.io/kube-scheduler                 v1.18.3             76216c34ed0c        3 months ago        95.3MB

k8s.gcr.io/kube-controller-manager        v1.18.3             da26705ccb4b        3 months ago        162MB

kubernetesui/metrics-scraper              v1.0.4              86262685d9ab        4 months ago        36.9MB

k8s.gcr.io/pause                          3.2                 80d28bedfe5d        6 months ago        683kB

k8s.gcr.io/coredns                        1.6.7               67da37a9a360        6 months ago        43.8MB

k8s.gcr.io/etcd


    - Minikube에서 쓰이는 아이들이 보이면 잘 된것이다.




3. Docker build


    - 준비되어있는 server.js 파일을 담는 docker 이미지를 만들어 보자


    - dockerfile 부터 만들어 보자.


❯ ls -al


합계 12

drwxr-xr-x 2 chani chani 4096  8월 22 04:59 .

drwxr-xr-x 3 chani chani 4096  8월 22 04:58 ..

-rw-r--r-- 1 chani chani  336  8월 22 04:59 server.js


❯ nodejs --version  


v12.18.3


❯ nano ./dockerfile


FROM node:12.18.3

EXPOSE 8080

COPY server.js .

CMD node server.js


    - 이제 빌드를 해보자.


❯ docker build -t whoru:v1 -f dockerfile .


Sending build context to Docker daemon  3.072kB

Step 1/4 : FROM node:12.18.3

12.18.3: Pulling from library/node

419e7ae5bb1e: Pull complete 

848839e0cd3b: Pull complete 

de30e8b35015: Pull complete 

258fdea6ea48: Pull complete 

ddb75eb7f1e9: Pull complete 

7ec8a0667334: Pull complete 

3366ea2fc4ca: Pull complete 

48116fadad2c: Pull complete 

27e46094f3f2: Pull complete 

Digest: sha256:d0738468dfc7cedb7d260369e0546fd7ee8731cfd67136f6023d070ad9679090

Status: Downloaded newer image for node:12.18.3

 ---> cfcf3e70099d

Step 2/4 : EXPOSE 8080

 ---> Running in 042f882d14c1

Removing intermediate container 042f882d14c1

 ---> 20836a2513a7

Step 3/4 : COPY server.js .

 ---> f0dd3d753786

Step 4/4 : CMD node server.js

 ---> Running in 252610e59ae9

Removing intermediate container 252610e59ae9

 ---> 3dcf96f4c978

Successfully built 3dcf96f4c978

Successfully tagged whoru:v1


    - 잘 만들어졌는지 확인해보자.


❯ docker images


REPOSITORY                                TAG                 IMAGE ID            CREATED              SIZE

whoru                                     v1                  3dcf96f4c978        About a minute ago   917MB

node                                      12.18.3             cfcf3e70099d        2 weeks ago          917MB

gcr.io/k8s-minikube/storage-provisioner   v2                  9c3ca9f065bb        2 weeks ago          32.2MB

kubernetesui/dashboard                    v2.0.1              85d666cddd04        3 months ago         223MB

k8s.gcr.io/kube-proxy                     v1.18.3             3439b7546f29        3 months ago         117MB

k8s.gcr.io/kube-controller-manager        v1.18.3             da26705ccb4b        3 months ago         162MB

k8s.gcr.io/kube-apiserver                 v1.18.3             7e28efa976bd        3 months ago         173MB

k8s.gcr.io/kube-scheduler                 v1.18.3             76216c34ed0c        3 months ago         95.3MB

kubernetesui/metrics-scraper              v1.0.4              86262685d9ab        4 months ago         36.9MB

k8s.gcr.io/pause                          3.2                 80d28bedfe5d        6 months ago         683kB

k8s.gcr.io/coredns                        1.6.7               67da37a9a360        6 months ago         43.8MB

k8s.gcr.io/etcd                           3.4.3-0             303ce5db0e90        10 months ago        288MB


    - 제일 위에 예쁘게 만들어져 있는 것을 볼 수 있다.





4. Pod 생성


    - 방금 만든 Docker image를 실행해 보자.


❯ kubectl run whoru --image=whoru:v1 --port=8080 --image-pull-policy=Never


pod/whoru created


    - dashboard에서 확인해볼 수 있다.



    - 물론 명령어로도 확인할 수 있다.


❯ kubectl get pods


NAME    READY   STATUS    RESTARTS   AGE

whoru   1/1     Running   0          3m28s



❯ kubectl describe pod whoru


Name:         whoru

Namespace:    default

Priority:     0

Node:         minikube/192.168.99.100

Start Time:   Sat, 22 Aug 2020 05:43:50 +0900

Labels:       run=whoru

Annotations:  <none>

Status:       Running

IP:           172.17.0.5

...




5. Service 생성


    - Pod만 가지고는 접근할 방법이 없다.

    - 연결고리 역할을 해주는 Service를 생성해보자.


❯ kubectl expose pod whoru --type=LoadBalancer


service/whoru exposed


    - 당연히 dashboard에서도 나타난다.



    - Service를 통해 접근이 가능한지 테스트 해보자.


❯ minikube service whoru


|-----------|-------|-------------|-----------------------------|

| NAMESPACE | NAME  | TARGET PORT |             URL             |

|-----------|-------|-------------|-----------------------------|

| default   | whoru |        8080 | http://192.168.99.100:31610 |

|-----------|-------|-------------|-----------------------------|

🎉  Opening service default/whoru in default browser...

 chani  /srv/workspace/server

❯ 기존 브라우저 세션에서 여는 중입니다.




다음 단계는 다음 포스팅으로~

반응형

'잘난놈되기' 카테고리의 다른 글

Docker Hub 활용  (0) 2020.11.14
SiteMap  (0) 2020.08.30
Node.js install (in Ubuntu 18.04)  (0) 2020.08.22
의자 가죽 리폼 (피아노의자, 식탁의자)  (0) 2020.05.25
인터넷 속도 측정 사이트 (넷플릭스)  (0) 2020.03.14



Minikube를 가지고 놀고 싶은데,

내 PC를 지저분하게 만들기가 싫어서...


최애하는 VirtualBox에 Ubuntu 설치해놓고

그 안에 Minikube를 설치해보고자 한다.



Reference: https://kubernetes.io/ko/docs/tasks/tools/install-minikube/



작업환경

    - Host OS: Windows 10

    - VirtualBox v6.1.12 r139181 (Qt5.6.2)

    - Guest OS: Ubuntu 18.04 Desktop

        . 2 CPU, 8192 Memory




1. 가상화 환경?!


    - "가상화 지원 여부를 확인"하란다. 현재 작업하고 있는 PC가 AMD라서 좀 찝찝한데...

    - VirtualBox의 Guest 환경에서 아래와 같이 "네스티드 VT-x/AMD-V 사용하기(V)"에 체크를 해주었다.




    - 뭔가 나오니까 된 것 같다.


❯ grep -E --color 'vmx|svm' /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch ssbd vmmcall fsgsbase avx2 clflushopt arat nrip_save flushbyasid decodeassists




2. VirtualBox 설치 ?


    - VirtualBox in VirtualBox ??? 뭔가 이상하지만... 훌륭한 우리 VirtualBox는 이게 된다.


❯ sudo apt install -y virtualbox virtualbox-ext-pack




3. kubectl 설치


    - 제일 먼저 할 것은 현재 최신 버전이 뭔지 확인하는 것이다.


https://storage.googleapis.com/kubernetes-release/release/stable.txt


    - 지금 확인해본 결과는 v1.18.8 이었다.

    - 다운로드 받자. (다운로드 받는 경로나 wget을 사용하는 것은 개인적인 


> cd /srv/install/kubectl


> wget https://storage.googleapis.com/kubernetes-release/release/v1.18.1/bin/linux/amd64/kubectl


    - 설치하자


❯ chmod +x ./kubectl 


❯ sudo cp ./kubectl /usr/local/bin/kubectl


    - 잘 설치되었는지 확인해보자.


❯ kubectl version --client


Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1", GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean", BuildDate:"2020-04-08T17:38:50Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}




4. Minikube 설치


    - 다운로드 받아보자


> cd /srv/install/minikube


> wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O minikube


    - 설치하자


❯ chmod +x ./minikube 


❯ sudo install minikube /usr/local/bin





5. Minikube 실행


    - 실행은 엄청 쉽다


❯ minikube start





6. dashboard


    - minikube는 대시보드도 간단히 제공해준다.


❯ minikube dashboard


🔌  대시보드를 활성화하는 중 ...

🤔  Verifying dashboard health ...

🚀  프록시를 시작하는 중 ...

🤔  Verifying proxy health ...

🎉  Opening http://127.0.0.1:40647/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

[7090:7090:0822/025314.671219:ERROR:viz_main_impl.cc(150)] Exiting GPU process due to errors during initialization


    - 알아서 Chrome이 뜬다. (아! 개인적인 취향으로 VirtualBox에 Ubuntu 설치하자마자 Chrome을 미리 설치해놨다)





7. docker 설치


    - minikube를 가지고 놀기 위해서는 docker가 필요하다.


❯ sudo apt install -y docker.io


    - 현재 사용자 계정으로 docker를 실행할 수 있도록 하자


❯ sudo usermod -aG docker $USER


❯ newgrp docker


    - 현재 계정을 docker 그룹에 넣어도 바로 적용되지 않는다. 재부팅하기 귀찮아서 newgrp으로 지금 docker 그룹에 속한 것처럼 해버렸다.


    - 잘 설치되었는지 실행해보자. Permission 에러가 안나오면 된다.


❯ docker ps -a


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES



가지고 노는 것은 다음 기회에~

반응형

+ Recent posts