kubernetes - 4 기본 명령어 정리

2021. 8. 25. 17:50kubernetes | docker

더보기

1. kubectl 명령어

쿠버네티스는 기본적으로 kubectl이라는 터미널에서 CLI명령어를 통해서 명령을 실행합니다. 클러스터관리, 디버그 컨테이너 관리, 트러블 슈팅이 가능하며, 대부분의 명령어는 kuberntes document에서 확인 가능합니다.

 

kubectl 명령어는 기본적으로 다음과 같은 구성을 가지고 있습니다.

더보기

$ kubectl [command] [TYPE] [NAME] [flags]

command : 자원에 실행하려는 동작

  • create : 생성
  • get : 정보가져오기
  • describe : 자세한 상태 정보
  • delete : 삭제

TYPE : 자원타입

  • pod : pod
  • service : 서비스

NAME : 자원이름

flag : 옵션

 

※ terminal에서 kubectl --help를 입력하면 여러 명령어에 대한 정보를 찾아 볼 수 있다.

 

 

 

2. 실습 example

1.현재 노드의 정보를 가져오는 명령어

더보기

root@master:~# kubectl get nodes

 

2. 현재 노드의 더 자세한 정보를 보고 싶을 때 사용하는 명령어

더보기

root@master:~# kubectl get pods -o wide

 

3. 노드의 상태를 2번보다 더 자세히 알고 싶은 경우 (describe 명령어)

더보기

root@master:~# kubectl describe node master

<정보>

Name:               master
Roles:              control-plane,master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=master
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node-role.kubernetes.io/master=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Tue, 24 Aug 2021 13:44:17 +0900
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  master
  AcquireTime:     <unset>
  RenewTime:       Wed, 25 Aug 2021 10:21:51 +0900
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Wed, 25 Aug 2021 10:04:51 +0900   Wed, 25 Aug 2021 10:04:51 +0900   WeaveIsUp                    Weave pod has set this
  MemoryPressure       False   Wed, 25 Aug 2021 10:19:51 +0900   Tue, 24 Aug 2021 13:44:11 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Wed, 25 Aug 2021 10:19:51 +0900   Tue, 24 Aug 2021 13:44:11 +0900   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Wed, 25 Aug 2021 10:19:51 +0900   Tue, 24 Aug 2021 13:44:11 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Wed, 25 Aug 2021 10:19:51 +0900   Tue, 24 Aug 2021 13:48:37 +0900   KubeletReady                 kubelet is posting ready status. AppArmor enabled

.
.
.
.
.

 

 

4. 컨테이너 pod를 만드는 명령어

더보기

root@master:~# kubectl run webserver --image=nginx:1.14 --port 80

webserver라는 컨테이너 pod를 만들고 뒤에 image로 nginx를 선택했으며, port 80으로 지정

 

만약,

자세한 정보를 보고 싶다면

더보기

root@master:~# kubectl describe pod webserver

를 입력해보자

 

pod의 상태를 확인 -> kubectl get pods -o wide

NAME                     READY   STATUS             RESTARTS      AGE   IP          NODE     NOMINATED NODE   READINESS GATES
mainui-d77bf4d8f-d6xfv   0/1     ImagePullBackOff   0 (55m ago)   17h   10.44.0.1   work02   <none>           <none>
mainui-d77bf4d8f-dnx8s   0/1     ImagePullBackOff   0 (55m ago)   17h   10.36.0.2   work01   <none>           <none>
mainui-d77bf4d8f-j2pj9   0/1     ImagePullBackOff   0 (55m ago)   17h   10.44.0.2   work02   <none>           <none>
webserver                1/1     Running            2 (30m ago)   17h   10.36.0.1   work01   <none>           <none>

 

webserve가 running중인 것을 확인

running 중인 webserve를 실행 시켜보자.

더보기

root@master:~# curl 10.36.0.1

를 입력

 

결과

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

 

 

webserve를 커맨드라인에서 웹을 볼 수 있는 elinks를 사용해보자

sudo apt-get update

sudo apt install elinks

elinks 10.36.0.1

 

kubectl create deployment mainui --image=httpd:latest --replicas=3

pod를 여러개 생성하고 싶을 경우 create deployment를 사용 그리고 뒤에 --replicas명령어를 통해 개수를 정할 수 있다

 

 

상태를 보려면 

 

kubectl get deployments.apps

더보기

root@master:~# kubectl get deployments.app
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
mainui   0/3     3            0           17h

상태를 보니 아직 ready상태가 아님

 

더 자세히 보고 싶으면 kubectl describe deployments.apps mainui를 입력

더보기

root@master:~# kubectl get pods
NAME                     READY   STATUS             RESTARTS      AGE
mainui-d77bf4d8f-d6xfv   0/1     ImagePullBackOff   0 (69m ago)   17h
mainui-d77bf4d8f-dnx8s   0/1     ImagePullBackOff   0 (70m ago)   17h
mainui-d77bf4d8f-j2pj9   0/1     ImagePullBackOff   0 (69m ago)   17h
webserver                1/1     Running            2 (45m ago)   17h

