๋„์ปค ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 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 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
# ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค

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
์ตœ์ข… ์ˆ˜์ • August 23, 2024 at 1:17 AM PST: [ko] add the missing newline (1bda35ea7b)