温馨提示×

centos k8s有哪些坑

小樊
48
2026-09-09 09:52:00
栏目: 智能运维

在 CentOS 上部署 / 运行 Kubernetes(k8s),确实有不少“经典坑”,尤其是 CentOS 7/8 与不同 k8s 版本组合时。下面按 最常见、最容易踩 的分类说明,并给出规避建议。


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

1. CentOS 8 已 EOL(最大坑)

  • CentOS 8 已于 2021-12-31 停止维护
  • 很多 yum 源、docker 源直接失效
  • k8s 新版本也不再保证兼容

✅ 建议:

  • 新集群用 Rocky / AlmaLinux / CentOS Stream
  • 或用 CentOS 7(短期还能用,但不推荐新项目)

2. 内核版本过低(CentOS 7)

  • CentOS 7 默认内核:3.10
  • 问题:
    • overlayfs / cgroup v2 支持差
    • 某些 CNI(Calico、Cilium)不友好
    • eBPF 基本不能用

✅ 建议:

yum install -y kernel
reboot

或直接使用 CentOS 8+ / Stream


3. firewalld 与 k8s 冲突

  • firewalld 会拦截:
    • kube-apiserver
    • flannel / calico 端口
    • NodePort

✅ 解决:

systemctl stop firewalld
systemctl disable firewalld

或精确放行端口(不推荐新手)


4. SELinux 导致的“玄学问题”

  • 常见症状:
    • pod 起不来
    • 挂载目录权限拒绝
    • 容器跑但访问异常

✅ 临时:

setenforce 0

✅ 永久:

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

⚠️ 生产建议:理解策略后再开启


二、容器运行时坑(非常常见)

5. Docker 与 k8s 版本不兼容

  • k8s ≥ 1.24 已移除 dockershim
  • CentOS 上仍很多人装 docker

✅ 推荐方案:

  • containerd(官方推荐)
  • 或 cri-o

安装 containerd:

yum install -y containerd
systemctl enable --now containerd

6. cgroup driver 不一致

  • kubelet 与 containerd / docker 不一致会直接报错

✅ 统一为 systemd:

# containerd
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

kubelet:

--cgroup-driver=systemd

三、网络与 CNI 坑

7. 交换分区(swap)未关闭

  • kubelet 默认 不允许 swap

✅ 关闭:

swapoff -a
sed -i '/swap/d' /etc/fstab

8. 网络插件选择错误

  • CentOS 7 + Calico:内核模块缺失
  • flannel 在云服务器上容易 IP 冲突

✅ 建议:

  • 本地 / 虚拟机:flannel
  • 生产:Calico(需内核支持)

9. 防火墙 / 安全组未开端口

必须放行:

  • 6443(API)
  • 2379-2380(etcd)
  • 10250(kubelet)
  • CNI 端口(如 8472)

四、kubeadm 初始化坑

10. kubeadm init 卡住

常见原因:

  • 无法拉镜像(墙)
  • 内核参数未开

✅ 提前设置:

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

11. 镜像拉不下来

  • k8s.gcr.io 被墙

✅ 解决:

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

五、运维阶段坑

12. 节点 NotReady

常见原因:

  • kubelet 未启动
  • 网络插件没装
  • 时间不同步

✅ 必做:

chronyd / ntpdate

13. CentOS 重启后 k8s 起不来

原因:

  • swap 又开了
  • containerd 没开机自启

✅ 检查:

systemctl is-enabled containerd
systemctl is-enabled kubelet

六、总结一句话版

CentOS 跑 k8s 的坑,90% 来自:旧系统 + 旧内核 + Docker + firewalld/SELinux/swap

✅ 最稳组合(2024+):

  • OS:Rocky / Alma / CentOS Stream 9
  • Runtime:containerd
  • CNI:Calico / Cilium
  • k8s:1.26+

如果你愿意,可以告诉我:

  • CentOS 几?
  • k8s 版本?
  • 单节点还是集群?
  • 用 kubeadm 还是二进制?

我可以直接给你一套 “不踩坑部署清单”。

0 踩