본문 바로가기

가상화/Kubernetes

[kubernetes] 노드 유지보수

반응형

개요

(커널 업그레이드, 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>

 

반응형