[CKA] 노드 OS 업그레이드

노드 OS 업그레이드의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.

클러스터의 노드를 제거해야하는 시나리오를 가정합니다.
유지 보수 목적으로 업그레이드, 패치 적용 및 보안 패치등의 이유로 노드를 다운시켜야한다면 어떻게 조치할 수 있을 것인지에 대한 문서입니다.

노드 조치

마스터 노드는 워커 노드가 5분간 kubelet 응답이 없다면 노드가 다운 된걸로 인식합니다.
따라서 노드가 5분 이상 응답이 없는 작업을 하거나 조치가 필요할 때, 안전한 방식으로 해당 노드의 파드를 다른 노드로 종료되었다가 재생성 되도록 drain 작업을 수행합니다.
kubectl drain node-1 해당 명령어를 통해 node1을 조치하였다면 이후 작업 후 다시 마스터 노드에서 감지할 수 있지만 스케줄러에서는 drain된 노드에 파드를 할당할 수 없습니다..
kubectl cordan node-2 라는 명령 또한 존재하는데 해당 명령에서는 지정한 노드에 새로운 파드가 할당되지 않도록 할 수 있습니다.
kubectl uncordon node-1 을 통해 다시 파드 일정을 잡을 수 있지만 다른 노드로 옮겨진 파드가 기존의 노드로 돌아오진 않습니다

세 가지 명령어 핵심 정리:

  1. kubectl drain node-1
  1. kubectl cordon node-2
  1. kubectl uncordon node-1

ReplicaSet에 속하지 않은 단일 파드는 Kubernetes가 자동으로 다른 노드로 이동시킬 수 있는 방법이 없습니다. 이런 파드를 ‘관리되지 않는 파드(unmanaged pod)‘라고 부릅니다.

kubectl drain node01 --ignore-daemonsets

node/node01 cordoned
error: unable to drain node "node01" due to error:cannot delete cannot delete Pods that declare no controller (use --force to override): default/hr-app, continuing command...
There are pending nodes to be drained:
 node01
cannot delete cannot delete Pods that declare no controller (use --force to override): default/hr-app