study

[Kubernetes] 마스터 노드가 NotReady였던 이유? containerd cgroup 설정으로 해결!

ideas9710 2025. 7. 10. 14:32
반응형

 


Kubernetes 클러스터를 구축하면서 마스터 노드가 NotReady 상태로 계속 유지되는 문제가 있었습니다.
CNI(예: Flannel)도 설치했고, kubeadm init도 성공했는데 왜일까 싶었죠.

결론부터 말하면, containerd의 CGroup 드라이버 설정이 잘못되어 있었기 때문이었습니다.
이 글에서는 문제 증상부터 원인, 해결 방법까지 정리해봅니다.


🧩 문제 상황

kubectl get nodes
NAME      STATUS     ROLES           AGE   VERSION
master    NotReady   control-plane   3m    v1.32.6
  • kubeadm init은 성공
  • CNI 설치도 완료
  • 그러나 마스터 노드는 계속 NotReady

🔍 원인: containerd의 CGroup 드라이버 설정 불일치

기본적으로 Kubernetes의 kubelet은 systemd를 cgroup 드라이버로 사용합니다.
하지만 containerd는 기본 설정이 cgroupfs로 되어 있어, 둘이 충돌하게 됩니다.
이럴 경우 kubelet이 containerd와 정상적으로 연결되지 못해서 NotReady가 지속됩니다.


✅ 해결 방법: containerd 설정 수정

# 1. 기본 설정 파일 생성
containerd config default | tee /etc/containerd/config.toml

# 2. CGroup 설정을 systemd로 변경
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

# 3. 데몬 재시작
systemctl restart containerd
systemctl restart kubelet

🔄 적용 결과

kubectl get nodes
NAME      STATUS   ROLES           AGE   VERSION
master    Ready    control-plane   5m    v1.32.6

드디어 마스터 노드가 Ready 상태로 전환되었습니다!


❗ 문제를 안 고치면 어떤 일이?

journalctl -u kubelet -f

에서 아래와 같은 에러가 나타납니다:

kubelet cgroup driver: "systemd" is different from container runtime cgroup driver: "cgroupfs"

이건 kubelet과 containerd 사이의 드라이버 불일치로 통신에 문제가 있다는 뜻입니다.


✅ Docker와의 차이점도 참고하세요

런타임 설정 위치 설정 내용

Docker /etc/docker/daemon.json "exec-opts": ["native.cgroupdriver=systemd"]
containerd /etc/containerd/config.toml SystemdCgroup = true

📌 마무리

마스터 노드가 NotReady 상태로 고정될 경우,
containerd를 사용하고 있다면 반드시 아래 설정을 확인해보세요.

grep SystemdCgroup /etc/containerd/config.toml
# 결과: SystemdCgroup = true

이 단 하나의 설정이 NotReady 문제의 핵심이었습니다.

 

 

반응형