반응형
개요
(커널 업그레이드, libc 업그레이드, 하드웨어 수리 등으로) 한 노드를 리부트해야하는데 다운타임이 짧다면, Kubelet이 재시작할 때 해당 노드에 스케줄된 파드들을 재시작하려고 할 것이다. 만약 리부트가 길게 걸린다면 (컨트롤러 관리자의 --pod-eviction-timeout으로 제어되는 기본 시간은 5분이다.) 노드 컨트롤러는 사용불가한 노드에 묶여져 있는 파드들을 종료 시킬 것이다. 업그레이드 과정을 상세하게 통제할 수 있는 kubectl drain, kubectl 사용방법에 대해 알아보자.
구성환경
Kubernetes v1.17.4, docker-ce 19.03.8
- 노드에 스케줄할 수 없도록 표시하면서 해당 노드 상의 모든 파드들을 자연스럽게 종료하기 위해 kubectl drain을 사용한다.
usage ) kubectl drain <node Name>
shell> kubectl get node NAME STATUS ROLES AGE VERSION master1 Ready master 17d v1.17.4 worker1 Ready ingress 17d v1.17.4 master2 Ready master 17d v1.17.4 master3 Ready master 17d v1.17.4 worker2 Ready <none> 2d4h v1.17.4 shell> kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-5d9b77cbff-mvjqv 1/1 Running 0 20s 10.38.0.4 worker1 nginx-deployment-5d9b77cbff-pk6jl 1/1 Running 0 20s 10.45.0.2 worker2 nginx-deployment-5d9b77cbff-tx92b 1/1 Running 0 20s 10.45.0.3 worker3 shell> kubectl drain worker2 node/worker2 cordoned evicting pod "nginx-deployment-5d9b77cbff-pk6jl" evicting pod "nginx-deployment-5d9b77cbff-tx92b" pod/nginx-deployment-5d9b77cbff-tx92b evicted pod/nginx-deployment-5d9b77cbff-pk6jl evicted node/worker2 evicted shell> kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-5d9b77cbff-mvjqv 1/1 Running 0 61s 10.38.0.4 worker1 nginx-deployment-5d9b77cbff-pmhsl 1/1 Running 0 23s 10.38.0.7 worker1 nginx-deployment-5d9b77cbff-vbc9z 1/1 Running 0 23s 10.38.0.5 worker1 shell> kubectl get node NAME STATUS ROLES AGE VERSION master1 Ready master 17d v1.17.4 worker1 Ready ingress 17d v1.17.4 master2 Ready master 17d v1.17.4 master3 Ready master 17d v1.17.4 worker2 Ready,SchedulingDisabled 2d4h v1.17.4 shell> |
- 해당 노드에 유지보수 작업을 수행이 완료된후 해당 노드가 다시 스케줄될 수 있도록 하기 위해서는 kubectl uncordon 을 사용한다.
Usage : kubectl uncordon <node Name>
shell> kubectl get node NAME STATUS ROLES AGE VERSION master1 Ready master 17d v1.17.4 worker1 Ready ingress 17d v1.17.4 master2 Ready master 17d v1.17.4 master3 Ready master 17d v1.17.4 worker2 Ready,SchedulingDisabled <none> 2d4h v1.17.4 shell> kubectl uncordon worker2 node/worker2 uncordoned shell> kubectl get node NAME STATUS ROLES AGE VERSION master1 Ready master 17d v1.17.4 worker1 Ready ingress 17d v1.17.4 master2 Ready master 17d v1.17.4 master3 Ready master 17d v1.17.4 worker2 Ready <none> 2d4h v1.17.4 shell> |
반응형
'가상화 > Kubernetes' 카테고리의 다른 글
[kubernetes] 외부 nginx + kubernetes tomcat 연동 (0) | 2020.04.15 |
---|---|
[kubernetes] Kubernetes에서 Ingress 와 Tomcat 연동 (0) | 2020.04.10 |
[Docker] Priviate registry 구성 #4 - imagePullSecrets 작성 (0) | 2020.04.09 |
[kubernetes] Pod 재시작 (1) | 2020.04.08 |
[kubernetes] 인그레스(Ingress)를 사용하여 HTTP(S) 부하 분산기 구성 #2 - HTTPS 부하 분산 (0) | 2020.04.07 |