2021. 8. 25. 17:50ㆍkubernetes | 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 상태인것을 확인할 수 있다.
실행하려면
'kubernetes | docker' 카테고리의 다른 글
kubernetes - 서비스 연결 (0) | 2021.11.01 |
---|---|
kubernetes - 외부 클라이언트에 서비스 노출 (0) | 2021.11.01 |
쿠버네티스 실습 - 문제1 (0) | 2021.08.24 |
kubernetes 실습환경 구축 - 3 docker, kubernetes 설치 (0) | 2021.08.23 |
kubernetes 실습환경 구축 - 2 ubuntu설치 및 환경세팅 (0) | 2021.08.23 |