Kubernetes K8s 結合國內外文章解決 The kubelet is not running

哈哈哈hh發表於2022-07-07

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

初學K8s,好好教程不跟著來,非要全部安裝最新的docker 和 k8s,經過4小時奮戰終於解決!

先說明下docker是最新版的安裝,又安裝K8s

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=
EOF
yum install -y --nogpgcheck kubelet kubeadm kubectl
systemctl enable kubelet

這樣直接安裝成功,得到 1.23.5-0,版本號就是v1.23.5

然後噩夢開始,影片教程人家指定了v1.19.0直接成功安裝,我這倒好,報錯開始

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 [::1]:10248: connect: connection refused.
[kubelet-check] It seems like the kubelet isn't running or healthy.
....
 
This error is likely caused by:
		- The kubelet is not running
		- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

報錯如上,首先先把你之前查到的資料見鬼去,反正在我這是不好使的(我這裡都是新版,2022-03-18新裝的)

1、systemctl start kubelet 這個在只有【主】的時候根本起不來,所以不用折騰看狀態了,有就行了

2、/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 檔案,我相信你一定查到了,為啥我沒有,因為你的在這/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf(這個你最好沒改過,改過的話改回去,保持預設就好),上面那個檔案就該沒有的,連那個目錄都不該有的(再次強調新版!舊版不知道,v1.23.5我這是),有文章讓你新建並新增什麼的,刪了吧沒用的,啟動了也是假象

[root@k8s-master ~]# cd /etc/systemd/system/kubelet.service.d/
-bash: cd: /etc/systemd/system/kubelet.service.d/: 沒有那個檔案或目錄

3、echo ‘{“exec-opts”: [“native.cgroupdriver=systemd”]}’ >> /etc/docker/daemon.json,我相信你已經見過這句了,是的!就是這句,這句真是重點!一開始我就對了,但是先往下看吧,真坑

4、還有讓你們改docker images tag的,歇了吧,用不到的

開始噩夢安裝之旅,注意這裡我已經替換為國內的阿里源,所以根本不用改 docker Tag!只要能正常拉回來就沒有問題!

kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version=v1.23.5 \
  --pod-network-cidr=10.244.0.0/16  \
  --service-cidr=10.96.0.0/12  \
  --apiserver-advertise-address=192.168.0.2

重點來了

排錯,這個也是重點,你知道是錯在哪! 【重點1】

journalctl -xeu kubelet | grep Failed

定位為毛線在失敗(實際是一行,我換行下,這樣好看)

3月 18 20:21:04 k8s-master kubelet[36490]: E0318 20:21:04.954990   36490 server.go:302] 
"Failed to run kubelet" 
err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is 
different from docker cgroup driver: \"cgroupfs\""

實際你只要在你的/etc/docker/daemon.json 中加入 “exec-opts”: [“native.cgroupdriver=systemd”]

是加入!不是追加,追加的不管用!!!我就是被坑在這了!怕你搞錯,看例子! 【重點2】

  1 {
  2   "registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"],
  3   "log-driver": "json-file",
  4   "log-opts": {
  5     "max-size": "10m",
  6     "max-file": "1"
  7    },   【看這!這加個逗號,下面加這句,結尾沒有逗號】
  8   "exec-opts": ["native.cgroupdriver=systemd"]
  9 }

然後,你就可以

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
kubeadm reset #重置了沒事的,反正之前也起不來~
y
 
systemctl status kubelet #初始就是啟動不了的
#驗證cgroupdriver 修改生效 (這兩行都是驗證的)看到systemd 就對了
docker info -f {{.CgroupDriver}}
docker info | grep -i cgroup

最後再執行

kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version=v1.23.5 \
  --pod-network-cidr=10.244.0.0/16  \
  --service-cidr=10.96.0.0/12  \
  --apiserver-advertise-address=192.168.0.2

世界核平!

file

好了,萬馬奔騰~

原文連結:https://blog.csdn.net/zhangbest5/article/details/123583927


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2904610/,如需轉載,請註明出處,否則將追究法律責任。

相關文章