SaevOps
[쿠버네티스] 파드의 동작 보증 / cordon / drain 본문
반응형
이론
일반 파드와 디플로이먼트에 속한 파드의 차이
- 일반 파드 : 파드 삭제
- 디플로이먼트에 속한 파드 : 파드 삭제 + 새로운 파드 생성
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.
반응형
'클라우드 > Kubernetes' 카테고리의 다른 글
[쿠버네티스] 노드포트 / 클러스터 내부 접속 / 부하분산 (0) | 2022.10.25 |
---|---|
[쿠버네티스] 파드 업그레이드 / 복구 (0) | 2022.10.21 |
[쿠버네티스] 디플로이먼트 / 레플리카 / 스펙 (0) | 2022.10.17 |
[쿠버네티스] Run과 Create의 차이 (0) | 2022.10.14 |
[쿠버네티스] 구성 요소의 기능 검증 (0) | 2022.09.16 |
Comments