본문으로 건너뛰기

Kubelet


개요

  • kubelet은 각 노드에서 실행되는 에이전트로, 노드와 쿠버네티스 클러스터 간의 단일 접점 역할을 한다.
  • 스케줄러가 어떤 노드에 Pod를 배치할지 결정하면, 실제로 Pod를 생성하고 실행하는 것은 kubelet의 역할이다.
    • 조금 더 정확하게 말하면 kubelet은 container runtime(containerd, CRI-O 등)과 연동해 컨테이너를 생성하고 관리한다.

주요 역할

  1. kube-apiserver를 통해 전달받은 Pod 객체(데이터)를 기반으로 Pod를 생성한다.
  2. 컨테이너 런타임에 애플리케이션 컨테이너 실행을 요청한다.
  3. 실행 중인 Pod와 컨테이너의 상태를 지속적으로 모니터링한다.
  4. 상태 정보를 주기적으로 kube-apiserver에 보고한다.
  5. Pod가 종료되거나 재시작이 필요한 경우 해당 작업을 수행한다.

설치

Package Manager Setup

설치

sudo apt-get install -y kubeadm=<version>

설정 조회

sudo nano /var/lib/kubelet/config.yaml
  • 위 경로에 yaml 형태로 설정이 저장되어있다.
  • 이때까지 다뤘던 컴포넌트와 다르게 Pod 형태가 아니라 systemd에서 실행되므로 위 설정을 바꾼 뒤 적용하려면 아래 명령어를 입력해야한다.
    • sudo systemctl daemon-reload
    • sudo systemctl restart kubelet

Manual Setup (Kubernetes The Hard Way)

설치

wget https://dl.k8s.io/v1.31.14/bin/linux/amd64/kubelet

sudo mv kubelet /usr/local/bin/
sudo chmod +x /usr/local/bin/kubelet

sudo nano /etc/systemd/system/kubelet.service
  • kubeadm을 사용하더라도 kubelet은 자동으로 배포되지 않는다.
  • 따라서 각 노드에 직접 설치해야 한다.
[Unit]
Description=Kubernetes Kubelet
Documentation=https://kubernetes.io/docs/
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/usr/local/bin/kubelet \
--config=/var/lib/kubelet/kubelet-config.yaml \
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
--container-runtime-endpoint=unix:///run/containerd/containerd.sock \
--image-pull-progress-deadline=2m \
--node-ip=<NODE_IP> \
--register-node=true \
--v=2
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start kubelet
sudo systemctl enable kubelet
  • 위 명령어는 kubelet를 바이너리를 직접 다운로드하여 설치하는 명령어이다.
  • /usr/local/bin/ 으로 이동시켜 PATH에 등록한다.
  • 이에 시스템 전역 실행 파일로 사용가능한 것이다.

설정 조회

cat /etc/systemd/system/kubelet.service
  • systemd에 설치했기 때문에 위 경로에서 설정을 조회하고 수정할 수 있다.
  • 해당 파일을 수정한 뒤 아래 명령어 수행해야 적용된다.
    • sudo systemctl daemon-reload
    • sudo systemctl restart kubelet

레퍼런스