MLOPS/kubernetes

minikube 클러스터 삭제 후 kubeadm init 에러

개발허재 2023. 1. 10. 17:55

minikube 클러스터 구축 실험 후 minikube를 삭제하고 kubeadm으로 다시 클러스터 구축하려고 init 했을 때 발생한 에러이다.

 

[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s

[kubelet-check] Initial timeout of 40s passed.

[kubelet-check] It seems like the kubelet isn't running or healthy.

[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.

위와 같이 kubelet이 runninig중이지 않거나 health 상태가 아니라고 뜬다.

 

이 때, systemctl status kubelet로 kubelet 상태를 확인하면 activating 이고 CGroup이 /var/lib/minikube/binaries/v1.25.3/kubelet 을 잡고 있는 경우가 있다. 이럴 땐, journalctl -xeu kubelet로 서비스 로그를 확인하면 더더욱 확신이 간다.

Jan 10 13:41:32 DS-DEV-005 systemd[1]: Started kubelet: The Kubernetes Node Agent.
-- Subject: A start job for unit kubelet.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- A start job for unit kubelet.service has finished successfully.
--
-- The job identifier is 26326018.
Jan 10 13:41:32 DS-DEV-005 systemd[2832154]: kubelet.service: Failed to execute command: No such file or directory
Jan 10 13:41:32 DS-DEV-005 systemd[2832154]: kubelet.service: Failed at step EXEC spawning /var/lib/minikube/binaries/v1.21.7/kubelet>
-- Subject: Process /var/lib/minikube/binaries/v1.21.7/kubelet could not be executed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The process /var/lib/minikube/binaries/v1.21.7/kubelet could not be executed and failed.
--
-- The error number returned by this process is ERRNO.
Jan 10 13:41:32 DS-DEV-005 systemd[1]: kubelet.service: Main process exited, code=exited, status=203/EXEC
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- An ExecStart= process belonging to unit kubelet.service has exited.
--
-- The process' exit code is 'exited' and its exit status is 203.
Jan 10 13:41:32 DS-DEV-005 systemd[1]: kubelet.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The unit kubelet.service has entered the 'failed' state with result 'exit-code'.
lines 6546-6602/6602 (END)

 

 

해결

1. 도커 데몬 config 파일에 cgroup 추가

$ mkdir /etc/docker

$ cat <<EOF | sudo tee /etc/docker/daemon.json

{

  "exec-opts": ["native.cgroupdriver=systemd"],

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "100m"

  },

  "storage-driver": "overlay2"

}

EOF

$ systemctl daemon-reload
$ systemctl restart docker
$ systemctl restart kubelet

 

 

2. kubeadm config 파일 수정

$ whereis kubelet
>> /usr/bin/kubelet

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

[Unit]
Wants=docker.socket

[Service]
ExecStart=
ExecStart=/var/lib/minikube/binaries/v1.25.3/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf ~

[Install]

#########################
# /var/lib/minikube~ 이 부분을 /usr/bin/kubelet 으로 변경 후 저장해준다.



$ systemctl daemon-reload
$ systemctl restart kubelet