温馨提示×

centos k8s为啥启动失败

小樊
39
2026-09-03 07:31:36
栏目: 智能运维

CentOS 上 Kubernetes(k8s)启动失败的原因非常多,不能一概而论,但我在实际运维中总结了几类最常见的原因,你可以对照排查:


一、系统层面(CentOS 特有常见坑)

1️⃣ 防火墙 / SELinux 没关

K8s 对网络要求很严格,CentOS 默认开启 SELinux 和 firewalld。

检查:

getenforce
systemctl status firewalld

建议(测试环境):

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

2️⃣ swap 没关(致命)

K8s 不允许 swap 开启

free -m
swapon --show

关闭:

swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab

3️⃣ 内核参数 / 桥接网络没配置

K8s 需要 br_netfilter

lsmod | grep br_netfilter

如果没有:

modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

二、容器运行时问题(docker / containerd)

4️⃣ Docker 或 containerd 没启动

systemctl status docker
# 或
systemctl status containerd

常见错误:

  • Docker 版本不兼容
  • cgroup driver 不一致

推荐配置(docker):

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

然后:

systemctl restart docker

三、kubeadm / kubelet 问题

5️⃣ kubelet 起不来(最常见)

看日志:

journalctl -u kubelet -xe

常见错误:

  • 节点 hostname 不合法
  • 时间不同步
  • cgroup driver 不一致

解决:

timedatectl set-ntp true
hostnamectl set-hostname node1

6️⃣ kubeadm init 失败

常见原因:

  • 镜像拉不下来(国内网络)
  • 端口被占用(6443 / 10250)

查看:

kubeadm init --v=5

国内建议加:

--image-repository registry.aliyuncs.com/google_containers

四、快速自检清单 ✅

你可以一条条对照:

  • [ ] SELinux = disabled
  • [ ] firewalld = stopped
  • [ ] swap = off
  • [ ] 时间同步
  • [ ] docker/containerd 正常
  • [ ] kubelet 正常运行
  • [ ] 端口未被占用

五、我可以直接帮你定位

如果你愿意,把下面信息贴出来,我可以精准告诉你哪一步错了

journalctl -u kubelet -n 50
kubeadm init 报错信息
cat /etc/os-release
docker version

你现在是 master 起不来,还是 node 加入失败

0