반응형
Notice
Recent Posts
Recent Comments

06-25 18:00
관리 메뉴

SaevOps

[쿠버네티스] 파드의 동작 보증 / cordon / drain 본문

클라우드/Kubernetes

[쿠버네티스] 파드의 동작 보증 / cordon / drain

세브웁스 2022. 10. 20. 11:00
반응형

이론

일반 파드디플로이먼트에 속한 파드의 차이

  • 일반 파드 : 파드 삭제
  • 디플로이먼트에 속한 파드 : 파드 삭제 + 새로운 파드 생성

cordon

  • 문제가 발생할 가능성이 있는 노드를 스케줄 되지 않게 설정하는 기능

drain

  • 지정된 노드의 파드를 다른곳으로 이동

실습

1. 일반 파드와 디플로이먼트에 속한 파드의 차이

[root@m-k8s ~]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
echo-hname-7894b67f-45vtm   1/1     Running   1          5d23h
echo-hname-7894b67f-b7jhn   1/1     Running   1          5d23h
echo-hname-7894b67f-gtd5z   1/1     Running   1          5d23h
echo-hname-7894b67f-nb7xj   1/1     Running   1          5d23h
echo-hname-7894b67f-vrtfw   1/1     Running   1          5d23h
echo-hname-7894b67f-xsc8b   1/1     Running   1          5d23h

[root@m-k8s ~]# kubectl delete pods echo-hname-7894b67f-45vtm

[root@m-k8s ~]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
echo-hname-7894b67f-b7jhn   1/1     Running   1          5d23h
echo-hname-7894b67f-gtd5z   1/1     Running   1          5d23h
echo-hname-7894b67f-nb7xj   1/1     Running   1          5d23h
echo-hname-7894b67f-vrtfw   1/1     Running   1          5d23h
echo-hname-7894b67f-w9k2w   1/1     Running   0          58s
echo-hname-7894b67f-xsc8b   1/1     Running   1          5d23h

 

디플로이먼트 삭제시 관련된 파드 모두 삭제 

[root@m-k8s ~]# kubectl delete deployment echo-hname

[root@m-k8s ~]# kubectl get pods
No resources found in default namespace.

2. cordon

cordon 기능 사용

