Skip to content

쿠버네티스에서 노드 유지보수

쿠버네티스 클러스터에서 노드를 유지보수(예: 소프트웨어 업그레이드, 보안 패치 적용 등)해야 하는 시나리오를 처리하는 방법에 대해 배워보겠습니다.

유지보수 시 노드 처리 방법

노드를 유지보수해야 할 때, 해당 노드에 배포된 포드에 대한 접근이 불가능해지며, 이는 사용자에게 영향을 미칠 수 있습니다. 쿠버네티스는 노드가 다시 온라인 상태가 될 때까지 기다렸다가, 일정 시간(기본적으로 5분)이 지나면 해당 노드의 포드를 종료하고 다른 노드에 재생성합니다.

노드가 오프라인일 때 처리 과정

  • 5분 미만: 노드가 다시 온라인이 되면 포드도 함께 온라인 상태로 복귀합니다.
  • 5분 초과: 쿠버네티스는 노드의 포드를 종료하고, 필요에 따라 다른 노드에 포드를 재생성합니다.

노드 유지보수를 위한 명령어

  1. 노드 배수(drain): 선택한 노드에서 모든 포드를 안전하게 제거하고, 해당 노드를 스케줄링 불가능 상태로 변경합니다.

    bash
    kubectl drain <노드> --ignore-daemonsets
  2. 노드 격리(cordon): 노드를 스케줄링 불가능 상태로 변경하지만, 기존 포드는 그대로 유지합니다.

    bash
    kubectl cordon <노드>
  3. 노드 스케줄 가능 상태로 변경(uncordon): 노드를 다시 스케줄링 가능 상태로 변경합니다.

    bash
    kubectl uncordon <노드>

노드를 유지보수할 때는 먼저 drain 명령어로 포드를 안전하게 다른 노드로 이동시킨 후, 유지보수 작업을 완료하고 uncordon 명령어로 노드를 다시 활성화해야 합니다. 노드를 cordon하여 새로운 포드가 스케줄링되지 않도록 할 수도 있습니다.

유지보수 중 주의사항

유지보수 작업을 진행하기 전에, 작업에 따른 영향을 최소화하기 위해 노드와 포드의 상태를 정확히 파악하고 계획을 세워야 합니다. 또한, 유지보수 후에는 노드가 정상적으로 클러스터에 복귀했는지 확인하는 과정이 필요합니다.

실습을 통해 drain, cordon, uncordon 명령어 사용법을 익혀보세요. 다음 강의에서 뵙겠습니다.

K8s Reference Docs

https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/