k8s使用kubectl报错

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 保持一致就可以了。

相关推荐
源码宝2 小时前
云HIS系统源码,HIS全套源码,支持监管系统对接与二次开发
java·源码·电子病历·云his系统·程序代码·全套源码
萧瑟余晖2 小时前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
郭老二2 小时前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
泡茶喝茶写代码2 小时前
A股量化数据工程:从 REST 接口到策略信号(第 17 篇):创新高与新低扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
栗子~~2 小时前
java - logstash-logback-encoder 集成 demo
java·开发语言·logback
hmb↑3 小时前
高并发与高可用技术经验
java·spring
楚识科技3 小时前
XML配置OCR接入实战:自定义OCR模板从字段定义到API调用全流程
xml·java·ocr
小蒜学长3 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai3 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库