温馨提示×

centos k8s为何总报错

小樊
51
2026-09-18 12:17:41
栏目: 智能运维

在 CentOS 上部署 Kubernetes(k8s)经常报错,通常不是 Kubernetes 本身的问题,而是 CentOS 的系统特性 + 环境配置不当 导致的。下面我按「最常见原因 → 对应报错现象 → 解决办法」给你梳理一下。


一、最常见 8 大原因(90% 的坑都在这)

1️⃣ 防火墙 / SELinux 没关(最高频)

报错示例

dial tcp: connect: no route to host
failed to connect to apiserver

原因

  • CentOS 默认开启 firewalld
  • SELinux 会拦截 kubelet / flannel / calico

解决

systemctl stop firewalld
systemctl disable firewalld

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2️⃣ swap 没关(kubelet 直接起不来)

报错示例

failed to run Kubelet: running with swap on is not supported

解决

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

3️⃣ 内核参数 / 桥接转发没开

报错示例

iptables: No chain/target/match by that name
pod 无法访问外网

解决

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

sysctl --system

4️⃣ 容器运行时版本不匹配(Docker / containerd)

报错示例

failed to create runtime: failed to start container
docker: unknown flag

常见坑

  • k8s 1.24+ 不再支持 Docker
  • CentOS 7 Docker 版本太老

解决

  • k8s ≥ 1.24:用 containerd
yum install -y containerd
systemctl enable --now containerd

5️⃣ 时间不同步(证书直接废)

报错示例

x509: certificate has expired or is not yet valid

解决

yum install -y chrony
systemctl enable --now chronyd
chronyc sources

6️⃣ hostname / hosts 配置错误

报错示例

node not found
kubectl get nodes 一直 NotReady

要求

  • hostname 不能带 _
  • /etc/hosts 要能互相解析
hostnamectl set-hostname master
cat >> /etc/hosts <<EOF
192.168.1.10 master
192.168.1.11 node1
EOF

7️⃣ CentOS 版本问题(7 vs 8 vs Stream)

系统 情况
CentOS 7 老,但稳定
CentOS 8 已 EOL
CentOS Stream k8s 官方推荐

建议

  • 新集群:CentOS Stream 9 + k8s 1.28+

8️⃣ kubeadm 初始化参数错误

常见错误

kubeadm init
# 没指定 --pod-network-cidr

正确示例

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository=registry.aliyuncs.com/google_containers

二、快速自检清单(先跑一遍)

# 1. SELinux
getenforce   # 应为 Disabled

# 2. swap
free -m      # swap 应为 0

# 3. 防火墙
systemctl status firewalld

# 4. 容器运行时
crictl info

三、如果你愿意,我可以更精准帮你

你可以直接贴:

  1. CentOS 版本
  2. k8s 版本
  3. 完整报错日志(kubeadm / kubelet / journalctl)

我可以 逐行帮你定位是哪一步炸的。

0 踩