温馨提示×

centos安装k8s有哪些坑

小樊
38
2025-12-05 22:03:19
栏目: 智能运维

CentOS 安装 Kubernetes 的常见坑与规避

一 版本与内核兼容

  • CentOS 7.9 上,默认内核为 3.10,对高版本 K8s 的兼容性与网络性能影响较大:K8s 1.24+ 要求内核 ≥4.19;K8s 1.26+ 建议 ≥5.10;K8s 1.27+ 在 3.10 上可能出现功能或稳定性问题。实测在 CentOS 7.9 + K8s 1.31 上会出现网络“龟速”(千兆网卡仅 1–2 Mbps)等性能异常,升级到 Rocky Linux 9.6 + K8s 1.33.5 后恢复正常。建议:在 7.9 上优先选择 K8s 1.23.x;若需 1.24+,务必升级内核或直接迁移到 CentOS Stream 8 / Rocky Linux 8/9 / Ubuntu 22.04 等较新系统。

二 容器运行时与 kubeadm 版本匹配

  • K8s 1.24 起移除内置的 Dockershim,默认使用 containerd。在 1.24+ 环境若仍用 Docker,需确保通过 cri-dockerd 适配,否则会出现类似 “CRI v1 runtime API is not implemented for endpoint …” 的错误。建议:1.23 及更早可用 Docker;1.24+ 使用 containerd(或 cri-dockerd),并保持 kubelet/kubeadm 版本一致。

三 镜像拉取与网络访问

  • 初始化时若未指定镜像仓库,默认会从 k8s.gcr.io 拉取镜像,国内环境常失败;应使用国内镜像源,例如:kubeadm init 时加参数 –image-repository=registry.aliyuncs.com/google_containers。同时,部署 Flannel/Calico 等插件时,其清单中的境外镜像(如 quay.io/coreos/flannelghcr.io/flannel-io/flannel)在国内也常拉取失败,需提前在各节点手动拉取或替换镜像源。若访问 raw.githubusercontent.com 被拒,可在 /etc/hosts 中临时添加解析记录以完成清单下载。

四 系统前置条件与内核参数

  • 常见被忽略的硬性要求:必须关闭 Swap(临时 swapoff -a 并注释 /etc/fstab);按需关闭 firewalldSELinux(生产环境请采用更细粒度策略);加载内核模块 overlay、br_netfilter;配置 net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1、net.ipv4.ip_forward=1 并生效。内存过小(如 1GB)会导致 kubelet OOM 被 kill,建议至少 2–4GB。这些步骤缺失或不完整,节点极易卡在 NotReady 或组件反复 CrashLoopBackOff。

五 网络插件与 Pod CIDR 不匹配

  • 部署 Flannel 时,清单中的 Network 字段必须与 kubeadm 初始化时的 –pod-network-cidr 一致,否则 Pod 跨节点通信异常。示例:Flannel 使用 10.244.0.0/16 时,kubeadm init 需指定 –pod-network-cidr=10.244.0.0/16。此外,插件版本要与 K8s 版本匹配,例如 K8s 1.20 应使用 Calico v3.20,而不是最新版 v3.23。错误的 CIDR 或不匹配的插件版本,常导致节点长时间 NotReady

六 常见报错速查表

现象 可能原因 快速修复
kubelet 启动失败或反复重启 内存不足(≤1GB) 升级至 ≥2–4GB 内存
kubeadm init 报 manifests 已存在 之前初始化残留 执行 kubeadm reset 后再 init
节点 NotReady 未装 CNI 或 Pod CIDR 不匹配 安装 Flannel/Calico 且确保 CIDR 一致
镜像拉取超时 境外仓库不可达 使用 –image-repository=registry.aliyuncs.com/google_containers 或预拉取镜像
清单下载失败 raw.githubusercontent.com 解析失败 /etc/hosts 添加临时解析
依赖安装失败(libnetfilter_queue 等) YUM 缓存或镜像源异常 执行 yum clean all && yum makecache 后重试
“CRI v1 runtime API is not implemented …” 1.24+ 仍用 Docker 且未适配 改用 containerd 或部署 cri-dockerd

以上要点覆盖了版本/内核、运行时、镜像、系统配置、网络插件与常见报错六个维度,按此清单核对,能避开绝大多数“装不上/起不来/网络不通”的问题。

0