DevOps

Kubernetes - drain, cordon, uncordon

Vince_rf 2024. 11. 3. 01:14

kubectl drain, cordon, uncordon은 쿠버네티스 노드의 상태를 조정하고 관리하기 위한 명령어입니다. 주로 노드에서 유지보수 작업이나 업그레이드가 필요할 때 사용되며, 파드가 안전하게 옮겨지거나 배치되지 않도록 도와줍니다.

1. kubectl cordon

  • 기능: 노드를 스케줄링 불가 상태로 만듭니다. 이 상태에서는 새로운 파드가 해당 노드에 스케줄링되지 않습니다.
  • 용도: 유지보수가 필요하거나 더 이상 파드를 배포하지 않을 노드를 잠시 제외할 때 사용합니다.
  • 예시:
     
    이 명령을 실행하면 해당 노드에 "SchedulingDisabled" 상태가 표시됩니다.
kubectl cordon <node-name>

2. kubectl uncordon

  • 기능: cordon 상태에서 해제하여 노드를 스케줄링 가능 상태로 만듭니다.
  • 용도: 유지보수가 끝나거나 다시 파드를 배포할 준비가 된 노드를 활성화할 때 사용합니다.
  • 예시:
     
kubectl uncordon <node-name>

3. kubectl drain

  • 기능: 노드에서 실행 중인 모든 파드를 안전하게 퇴거(evict) 시키고, 노드를 스케줄링 불가 상태로 만듭니다.
  • 용도: 노드가 다운되거나 제거될 예정일 때 파드를 안전하게 옮기기 위해 사용합니다.
    • drain 명령은 디플로이먼트, 레플리카셋, 데몬셋 등에서 관리되는 파드를 다른 노드로 옮기고, 일반 파드나 상태가 없는 파드의 경우 삭제할 수 있습니다.
  • 예시:
     
    • --ignore-daemonsets: 데몬셋으로 생성된 파드를 무시합니다.
    • --delete-emptydir-data: emptyDir 볼륨을 사용하는 파드의 데이터를 삭제합니다.
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

요약

명령어기능용도

cordon 노드를 스케줄링 불가 상태로 변경 파드를 새로 스케줄링하지 않도록 설정
uncordon 노드를 스케줄링 가능 상태로 변경 노드에 다시 파드를 스케줄링할 때
drain 파드를 안전하게 퇴거하고 스케줄링 불가 설정 유지보수나 제거 전 파드 이동 및 정리

이 명령어들은 노드의 관리와 유지보수에 있어 필수적인 도구들로, 클러스터의 안정성과 가용성을 유지하는 데 도움을 줍니다.