由由種種原因,在安裝或者使用kubernetes的過程中,可能會遇到各種各樣的問題.本篇按照官網的介紹羅列出一些常見的故障,以幫助快速解決一些常見的錯誤.
安裝賽程中出現ebtables or some similar executable not found
在執行kubeadm init中出現以下警告
[preflight] WARNING: ebtables not found in system path
[preflight] WARNING: ethtool not found in system path
這可能是因為你的操作系統里沒有安裝ebtables, ethtool,可以執行以下命令安裝
-
對於ubuntu/debian用戶,執行
apt install ebtables ethtool -
對於centos/Fedora用戶,執行
yum install ebtables ethtool
執行kubeadm init時掛起waiting for the control plane to become ready
如題,在執行kubeadm init后,等到出現下面內容后命令一直掛起
[apiclient] Created API client, waiting for the control plane to become ready
這可能是由多種原因引起的,最為常見的如下:
-
網絡連接問題.請排查網絡連接是否正常.
-
kubelet 使用的默認的cgroup driver和docker使用的不一樣,通過查看(/var/log/messages)或者執行
journalctl -u kubelet看看是否有以下錯誤信息:
error: failed to run Kubelet: failed to create kubelet:
misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"
如果是這樣,可以嘗試重新安裝docker來解決,也可以通過更改kubelet的默認配置來手動與docker匹配,詳情參看這里
執行kubeadm reset時命令掛起Removing kubernetes-managed containers
sudo kubeadm reset
[preflight] Running pre-flight checks
[reset] Stopping the kubelet service
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Removing kubernetes-managed containers
(block)
這可能是由於docker中斷引起的,可以通過journalctl -fu docker來查看docker的輸出日志幫助排查問題.一般情況下可以嘗試以下命令來解決問題
sudo systemctl restart docker.service
sudo kubeadm reset
pod的狀態是RunContainerError, CrashLoopBackOff 或 Error
剛剛執行過kubeadm init,不應該有pod的狀態為以上中的狀態之一(正常情況下都應該是Running)
-
如果執行
kubeadm init后出現以上狀態,請到官方倉庫提出問題. coredns (或者kube-dns)在部署之前狀態是Pending -
如果在部署了網絡組件(coredns或者kube-dns)之后仍然會出現以上狀態,這很可能是你安裝的網絡組件的問題,你可以對它授予更高的RBAC權限或者安裝更新的版本
