新增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会处于失败状态,狂刷日志就像下边这种
困扰了好久,检查了:kubelet版本、docker版本、防火墙、日志都没找到,直到查看日志,一直往上翻最终找到第一条有用的报错
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动态探测插件找不到插件导致
- 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--kops--新增node无法加入k8s
遇到问题--k8s--kops--新增node无法加入k8s