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

原文地址:https://www.cnblogs.com/tylerzhou/p/11066568.html