kubernetes之常见故障排除(一)

系列目录html

由由种种缘由,在安装或者使用kubernetes的过程当中,可能会遇到各类各样的问题.本篇按照官网的介绍罗列出一些常见的故障,以帮助快速解决一些常见的错误.node

安装赛程中出现ebtables or some similar executable not found

在执行kubeadm init中出现如下警告docker

[preflight] WARNING: ebtables not found in system path
[preflight] WARNING: ethtool not found in system path

这多是由于你的操做系统里没有安装ebtables, ethtool,能够执行如下命令安装ubuntu

  • 对于ubuntu/debian用户,执行apt install ebtables ethtoolcentos

  • 对于centos/Fedora用户,执行yum install ebtables ethtoolapi

执行kubeadm init时挂起waiting for the control plane to become ready

如题,在执行kubeadm init后,等到出现下面内容后命令一直挂起bash

[apiclient] Created API client, waiting for the control plane to become ready

这多是由多种缘由引发的,最为常见的以下:网络

  • 网络链接问题.请排查网络链接是否正常.oop

  • 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权限或者安装更新的版本