新增node加入k8s集群失败

Posted 一点点积累

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新增node加入k8s集群失败相关的知识,希望对你有一定的参考价值。

问题现象:

k8s集群启用了 TLS Bootstrapping 机制,新增node节点启动kubelet后,systemctl status查看是running状态,k8s的master节点也能get 到csr信息,

批准node加入集群后,get nodes看不到新增节点,并且新增node的kubelet会处于失败状态,狂刷日志就像下边这种

新增node加入k8s集群失败_kubernetes

困扰了好久,检查了:kubelet版本、docker版本、防火墙、日志都没找到,直到查看日志,一直往上翻最终找到第一条有用的报错

新增node加入k8s集群失败_cgroupfs_02

kubelet cgroup驱动:"systemd"不同于docker cgroup驱动:"cgroupfs"  

1、查看master设置的docker json文件驱动为system

# vim /etc/docker/daemon.json


"registry-mirrors":["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn","https://f3lu6ju1.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]

2、查看新增节点的docker json文件是空的,以为着是默认的cgroupfs,修改成一样的就行

# vim /etc/docker/daemon.json

"registry-mirrors":["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn","https://f3lu6ju1.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]

3、重启node上的docker、kubelet服务

# systemctl restart docker kubelet
# 下面报错可以忽略,是kubelet动态探测插件找不到插件导致

新增node加入k8s集群失败_cgroupfs_03

  • cgroupfs是什么?

docker默认的Cgroup Driver是cgroupfs,

cgroupfs是cgroup为给用户提供的操作接口而开发的虚拟文件系统类型,

它和sysfs,proc类似,可以向用户展示cgroup的hierarchy,通知kernel 用户对cgroup改动对cgroup的查询和修改只能通过cgroupfs文件系统来进行。

  • 为什么要修改为使用systemd?

Kubernetes 推荐使用 ​​systemd​​​ 来代替 ​​cgroupfs​

​因为​​systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups,  但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器,  当资源有压力的情况时,有可能出现不稳定的情况

以上是关于新增node加入k8s集群失败的主要内容,如果未能解决你的问题,请参考以下文章

k8s node节点重新加入集群失败问题解决

遇到问题--k8s--kops--新增node无法加入k8s

遇到问题--k8s--kops--新增node无法加入k8s

遇到问题--k8s--kops--新增node无法加入k8s

K8S中DaemonSet

k8s 安装node_exporter