Cloud Native/K8s

k8s 실전: 노드 관리

lys4321 2026. 2. 24. 00:48

kubectl cordon [옵션]

  • 노드를 스케줄 불가(unschedulable) 상태로 만드는 명령어
    • 새 Pod가 해당 노드에 더 이상 배치되지 않도록 하는
  • 사용처
    • 노드 점검, 패치, 커널 업데이트 등 유지보수 작업 시
    • 노드 Drain 작업 전
    • 노드에 문제가 발생하여 디버깅 시
  • cordon 과 drain 의 차이
    • cordon은 새 Pod가 그 노드에 배치되지 않도록 막음
    • drain은 기존 Pod를 다른 노드로 강제 옮김
  • 주로 사용되는 옵션
    • --dry-run
      • none
        • 실제로 적용 시
      • client
        • 클라이언트에서 보낼 JSON 만 출력
        • 실제로 요청은 하지 않음
      • server
        • 서버에 요청은 보내지만 리소스는 저장 안함
    • --selector

kubectl uncordon [옵션]

  • cordon이나 drain으로 스케줄링 불가로 만들었던 노드를 다시 스케줄링 가능으로 변경 시 사용하는 명령
  • kubectl uncordon 노드명 [옵션]
  • 주로 사용되는 옵션
    • --dry-run
    • --selector

kubectl drain <노드명> [옵션]

  • 노드를 비우고 유지보수 준비상태로 만들기
    => 기존에 있던 Pod들을 다른 노드에 옮김
  • 작업순서
    • 노드를 자동으로 unschedulable 상태로 변경(cordon)
    • Pod를 하나씩 축출(Evict) 또는 삭제
      • 축출 시, PDB(PodDisruptionBudget) 지키면서 종료
      • 축출이나 삭제를 하지않는 경우
        • mirror Pods
          • kubelet이 만든 static Pod는 삭제 불가
        • DaemonSet의 Pod의 경우 Drain이 중단
            - 강제로 하려면 --ingnore-daemonsets 필요
        • 고아 파드의 경우 --force 가 없다면 Drain 중단
        • emptyDir Pod 를 제거 시 --delete-emptydir-data 가 없다면 Drain 중단
  • 옵션의 종류
    • --chunk-size
      • 청크 사이즈 설정
    • --delete-emptydir-data
      • false 시, emptydir 발견 시, Drain 중단 true면 삭제
    • --disabled-eviction
      • 축출을 사용할 수 있어도 Delete 로 Pod 삭제
      • PDB 무시 됨
    • --dry-run
    • --grace-period
    • --force
    • --ignore-daemonsets
    • --pod-selector
      • 특정 Pod만 골라서 Drain 시, 사용
    • -selector
    • --skip-wait-for-delete-timeout
      • 삭제가 완료되지 않은 파드를 일정 시간 기다렸다가 다음으로 넘길 때 사용
    • --timeout
      • Drain 의 전체 실행 타임아웃

kubectl taint node <노드 명>

  • 노드에 조건을 추가/수정/삭제 하는 명령
  • taint는 노드에만 적용이 가능
  • taint의 의미는 노드가 특정 Pod를 거부하도록 하는 규칙
    • Pod느 특정 toleration(관용)을 가져서 특정 taint를 허용 가능
  • 키값:이펙트 구성을 가짐
    • 키는 taint 이름을 의미
    • 값은 선택적이므로 없어도 됨
    • 이펙트는 파드에 어떤 영향을 줄지 지정
  • taint 삭제 시
    • ~~~ 키에 '-' 붙임
    • ~~~ 키=값에 '-' 붙임
    • ~~~ 키=값:이펙트에 '-' 붙임
  • 키 규칙
    • 영문이나 숫자로 시작
    • 영문, 숫자, '-', '_', '.' 가능
    • 최대 253자
    • DNS prefix + '/' + 키 형태도 가능
  • 값 규칙
    • 없어도 됨
    • 영문이나 숫자로 시작
    • 영문, 숫자, '-', '_', '.' 가능
    • 최대 63자
  • 이펙트의 종류
    • NoSchedule
      • toleration 없는 Pod는 이 노드에 새로 스케줄되지 않음
    • PreferNoSchedule
      • 가능하면 오지 않을 뿐, 강제는 아님
      • 소프트 룰
    • NoExcute
      • toleration이 없는 Pod는 노드에서 즉시 퇴출당하고 새로 스케줄 되지도 않음
  • kubectl taint node 노드명 [옵션]
  • 옵션의 종류
    • --all
    • --dry-run
    • --field-manager
      • 서버사이드 어플라이에서 필드 소유자 이름 명시 시
    • -o
    • --selector
    • --show-managed-field
    • --template
      • go 템플릿 사용 시 템플릿 문자열 또는 파일 지정
    • --validate
      • strict
        • 기본
        • 엄격히
      • warn
        • 경고만
      • ignore
        • 검증 없음