본문 바로가기
Programming/Kubernetes

[Kubernetes] kubelet error: Failed to start ContainerManager Invalid Node Allocatable configuration. Resource "memory" has an allocatable of

by guru_k 2021. 11. 3.
728x90
반응형

Cluster join을 마치고 kubelet이 정상적으로 실행 되지 않는 현상이 발생 했다.

# systemctl status kubelet
● kubelet.service - kubelet
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Wed 2021-11-03 16:00:11 CST; 3s ago
  Process: 314223 ExecStart=/usr/bin/kubelet ... --kube-reserved=cpu=200m,memory=4830Mi (code=exited, status=255)

kubelet이 계속적으로 재시작되고 있었으며 해당 현상의 원인을 파악하기 위해 system log를 살펴보았다. 로그를 살펴본 결과 아래와 같은 에러가 발생하며 kubelet 실행이 failed 되고 있던 상황

# journalctl -qu kubelet -n 100
...
kubelet[318130]: F1103 16:04:44.834682  318130 kubelet.go:1370] Failed to start ContainerManager Invalid Node Allocatable configuration. Resource "memory" has an allocatable of {{5322571776 0} {<nil>}  BinarySI}, capacity of {{-1392861184 0} {<nil>}  BinarySI}

무언가 Memory를 할당하는 과정에서 메모리 capacity를 초과하여 할당하려고 하여 문제가 생긴것으로 보이는 로그 발견.

추가적으로 kubelet 실행인자에 --kube-reserved 가 있는것을 발견.

kube-reserved 는 kubelet이 kubernetes의 system daemon들인 container runtime이나 node problem monitor 등을 위해서 resource를 할당을 설정하는 실행 인자이다.

 kubelet process는 아래처럼 실행되고 있었으며 cpu 200m, memory 4830Mi (약 4.8Gi) 가 최소한 필요한 상태였다.

/usr/bin/kubelet ... --kube-reserved=cpu=200m,memory=4830Mi

그래서 해당 머신의 Core와 Memory를 살펴 보았다.

$ kubectl describe node foo-node
...
Capacity:
 cpu:                16
 ephemeral-storage:  51475036Ki
 hugepages-2Mi:      0
 memory:             2837608Ki
 
 ...

16Core에 2.8Gi 의 capacity를 가진 머신이었으며 kubernetes system daemons 을 위한 resource reserved 를 하기엔 턱없이 부족한 상태.

머신 상황에 맞게 kubernetes system daemon resource reservation을 4.8Gi -> 1Gi 로 변경을 해보자.

# /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

/usr/bin/kubelet ... --kube-reserved=cpu=200m,memory=1000Mi

이후 kubelet을 재시작 해본다.

$ systemctl restart kubelet
$ systemctl status kubelet

● kubelet.service - kubelet
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-11-02 16:11:23 KST; 4s ago

이후 kubelet 정상 동작 확인

728x90
반응형

댓글