기본 환경은
아래와 같이 준비해놓자
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
❯ 기존 브라우저 세션에서 여는 중입니다.
다음 단계는 다음 포스팅으로~