개발/개발공부

Kubernetes cordon, drain / pod schedule, 제거, node

치킨개발자 2023. 4. 1. 10:33
728x90

Kubernetes cordon


Kubernetes 클러스터를 사용하다보면 특정 서버 노드에 문제가 생겨서 서비스에서 제외할 필요가 생김

이럴때 cordon명령어를 통해 더이상 Pod가 해당 노드에 스케줄링 되지 않도록 설정 가능

% kubectl get nodes
NAME                STATUS   ROLES                  AGE   VERSION
dev-chicken1        Ready    control-plane          1d    v1.21.6
dev-chicken2        Ready    <none>                 1d    v1.21.6
dev-chicken3        Ready    <none>                 1d    v1.21.6
dev-chicken4        Ready    <none>                 1d    v1.21.6

이렇게 node중 3번 노드에 문제가 생겼다면 cordon 명령어를 실행해주면 됨

$kubectl cordon dev-chicken3

NAME기준으로 명령어를 실행

% kubectl get nodes
NAME                STATUS                      ROLES                  AGE   VERSION
dev-chicken1        Ready                       control-plane          1d    v1.21.6
dev-chicken2        Ready                       <none>                 1d    v1.21.6
dev-chicken3        Ready,SchedulingDisabled    <none>                 1d    v1.21.6
dev-chicken4        Ready                       <none>                 1d    v1.21.6

SchedulingDisabled상태가 추가된 것을 확인 가능

 

Kubernetes drain


이미 띄워져있는 Pod들도 다른 Node로 이전을 시켜야할때 drain 명령어를 사용

앞서 dev-chicken3의 노드의 Pod를 다른 노드로 이전하고 싶다면

$kubectl drain dev-chicken3

명령어를 사용하면 됨

데몬셋을 사용하고 있고, 데몬셋을 무시하고 이전을 하려면

--ignore-daemonsets=true

옵션을 추가하면 되고

emptydir을 사용하는 Pod를 옮기려면

--delete-emptydir-data

옵션을 추가하여 사용

$kubectl drain chicken-dev3 --ignore-daemonsets=true --delete-emptydir-data

둘다 사용하고 있다면 이렇게 명령어를 실행하면 노드의 pod들이 evict되고 새로 scheduling되는 것을 볼 수 있음

 

Kubernetes uncordon


노드의 문제를 해결한 뒤 다시 scheduling 될 수 있도록 하는 명령어

$kubectl uncordon chicken-dev3

간단하게 uncordon만 하게되면 다시 정상적으로 pod가 띄워지는 것을 볼 수 있음

반응형