본문으로 건너뛰기

[Kubernetes] Node 상태 확인

kubectl get node, kubectl top nodes로 Kubernetes 노드 상태와 사용량을 확인하고 cordon, uncordon, drain으로 노드 스케줄링을 관리하는 방법을 정리합니다.

요약

  • kubectl get node -o wide로 노드 상태, 버전, OS 이미지, 커널, 컨테이너 런타임까지 확인할 수 있습니다.
  • kubectl top nodes로 노드별 CPU와 메모리 사용량을 볼 수 있습니다.
  • kubectl cordon과 uncordon으로 노드 스케줄 가능 여부를 바꾸고, kubectl drain으로 유지보수 전에 노드를 비웁니다.

테스트 환경 k3s v1.18.8+k3s1, CentOS Linux 7 (Core), containerd 1.3.3-k3s2

목차

Check The Node

이 문서는 Kubernetes Node 를 확인하는 방법에 대해 포함되어 있습니다.

Kubernetes Node

Kubernetes Node 는 최소한 다음과 같이 동작합니다.

  • Kubelet은, 쿠버네티스 마스터와 노드 간 통신을 책임지는 프로세스이며, 하나의 머신 상에서 동작하는 파드와 컨테이너를 관리합니다.
  • (도커, rkt)와 같은 컨테이너 런타임은 레지스트리에서 컨테이너 이미지를 가져와 묶여 있는 것을 풀고 애플리케이션을 동작시키는 책임을 맡습니다.

Check Kubernetes Node

  • Node 정보 확인
      $ kubectl get node
      NAME                    STATUS   ROLES    AGE   VERSION
      fastvm-centos-7-7-110   Ready    master   16d   v1.18.8+k3s1
    
  • Node 상세 정보 확인
      $ kubectl get node -o wide
      NAME                    STATUS   ROLES    AGE   VERSION        INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
      fastvm-centos-7-7-110   Ready    master   16d   v1.18.8+k3s1   192.168.200.110   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   containerd://1.3.3-k3s2
    
  • Node 성능 사용량 확인
      $ kubectl top nodes
      NAME                    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
      fastvm-centos-7-7-110   127m         6%     573Mi           66%
    

Node Management

  • Node Schedule 관련
      $ kubectl --help
      ...
        cordon        Mark node as unschedulable
        uncordon      Mark node as schedulable
        drain         Drain node in preparation for maintenance
      ...
    
  • Mark node as unschedulable
      $ kubectl cordon <node>
    
  • Mark node as schedulable
      $ kubectl uncordon <node>
    
  • Drain node in preparation for maintenance
      $ kubectl drain <node>
    

참고 문서

자주 묻는 질문

kubectl cordon과 drain의 차이는 무엇인가요?

kubectl cordon은 노드를 스케줄 불가(unschedulable)로 표시만 하고, kubectl drain은 유지보수를 위해 노드를 drain합니다. 다시 스케줄을 허용하려면 kubectl uncordon을 사용합니다.

노드의 컨테이너 런타임과 커널 버전은 어떻게 확인하나요?

kubectl get node -o wide를 실행하면 OS-IMAGE, KERNEL-VERSION, CONTAINER-RUNTIME 열이 함께 표시됩니다.

Kubernetes 노드에서 Kubelet은 어떤 역할을 하나요?

Kubelet은 쿠버네티스 마스터와 노드 간 통신을 책임지는 프로세스이며, 해당 머신에서 동작하는 Pod와 컨테이너를 관리합니다.