kubernetes之常见故障排除(一)
由由种种原因,在安装或者使用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权限或者安装更新的版本