본문 바로가기
개발/개발공부

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

by 치킨개발자 2023. 4. 1.
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가 띄워지는 것을 볼 수 있음

반응형

댓글