k8s使用kubectl报错:
bash
[root@master01 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
检查kubelet状态,发现没启动成功
bash
[root@node02 ~]# kubectl status kubelet
E1217 23:04:52.465329 15895 run.go:120] "command failed" err="unknown command \"status\" for \"kubectl\""
[root@node02 ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: activating (auto-restart) (Result: exit-code) since Wed 2025-12-17 23:05:06 CST; 9s ago
Docs: https://kubernetes.io/docs/
Process: 16001 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 16001 (code=exited, status=1/FAILURE)
看日志
bash
journalctl -u kubelet --no-pager | tail -50
发现是"misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"错误造成的。
kubelet 使用 systemd cgroup 驱动,而 Docker 使用 cgroupfs。需要统一配置。有两种解决方法:
方案一
修改 Docker 使用 systemd cgroup 驱动(推荐)
1、修改docker.json为systemd cgroup驱动
bash
# 停止 Docker
systemctl stop docker
# 备份 Docker 配置
cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 2>/dev/null || true
# 创建或修改 Docker 配置
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com",
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://docker.1ms.run",
"https://hub.rat.dev",
"https://docker.1panel.live"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
2、重启docker
bash
#停止docker
systemctl stop docker docker.socket
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 Docker
systemctl start docker
# 验证 Docker 配置
docker info | grep -i cgroup
# 应该显示:Cgroup Driver: systemd
3、重启
bash
systemctl restart kubelet
systemctl status kubelet
4、检查kubectl就正常了

方案二
修改 kubelet 使用 cgroupfs cgroup 驱动(略过)
问题原因
-
CentOS 7 / RHEL 7 :默认使用
cgroupfs(老的管理器) -
Ubuntu 18.04+ / CentOS 8 :默认使用
systemd(新的管理器)
我机器是centos7,所以docker.json就是用的cgroupfs,我把docker.json的管理器改为systemd,和kubelet 保持一致就可以了。