当前位置:  首页>> 技术小册>> Kubernetes中文教程(一)

与任何程序一样,你可能会在安装或者运行 kubeadm 时遇到错误。 本文列举了一些常见的故障场景,并提供可帮助你理解和解决这些问题的步骤。

如果你的问题未在下面列出,请执行以下步骤:

如果你认为问题是 kubeadm 的错误:

转到 github.com/kubernetes/kubeadm 并搜索存在的问题。
如果没有问题,请 打开 并遵循问题模板。
如果你对 kubeadm 的工作方式有疑问,可以在 Slack 上的 #kubeadm 频道提问, 或者在 StackOverflow 上提问。 请加入相关标签,例如 #kubernetes 和 #kubeadm,这样其他人可以帮助你。


由于缺少 RBAC,无法将 v1.18 Node 加入 v1.17 集群
自从 v1.18 后,如果集群中已存在同名 Node,kubeadm 将禁止 Node 加入集群。 这需要为 bootstrap-token 用户添加 RBAC 才能 GET Node 对象。

但这会导致一个问题,v1.18 的 kubeadm join 无法加入由 kubeadm v1.17 创建的集群。

要解决此问题,你有两种选择:

使用 kubeadm v1.18 在控制平面节点上执行 kubeadm init phase bootstrap-token。 请注意,这也会启用 bootstrap-token 的其余权限。

或者,也可以使用 kubectl apply -f … 手动应用以下 RBAC:

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRole
  3. metadata:
  4. name: kubeadm:get-nodes
  5. rules:
  6. - apiGroups:
  7. - ""
  8. resources:
  9. - nodes
  10. verbs:
  11. - get
  12. ---
  13. apiVersion: rbac.authorization.k8s.io/v1
  14. kind: ClusterRoleBinding
  15. metadata:
  16. name: kubeadm:get-nodes
  17. roleRef:
  18. apiGroup: rbac.authorization.k8s.io
  19. kind: ClusterRole
  20. name: kubeadm:get-nodes
  21. subjects:
  22. - apiGroup: rbac.authorization.k8s.io
  23. kind: Group
  24. name: system:bootstrappers:kubeadm:default-node-token

在安装过程中没有找到 ebtables 或者其他类似的可执行文件
如果在运行 kubeadm init 命令时,遇到以下的警告:

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

那么或许在你的节点上缺失 ebtables、ethtool 或者类似的可执行文件。 你可以使用以下命令安装它们:

  • 对于 Ubuntu/Debian 用户,运行 apt install ebtables ethtool 命令。
  • 对于 CentOS/Fedora 用户,运行 yum install ebtables ethtool 命令。

在安装过程中,kubeadm 一直等待控制平面就绪
如果你注意到 kubeadm init 在打印以下行后挂起:

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

这可能是由许多问题引起的。最常见的是:

  • 网络连接问题。在继续之前,请检查你的计算机是否具有全部联通的网络连接。
  • 容器运行时的 cgroup 驱动不同于 kubelet 使用的 cgroup 驱动。要了解如何正确配置 cgroup 驱动, 请参阅配置 cgroup 驱动。
  • 控制平面上的 Docker 容器持续进入崩溃状态或(因其他原因)挂起。你可以运行 docker ps 命令来检查以及 docker logs 命令来检视每个容器的运行日志。 对于其他容器运行时,请参阅使用 crictl 对 Kubernetes 节点进行调试。

当删除托管容器时 kubeadm 阻塞
如果容器运行时停止并且未删除 Kubernetes 所管理的容器,可能发生以下情况:

  1. sudo kubeadm reset
  1. [preflight] Running pre-flight checks
  2. [reset] Stopping the kubelet service
  3. [reset] Unmounting mounted directories in "/var/lib/kubelet"
  4. [reset] Removing kubernetes-managed containers
  5. (block)

一个可行的解决方案是重新启动 Docker 服务,然后重新运行 kubeadm reset: 你也可以使用 crictl 来调试容器运行时的状态。


该分类下的相关小册推荐: