๋์ปค ์ฌ์ฉ์๋ฅผ ์ํ kubectl
๋น์ ์ ์ฟ ๋ฒ๋คํฐ์ค ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ธ kubectl
์ ์ฌ์ฉํ์ฌ API ์๋ฒ์ ์ํธ ์์ฉํ ์ ์๋ค. ๋ง์ฝ ๋์ปค ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ ์ต์ํ๋ค๋ฉด kubectl
์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋จํ๋ค. ๋ค์ ์น์
์์๋ ๋์ปค์ ํ์ ๋ช
๋ น์ ๋ณด์ฌ์ฃผ๊ณ kubectl
๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ค๋ช
ํ๋ค.
docker run
nginx ๋ํ๋ก์ด๋จผํธ(Deployment)๋ฅผ ์คํํ๊ณ ํด๋น ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ ธ์ถ์ํค๋ ค๋ฉด, kubectl create deployment์ ์ฐธ๊ณ ํ๋ค.
docker:
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
55c103fa129692154a7652490236fee9be47d70a8dd562281ae7d2f9a339a6db
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 9 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp nginx-app
kubectl:
# nginx ์คํํ๋ ํ๋๋ฅผ ์์ํ๋ค
kubectl create deployment --image=nginx nginx-app
deployment.apps/nginx-app created
# nginx-app ์ env๋ฅผ ์ถ๊ฐํ๋ค
kubectl set env deployment/nginx-app DOMAIN=cluster
deployment.apps/nginx-app env updated
์ฐธ๊ณ :
kubectl
์ปค๋งจ๋๋ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค์ ์ ํ๊ณผ ์ด๋ฆ์ ์ถ๋ ฅํ๋ฏ๋ก, ์ด๋ฅผ ํ์ ์ปค๋งจ๋์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋ ํ์๋ ์๋ก์ด ์๋น์ค๋ฅผ ๋
ธ์ถํ ์ ์๋ค.# ์๋น์ค๋ฅผ ํตํด ํฌํธ๋ฅผ ๋
ธ์ถ
kubectl expose deployment nginx-app --port=80 --name=nginx-http
service "nginx-http" exposed
kubectl์ ์ฌ์ฉํ๋ฉด, N๊ฐ์ ํ๋๊ฐ nginx๋ฅผ ์คํํ๋๋ก ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ์ ์๋ค. ์ฌ๊ธฐ์ N์ ์คํ์ ๋ช ์๋ ๋ ํ๋ฆฌ์นด ์์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ค. ๋ํ ํ๋์ ๋ ์ด๋ธ๊ณผ ์ ๋ญํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ฑํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ ์ํด ์๋น์ค ์ฌ์ฉํ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ์ง๋ docker run -d ...
์ ๋น์ทํ๊ฒ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ๋๋ค. ํฌ๊ทธ๋ผ์ด๋๋ก ์คํํ๋ ค๋ฉด kubectl run
์ ์ด์ฉํ์ฌ ํ๋๋ฅผ ์์ฑํ๋ค.
kubectl run [-i] [--tty] --attach <name> --image=<image>
docker run ...
๊ณผ ๋ฌ๋ฆฌ --attach
๋ฅผ ์ง์ ํ๋ฉด ํ์ค ์
๋ ฅ(stdin)
, ํ์ค ์ถ๋ ฅ(stdout)
๋ฐ ํ์ค ์ค๋ฅ(stderr)
๊ฐ ๋ถ๋๋ค. ์ฐ๊ฒฐ๋(attached) ์คํธ๋ฆผ์ ์ ์ดํ ์ ์๋ค(docker -a ...
).
ํด๋น ์ปจํ
์ด๋์์ ๋ถ๋ฆฌ(detach)ํ๋ ค๋ฉด ์ด์ค์ผ์ดํ ์ํ์ค(escape sequence) Ctrl+P๋ฅผ ์
๋ ฅํ ๋ค์ Ctrl+Q๋ฅผ ์
๋ ฅํ๋ค.
docker ps
ํ์ฌ ์คํ ์ค์ธ ๋ชฉ๋ก์ ๋ณด๊ธฐ ์ํด์๋ kubectl get์ ์ฐธ๊ณ ํ๋ค.
docker:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14636241935f ubuntu:16.04 "echo test" 5 seconds ago Exited (0) 5 seconds ago cocky_fermi
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-app
kubectl:
kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-8df569cb7-4gd89 1/1 Running 0 3m
ubuntu 0/1 Completed 0 20s
docker attach
์ด๋ฏธ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ ค๋ฉด kubectl attach๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx-app
docker attach 55c103fa1296
...
kubectl:
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl attach -it nginx-app-5jyvm
...
์ปจํ ์ด๋์์ ๋ถ๋ฆฌํ๋ ค๋ฉด ์ด์ค์ผ์ดํ ์ํ์ค Ctrl+P๋ฅผ ์ ๋ ฅํ ๋ค์ Ctrl+Q๋ฅผ ์ ๋ ฅํ๋ค.
docker exec
์ปจํ ์ด๋์์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ ค๋ฉด kubectl exec๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp nginx-app
docker exec 55c103fa1296 cat /etc/hostname
55c103fa1296
kubectl:
kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm
๋ํํ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค.
docker:
docker exec -ti 55c103fa1296 /bin/sh
# exit
kubectl:
kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
์์ธํ ๋ด์ฉ์ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ์ ธ ์ป๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker logs
์คํ ์ค์ธ ํ๋ก์ธ์ค์ ํ์ค ์ ๋ ฅ(stdout)/ํ์ค ์ค๋ฅ(stderr)๋ฅผ ์ํํ๋ ค๋ฉด kubectl logs๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
docker logs -f a9e
192.168.9.1 - - [14/Jul/2015:01:04:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
192.168.9.1 - - [14/Jul/2015:01:04:03 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
kubectl:
kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
ํ๋์ ์ปจํ
์ด๋์๋ ๊ทผ์ํ ์ฐจ์ด๊ฐ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋๋ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋์ด๋ ์ข
๋ฃ๋์ง ์๋๋ค. ๋์ ํ๋๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ๋ค. ์ด๋ ๋์ปค์ ์คํ ์ต์
์ธ --restart=always
์ ์ ์ฌํ์ง๋ง, ํ ๊ฐ์ง ํฐ ์ฐจ์ด์ ์ด ์๋ค. ๋์ปค์์๋ ํ๋ก์ธ์ค์ ๊ฐ ํธ์ถ์ ๋ํ ์ถ๋ ฅ์ด ์ฐ๊ฒฐ๋์ง๋ง, ์ฟ ๋ฒ๋คํฐ์ค์ ๊ฒฝ์ฐ ๊ฐ ํธ์ถ์ ๋ณ๊ฐ๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ด์ ์คํ์ ์ถ๋ ฅ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํ๋ค.
kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
์์ธํ ์ ๋ณด๋ ๋ก๊น ์ํคํ ์ฒ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker stop ๊ณผ docker rm
์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค์งํ๊ณ ์ญ์ ํ๋ ค๋ฉด kubectl delete์ ์ฐธ๊ณ ํ๋ค.
docker:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9ec34d98787 nginx "nginx -g 'daemon of" 22 hours ago Up 22 hours 0.0.0.0:80->80/tcp, 443/tcp nginx-app
docker stop a9ec34d98787
a9ec34d98787
docker rm a9ec34d98787
a9ec34d98787
kubectl:
kubectl get deployment nginx-app
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 1/1 1 1 2m
kubectl get po -l app=nginx-app
NAME READY STATUS RESTARTS AGE
nginx-app-2883164633-aklf7 1/1 Running 0 2m
kubectl delete deployment nginx-app
deployment "nginx-app" deleted
kubectl get po -l app=nginx-app
# ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค
์ฐธ๊ณ :
kubectl์ ์ฌ์ฉํ ๋๋ ํ๋๋ฅผ ์ง์ ์ญ์ ํ์ง ์๋๋ค. ๋จผ์ ํ๋๋ฅผ ์์ ํ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ญ์ ํด์ผ ํ๋ค. ๋ง์ฝ ํ๋๋ฅผ ์ง์ ์ญ์ ํ๋ฉด ๋ํ๋ก์ด๋จผํธ๊ฐ ํ๋๋ฅผ ์ฌ์์ฑํ ๊ฒ์ด๋ค.docker login
kubectl์ docker login
์ ์ง์ ์ ์ธ ์ ์ฌ์ ์ ์๋ค. ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ์ ํจ๊ป ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ ์ฌ์ฉ์ ์ฐธ๊ณ ํ๋ค.
docker version
ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๋ ค๋ฉด kubectl version์ ์ฐธ๊ณ ํ๋ค.
docker:
docker version
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
kubectl:
kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
docker info
ํ๊ฒฝ ๋ฐ ์ค์ ์ ๋ํ ์์ธํ ์ ๋ณด๋ kubectl cluster-info๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
docker info
Containers: 40
Images: 168
Storage Driver: aufs
Root Dir: /usr/local/google/docker/aufs
Backing Filesystem: extfs
Dirs: 248
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 12
Total Memory: 31.32 GiB
Name: k8s-is-fun.mtv.corp.google.com
ID: ADUV:GCYR:B3VJ:HMPO:LNPQ:KD5S:YKFQ:76VN:IANZ:7TFV:ZBF4:BYJO
WARNING: No swap limit support
kubectl:
kubectl cluster-info
Kubernetes master is running at https://203.0.113.141
KubeDNS is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
kubernetes-dashboard is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
Grafana is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
Heapster is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
InfluxDB is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy