Kubelet
이란 각 노드에서 실행되는 기본 Node Agent
입니다.
위의 구성도에 보이는 것 처럼 api-server
와 통신하며, PodSpec
을 사용해 PodSpec
에 기술된 컨테이너들이 정상적으로 작동되도록 돕습니다.
Worker Node
가 배라면 Kubelet
은 선장이라고 할 수 있습니다.
관리자가 Pod
을 배포하려고 할 경우, api-server
를 비롯한 컨트롤 플레인의 컴포넌트들은 명령에 대한 인가 및 인증을 수행하고, 선언된 상태와 일치하지 않는 Pod
이 있는지 확인하고, 어떤 Node
에 Pod
을 배치하면 좋을지 결정합니다.
어디에 배치할지는 Master Node
의 컴포넌트들 정확히는 Scheduler
가 결정하지만 실제로 Container runtime
(Docker
등)에 배치를 명령하는 것은 Kubelet
의 역할입니다.
만약, Worker Node
에서 동작중인 Kubelet
이 정지되면 컨테이너 런타임에 요청을 보내는 역할을 수행해주는 컴포넌트가 정지되었으므로 Pod
생성, 삭제 등이 해당 Node
에서 정상적으로 수행되지 않습니다.
참고 : Kubernetes
실습을 위한 Minikube
환경 구성
Minikube
는 로컬 환경에서 Worker Node
와 Master Node
를 별도로 구성할 필요 없이 하나의 호스트에 구성해주는 툴입니다.
Worker Node
와 Master Node
를 구축하고 설정하는 수고가 들지 않기 때문에, 간단한 테스트를 수행할 때 활용하기 좋습니다.
Minikube
의 설치 방법에 대해서는 위의 참고 문서를 참고해 주세요.
기본적으로 Minikube
Kubernetes
클러스터에 올라와 있는 Pod
들은 아래의 명령어를 통해 조회할 수 있습니다.
# 클러스터의 모든 Pod 조회
$ kubectl get Pod --all-namespaces
위 명령의 결과를 보면 Minikube
를 통해 구성한 Kubernetes
클러스터에는 etcd
, api-server
, controller
, Scheduler
등 Master Node
의 컴포넌트들과 kube-proxy
가 Pod
형태로 배포된 것을 확인할 수 있습니다.
그럼 Kubelet
은 어디에 있을까요?
Kubelet
은 Worker Node
에서 서비스 형태로 동작하고 있으므로 다음 명령어를 통해 확인할 수 있습니다.
# Kubelet 서비스 확인
$ systemctl status kubelet
그렇다면 Kubelet
이 멈추면 어떻게 될까요?
Kubelet
이 하는 역할을 알고 있다면 쉽게 유추해 낼 수 있습니다.
Kubelet
은 Worker Node
의 런타임 환경에 실제로 Pod
를 배포하는 역할을 수행하므로 Kubelet
이 정지된 Worker Node
에 Pod
이 배포되지 않을 것입니다.
실제로 Kubelet
을 정지시켜 보겠습니다.
# Kubelet 정지
$ systemctl stop Kubelet
Kubelet
이 정지된 것을 확인할 수 있습니다.
그럼 이제 Master Node
에서 클러스터에 Pod
을 배포해보겠습니다.
# `Pod` 생성
$ kubectl run
정말 간단한 nginx Pod
을 배포하는데 2분 가까이 시간이 지나도 배포가 되지 않고 있습니다.
Worker Node
에 Kubelet
이 정지되어 컨테이너 런타임을 통해 Pod
을 배포하지 못하고 있기 때문입니다.
이제 다시 Kubelet
을 실행시키고 Pod
이 생성되었는지 확인하겠습니다.
Pod
이 정상적으로 생성된 것을 확인할 수 있습니다.
이렇게 Kubelet
은 Worker Node
에서 컨테이너 런타임을 이용해서 Pod
을 생성해주는 역할을 수행하고, Kubelet
서비스에 문제가 생기면 해당 Worker Node
에서는 Pod
을 배포하지 못하게 됩니다.