본문 바로가기
Kubernetes & Docker

쿠버네티스(kubernetes) kubelet.go node not found #NotReady

by ahsung 2021. 1. 24.

 

 

$ kubectl get nodes
NAME                            STATUS   ROLES     AGE    VERSION
asung-cloud                     NotReady master    177d   v1.18.6
asung-cloud2                    Ready    worker    177d   v1.18.6
asung-cloud3                    Ready    worker    177d   v1.18.6
asung-cloud4                    Ready    ingress   173d   v1.18.6

 

어느날 보니 NotReady 상태가 걸려있었다 ㅡ.ㅡ

 

 

트러블 슈팅 과정

 

1. kubelet을 재부팅하여도 고쳐지지 않아서, master 서버 자체를 재부팅

$ sudo systemctl restart kubelet
$ sudo reboot

 

2.  오히려 kubelet 서비스가 시작되지 않음(systemctl status kubelet) ㅡ.ㅡ  에러 메세지를 자세히 읽어보니 swap을 꺼달라는 메세지

$ sudo swapoff -a

아마도 재부팅하면서 swap 설정이 켜졌나봄

 

3. kubelet restart하고 최근 메세지를 확인 

$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since 일 2021-01-24 03:34:52 KST; 23s ago
     Docs: https://kubernetes.io/docs/
 Main PID: 32545 (kubelet)
    Tasks: 16
   Memory: 23.5M
   CGroup: /system.slice/kubelet.service
           └─32545 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf...

 1월 24 03:35:15 aive-cloud kubelet[32545]: E0124 03:35:15.907622   32545 kubelet.go:2268] node "asung" not found
 1월 24 03:35:16 aive-cloud kubelet[32545]: E0124 03:35:16.007808   32545 kubelet.go:2268] node "asung" not found
 1월 24 03:35:16 aive-cloud kubelet[32545]: E0124 03:35:16.108023   32545 kubelet.go:2268] node "asung" not found
 1월 24 03:35:16 aive-cloud kubelet[32545]: E0124 03:35:16.208983   32545 kubelet.go:2268] node "asung" not found
 1월 24 03:35:16 aive-cloud kubelet[32545]: E0124 03:35:16.309227   32545 kubelet.go:2268] node "asung" not found

#혹은
$ journalctl -u kubelet | tail -n 10

 

4. kubelet.go node "asung" not found 라는 메세지를 발견,, 이걸 힌트로 삼아 리서치...

 

kubelet에서 인식하는 nodeName은 컴퓨터의 hostname이다. 즉 kubelet에서 nodeName을 바꾸려면 host컴퓨터의 hostname을 변경하면 되는것!

 

하지만,, kubernetes 클러스터에서 설정되어 있는 NodeName은 위의 "kubectl get nodes"에서 보듯 "asung-cloud"이다.

예전에 테스트겸 hostname을 변경했던게 원인인듯 하하...

 

 

5. 해결방법은

 

 5-1) hostname을 "asung-cloud"로 변경하거나,

$ hostnamectl set-hostname asung-cloud

 

 5-2) 쿠버네티스 클러스터에 설정되어 있는 내용중에 nodeName부분을 변경하던가~~

$ kubectl edit node asung-cloud
error: At least one of apiVersion, kind and name was changed

 

--------------------------------------------------------------------------------------------------------------

edit을 통해서 변경할 경우, nodeName 직접 수정이 거부되네요, apiVersion과 kind, name은 변경할수 없는 리소스이기 때문에

저 세개중에 하나가 변경되었다면서 에러를 일으키고 거부되네요! 5-1번처럼 변경해줘야 되겠습니다~

->
저는 kubernetes 클러스터를 kubeadm으로 만들었으므로, 관련된 admin 매니페스트를 찾아서 수정하거나
kubeadm을 다시 사용해서 수정하면 될까 싶기도한데 일단 귀찮으므로 패스했습니다 ㅠㅠ

 

 

 

이번 기회에 kubelet의 NodeName이 hostname과 연관있다는 사실을 알게되었네요..

저는 5-1의 hostname을 변경해서 문제를 해결했습니다.

댓글