기본 환경은
아래와 같이 준비해놓자
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 시작해 놓고...
    - dashboard 띄워서 눈으로 보고...
    - 웹서버 소스 파일 준비해놓고....
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
❯ 기존 브라우저 세션에서 여는 중입니다.

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