[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.2.8/echo-hname.yaml
deployment.apps/echo-hname created

[root@m-k8s ~]# kubectl scale deployment echo-hname --replicas=9
deployment.apps/echo-hname scaled

 

배포된 파드의 세부 값 확인

[root@m-k8s ~]# kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
NAME                        IP               STATUS    NODE
echo-hname-7894b67f-2lmhp   172.16.132.10    Running   w3-k8s
echo-hname-7894b67f-2lshw   172.16.103.139   Running   w2-k8s
echo-hname-7894b67f-5t8vs   172.16.103.138   Running   w2-k8s
echo-hname-7894b67f-plsrx   172.16.132.9     Running   w3-k8s
echo-hname-7894b67f-pv7w7   172.16.132.8     Running   w3-k8s
echo-hname-7894b67f-qdksp   172.16.221.138   Running   w1-k8s
echo-hname-7894b67f-s56pp   172.16.221.136   Running   w1-k8s
echo-hname-7894b67f-tphfl   172.16.103.137   Running   w2-k8s
echo-hname-7894b67f-w6t9f   172.16.221.137   Running   w1-k8s

 

파드 수를 3개로 조정 후 node 확인

[root@m-k8s ~]# kubectl scale deployment echo-hname --replicas=3
deployment.apps/echo-hname scaled


[root@m-k8s ~]# kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
NAME                        IP               STATUS    NODE
echo-hname-7894b67f-pv7w7   172.16.132.8     Running   w3-k8s
echo-hname-7894b67f-s56pp   172.16.221.136   Running   w1-k8s
echo-hname-7894b67f-tphfl   172.16.103.137   Running   w2-k8s

 

w3 노드 cordon 기능 on

[root@m-k8s ~]# kubectl cordon w3-k8s
node/w3-k8s cordoned

[root@m-k8s ~]# kubectl get nodes
NAME     STATUS                     ROLES    AGE   VERSION
m-k8s    Ready                      master   6d    v1.18.4
w1-k8s   Ready                      <none>   6d    v1.18.4
w2-k8s   Ready                      <none>   6d    v1.18.4
w3-k8s   Ready,SchedulingDisabled   <none>   6d    v1.18.4

 

파드를 9개로 늘린 후 node 확인

[root@m-k8s ~]# kubectl scale deployment echo-hname --replicas=9
deployment.apps/echo-hname scaled

[root@m-k8s ~]# kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
NAME                        IP               STATUS    NODE
echo-hname-7894b67f-5whn5   <none>           Pending   w2-k8s
echo-hname-7894b67f-6qx87   <none>           Pending   w2-k8s
echo-hname-7894b67f-76777   172.16.103.140   Running   w2-k8s
echo-hname-7894b67f-c7dsr   <none>           Pending   w1-k8s
echo-hname-7894b67f-nnr7p   <none>           Pending   w1-k8s
echo-hname-7894b67f-pv7w7   172.16.132.8     Running   w3-k8s
echo-hname-7894b67f-s56pp   172.16.221.136   Running   w1-k8s
echo-hname-7894b67f-tphfl   172.16.103.137   Running   w2-k8s
echo-hname-7894b67f-wght5   <none>           Pending   w1-k8s

 

다시 3개로 파드 조정

[root@m-k8s ~]# kubectl scale deployment echo-hname --replicas=3
deployment.apps/echo-hname scaled

[root@m-k8s ~]# kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
NAME                        IP               STATUS    NODE
echo-hname-7894b67f-pv7w7   172.16.132.8     Running   w3-k8s
echo-hname-7894b67f-s56pp   172.16.221.136   Running   w1-k8s
echo-hname-7894b67f-tphfl   172.16.103.137   Running   w2-k8s

 

w3 노드 cordon 기능 off ( uncordoned )

[root@m-k8s ~]# kubectl uncordon w3-k8s
node/w3-k8s uncordoned

[root@m-k8s ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
m-k8s    Ready    master   6d    v1.18.4
w1-k8s   Ready    <none>   6d    v1.18.4
w2-k8s   Ready    <none>   6d    v1.18.4
w3-k8s   Ready    <none>   6d    v1.18.4

3. drain

 

w3 노드 드레인 시 에러 발생

[root@m-k8s ~]# kubectl drain w3-k8s
node/w3-k8s cordoned
error: unable to drain node "w3-k8s", aborting command...

There are pending nodes to be drained:
 w3-k8s
error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-hvchz, kube-system/kube-proxy-t8tqt

 

drain 명령과 ignore-daemonsets 옵션 함께 사용

[root@m-k8s ~]# kubectl drain w3-k8s --ignore-daemonsets
node/w3-k8s already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-hvchz, kube-system/kube-proxy-t8tqt
evicting pod default/echo-hname-7894b67f-pv7w7
pod/echo-hname-7894b67f-pv7w7 evicted
node/w3-k8s evicted

 

파드 확인

[root@m-k8s ~]# kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
NAME                        IP               STATUS    NODE
echo-hname-7894b67f-s56pp   172.16.221.136   Running   w1-k8s
echo-hname-7894b67f-tphfl   172.16.103.137   Running   w2-k8s
echo-hname-7894b67f-w5q2f   172.16.221.142   Running   w1-k8s

 

스케쥴 불가 상태 확인

[root@m-k8s ~]# kubectl get nodes
NAME     STATUS                     ROLES    AGE   VERSION
m-k8s    Ready                      master   6d    v1.18.4
w1-k8s   Ready                      <none>   6d    v1.18.4
w2-k8s   Ready                      <none>   6d    v1.18.4
w3-k8s   Ready,SchedulingDisabled   <none>   6d    v1.18.4

 

유지보수 끝났다 가정 , uncordon 명령 실행

[root@m-k8s ~]# kubectl uncordon w3-k8s
node/w3-k8s uncordoned
[root@m-k8s ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
m-k8s    Ready    master   6d    v1.18.4
w1-k8s   Ready    <none>   6d    v1.18.4
w2-k8s   Ready    <none>   6d    v1.18.4
w3-k8s   Ready    <none>   6d    v1.18.4

 

배포한 echo-hname 삭제

[root@m-k8s ~]# kubectl delete -f ~/_Book_k8sInfra/ch3/3.2.8/echo-hname.yaml
deployment.apps "echo-hname" deleted

[root@m-k8s ~]# kubectl get pods
No resources found in default namespace.

 

반응형
Comments