$ 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을 변경해서 문제를 해결했습니다.
'Kubernetes & Docker' 카테고리의 다른 글
Docker(file) CMD & ENTRYPOINT & RUN 그리고 docker 컨테이너 생명주기와 프로세스 (container lifecycle & process) (1) | 2022.07.01 |
---|---|
쿠버네티스란? (0) | 2020.09.09 |
댓글