-
kubeadm init error - kubelet nodes not foundprogram_language 및 궁금한것/kubernetes 2023. 8. 31. 20:03
2주 정도를 이 에러를 찾아 헤메였습니다.
kubeadm init을 할때 나는 "nodes not found" 제 서버의 hostname을 못찾는다는 에러였죠..
치열하게 구글에 검색도 해보았지만.. 원하는 답은 찾을 수 없었습니다.결론은 kubeadm reset, init을 반복하며 kubelet 설정이 꼬인 문제였습니다.
에러 발생부터 해결까지 과정은 아래와 같습니다
kubernetes 셋팅을 하면서 kubeadm reset과 init을 반복했었습니다. external etcd 설정도 추가보구요.
처음 몇번은 잘 동작되어 join 문구까지 나왔는데 어느순간(?) 아래와 같은 에러가 납니다.
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node "host명" not found
--v=5 옵션을 줘서 더 자세히 보면... kubelet쪽에서 node를 못찾는것 같습니다.
그래서 제가 했던 작업은..
hostname이 제대로 설정되어 있는지 체크
hostname 소문자로 변경
containerd cgroup 설정 체크
cgroup2 설정 체크...
containerd, kubelet log 보기 등
삽질만 열심히 했습니다.
그러던중
systemctl status kubelet을 조회하며 이상한 점을 발견했습니다.
다른 블로그 글을 보면 아래와 같이 Drop-In이 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 하나로 잡혀있고
CGroup설정도 제대로 되어 있었습니다.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 Mon 2022-02-28 19:43:49 EST; 5h 42min ago Docs: https://kubernetes.io/docs/ Main PID: 91537 (kubelet) Tasks: 14 (limit: 23812) Memory: 50.6M CGroup: /system.slice/kubelet.service └─91537 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubecon>
하지만 제 kubelet은 Drop-In이 두개파일을 참조하게 되어 있는데다가 CGrop도 뭔가 달랐습니다.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 /etc/systemd/system/kubelet.service.d └─20-etcd-service-manager.conf Active: active (running) since Thu 2023-08-31 10:56:16 KST; 6min ago Docs: https://kubernetes.io/docs/ Main PID: 114150 (kubelet) Tasks: 40 (limit: 408104) Memory: 49.2M CGroup: /system.slice/kubelet.service └─114150 /usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd
systemctl cat kubelet로 조회해보니 총 3개 파일이 나오더라구요. 정상적이라면 2개가 나와야 하는데 말이죠.
찾아보니 /etc/systemd/system/kubelet.service.d/ 폴더 하위의 파일들은 우선순위가 높아서 이 파일이 적용 된다고 합니다.
그래서 10-kubeadm.conf파일 대신 20-etcd-service-manager.conf파일이 적용된 것이죠.systemctl cat kubelet # /usr/lib/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/ Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target # /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/sysconfig/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS # /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf [Service] Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd" ExecStart= # Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs". ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd Restart=always
20-etcd-service-manager.conf 파일을 삭제해주고 kubelet 재시작을 해줬습니다.rm -rf 20-etcd-service-manager.conf systemctl daemon-reload systemctl restart kubelet systemctl status kubelet
systemctl status kubelet으로 조회하니 정상 출력되는것을 확인 후 kubeadm reset, init을 진행하니 정상적으로 동작하였습니다.
2주묵은 체증이 내려갔군요. 후우..반응형'program_language 및 궁금한것 > kubernetes' 카테고리의 다른 글
kubernetes :: 인증서 갱신 쉽게 하는 방법 v1.28.7 (0) 2024.05.07 k8s :: Errors during downloading metadata for repository 'kubernetes' error 해결법 (0) 2024.04.18