k8s

CKA 준비 (9) Node 관리

Joon0464 2022. 5. 31. 21:28

이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 https://www.youtube.com/watch?v=KdATmTulf7s&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=1 

 

 

 

이론)

- 노드 정보 확인

$ sudo kubectl get nodes

- 노드 더 많은 정보 확인

- 특정 노드 상세 정보 확인

$ sudo kubectl describe nodes [노드 명]

label, annotation, 생성 일자, internal ip, system info, event 정보 등등 표시된다.

- 특정 노드에 파드 생성 못하도록 설정

$ sudo kubectl cordon [노드 명]

node1 에는 더 이상 신규 생성되는 pod가 스케쥴링 되지 않는다.

- 노드 cordon 상태 해제 하기

$ sudo kubectl uncordon [노드 명]

node1이 다시 pod가 스케쥴링 될 수 있는 상태로 바뀐다.

- 특정 노드에 생성되어 있는 모든 pod drain 하기

$ sudo kubectl drain [노드 명]

마스터 노드의  daemonset에 의해 생성된 pod들로 인해 drain이 불가능하다.

daemonset : 클러스터 전체에서 pod를 생성할 때 사용, 특정 노드 또는 모든 노드에 실행되어야 할 특정 파드를 관리하는 것

$ sudo kubectl drain [노드 명] --ignore-daemonsets

--ignore-daemonsets 옵션을 사용하면 정상적으로 drain이 진행된다.

drain 명령어를 사용하면 cordon 명령어와 마찬가지로 해당 노드는 더 이상 신규 pod가 스케쥴링 되지 않는다.

 

문제)

작업 클러스터 : node1.example.com

  • Set the node named node1.example.com as unavailable and reschedule all the pods running on it.

풀이)

$ sudo kubectl drain node1.example.com --ignore-daemonsets --force

특정 컨테이너가 스토리지를 사용중-> 사용중인 데이터 디렉터리까지 지우려면 옵션을 추가해야한다.

$ sudo kubectl drain node1.example.com --ignore-daemonsets --force --delete-emptydir-data

정상적으로 drain이 진행된다.
drain이 정상적으로 되었는지 확인