前言
由于使用最新的Rocky9.5,導致kubekey一鍵安裝用不了,退回Rocky8麻煩機器都建好了,決定手動安裝k8s,結果手動安裝過程中遇到各種坑,這里記錄下;
k8s安裝
k8s具體安裝過程可自行搜索,或者deepseek; 也可參考我早期寫的文章最精簡kubernetes(1.15.1)(k8s)集群部署教程–基于CentOS 7 這片文章雖然版本較老,但新版安裝的大致流程是不變的,有參考的價值。
安裝后遇到的坑
本文中提到的坑點及解決方案可能僅適用Rocky9.5,請自行判斷。
1. kubelet啟動失敗
kubelet剛安裝好還沒有加入集群時,是必然會失敗的,也就是說,在加入集群前雖然啟動了kubelet,但其狀態必然是不斷重啟中,報的錯誤是找不到配置文件,這個問題不需要解決,等加入集群自然會正常啟動,有的文章說上來就要啟動正常,這是錯誤的,這個誤導浪費我很多時間;
2. 安裝containerd
最初k8s底層容器是基于docker的,但隨著技術發展,底層容器也不僅僅局限于docker,產生了很多其他的。安裝的時候需要注意,我第一次安裝的containerd不是由docker提供的,導致死活跟k8s無法連接報:validate service connection: CRI v1 runtime API is not implemented for endpoint
container runtime is not running: output: time="2025-06-04T14:05:41+08:00" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeServic
這個版本的container其/etc/containerd/config.toml
文件內的配置內容特別多;卸載后,使用yum命令重新安裝后,其配置文件內容就減少了很多,開頭也有docker版權注解;
為了減少各種莫名其妙的問題,建議先安裝docker,這樣容器環境自然就有了;這里還要注意,要注掉配置文件中disabled_plugins=["cri"]
,并重啟containerd:systemctl restart containerd
3. failed to pull and unpack image \"registry.k8s.io/pause:3.8
該問題是由于墻的存在,無法下載pause鏡像,最直接辦法就是下載國內鏡像,重新tag一個
# 使用國內鏡像源下載并導入
PAUSE_IMAGE="registry.aliyuncs.com/google_containers/pause:3.8"
sudo ctr -n=k8s.io images pull $PAUSE_IMAGE
sudo ctr -n=k8s.io images tag $PAUSE_IMAGE registry.k8s.io/pause:3.8
實時查看kubelet相關的日志信息,有助于排查問題
journalctl -n kubelet -f
4. 墻的問題
阿里把自己的鏡像地址改了,初始化集群時,需要使用registry.aliyuncs.com/google_containers
作為集群鏡像拉取地址,集群初始化最主要設置的就這兩個,其他默認即可;網段對應flannel;
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
5. 時間問題
集群中機器一定要設置統一的時區,并同步下時間,否則可能會有未知問題,這個時間需要在安裝docker前完成,如果已經安裝完docker,需要重新啟動下容器;
安裝的時候雖然選擇了國家,時間也是對的,但實際使用中發現,容器啟動日志里的時間是不對的,重新設置時區后正常
timedatectl set-timezone Asia/Shanghai
后續再有問題再追加