pod가 3개가 만들어 진것을 볼 수 있다.

 

저 자세히 보고 싶다면  

더보기

NAME                     READY   STATUS             RESTARTS      AGE   IP          NODE     NOMINATED NODE   READINESS GATES
mainui-d77bf4d8f-d6xfv   0/1     ImagePullBackOff   0 (70m ago)   17h   10.44.0.1   work02   <none>           <none>
mainui-d77bf4d8f-dnx8s   0/1     ImagePullBackOff   0 (70m ago)   17h   10.36.0.2   work01   <none>           <none>
mainui-d77bf4d8f-j2pj9   0/1     ImagePullBackOff   0 (70m ago)   17h   10.44.0.2   work02   <none>           <none>
webserver     

 

3개의 pod 중에 하나의 pod정보만 보고 싶다면 

더보기

kubectl get pod mainui-d77bf4d8f-d6xfv

를 입력

 

 

접속하고 싶다면 

더보기

curl 10.44.0.1

를 입력

 

 

처음 webserve를 다른 형태로 보고 싶다면

더보기

kubectl get pod webserve -o yaml

yaml파일 형태로 보고 싶다면 이렇게 입력

 

json형태로 보고 싶다면

더보기

kubectl get pod webserve -o json

이렇게 입력하면 된다..

 

 

 

pod안으로 접속하여 컨테이너 속 webserve에 접근하여 웹페이지를 바꾸고 싶다면

더보기

kubectl exec webserver

kubectl exec pod webserver ... 로 입력 할수 있지만

 

$ kubectl [command] [TYPE] [NAME] [flags]

 

여기서 대문자로 쓰여진 TYPE, NAME은 생략이 가능하다

 

 

root@master:~# kubectl exec webserver -it -- /bin/bash
root@webserver:/# ls
bin  boot  dev	etc  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
root@webserver:/# cd /usr/share/nginx/html/
root@webserver:/usr/share/nginx/html# ls
50x.html  index.html
root@webserver:/usr/share/nginx/html# cat index.html 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@webserver:/usr/share/nginx/html#

 

root@webserver:/usr/share/nginx/html# echo "SMPARK web"
SMPARK web
root@webserver:/usr/share/nginx/html# echo "SMPARK web" > index.html
root@webserver:/usr/share/nginx/html# ls
50x.html  index.html
root@webserver:/usr/share/nginx/html# cat index.html 
SMPARK web
root@webserver:/usr/share/nginx/html#
root@master:~# kubectl get pod -o wide
NAME                     READY   STATUS             RESTARTS       AGE   IP          NODE     NOMINATED NODE   READINESS GATES
mainui-d77bf4d8f-d6xfv   0/1     ImagePullBackOff   0 (106m ago)   18h   10.44.0.1   work02   <none>           <none>
mainui-d77bf4d8f-dnx8s   0/1     ImagePullBackOff   0 (106m ago)   18h   10.36.0.2   work01   <none>           <none>
mainui-d77bf4d8f-j2pj9   0/1     ImagePullBackOff   0 (106m ago)   18h   10.44.0.2   work02   <none>           <none>
webserver                1/1     Running            2 (81m ago)    18h   10.36.0.1   work01   <none>           <none>
root@master:~# kubectl exec webserver -it --/bin/bash
Error: unknown flag: --/bin/bash
See 'kubectl exec --help' for usage.
root@master:~# kubectl exec webserver -it -- /bin/bash
root@webserver:/# ls
bin  boot  dev	etc  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
root@webserver:/# cd /usr/share/nginx/html/
root@webserver:/usr/share/nginx/html# ls
50x.html  index.html
root@webserver:/usr/share/nginx/html# cat index.html 
SMPARK web
root@webserver:/usr/share/nginx/html# kubectl get node -o wide
bash: kubectl: command not found
root@webserver:/usr/share/nginx/html#
root@master:~# curl 10.36.0.1
SMPARK web
root@master:~#

 

webserver의 log를 확인하려면

더보기

kubectl logs webserver

root@master:~# kubectl logs webserver
10.32.0.1 - - [25/Aug/2021:01:40:55 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
10.32.0.1 - - [25/Aug/2021:02:33:58 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.68.0" "-"

 

 

웹서버를 접속하려고 한다면 허가가 필요한데 허가를 주기위해서는 다음 명령어가 필요하다

 

 

 

아까전에 다운로드한 mainui를 실행해보자.

kuectl get deployments.apps 

더보기

root@master:~# kubectl get deployments.apps
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
mainui   0/3     3            0           19h

아직 ready 상태인것을 확인할 수 있다.

 

실행하려면