CentOS 上安装 Kubernetes 的常见问题与排查要点
一 环境准备与系统配置
- 资源与系统基线:建议单节点至少2 核 CPU / 2GB 内存 / 20GB 磁盘;所有节点保持时间同步(如 chrony/ntp),避免因时间漂移导致证书校验或组件异常。
- 必做项:
- 关闭 Swap:swapoff -a 并注释 /etc/fstab 中的 swap 行。
- 内核参数:开启桥接与转发
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- net.ipv4.ip_forward = 1
- 防火墙与 SELinux:测试环境可临时关闭 firewalld 与 SELinux;生产环境建议按需放行端口与策略。
- 容器运行时:Kubernetes v1.24+ 默认使用 containerd/CRI,若使用 Docker,需确保其与 containerd 正确配置并运行。
- 常见报错与要点:
- “preflight: Some fatal errors occurred: [ERROR CRI] … Unimplemented …” 表示 CRI 不可用,检查 containerd 是否启动并监听 /run/containerd/containerd.sock。
- “MountVolume.SetUp failed” 常与内核版本过低或模块缺失有关,必要时升级内核。
- 初始化卡在拉取镜像,优先使用国内镜像源或手动拉取并重命名镜像。
二 初始化与组件安装
- 安装组件:通过 YUM 安装 kubelet / kubeadm / kubectl 并启用 kubelet 服务。
- 初始化命令要点:
- 指定版本与仓库:如 kubeadm init --kubernetes-version=v1.28.x --image-repository=registry.aliyuncs.com/google_containers。
- 指定 Pod CIDR:与所选网络插件一致(如 Calico 常用 192.168.0.0/16,Flannel 常用 10.244.0.0/16)。
- 常见报错与要点:
- “remote version is much newer … falling back to: stable-1.28” 表示 kubeadm 自动回退版本,建议显式指定与你安装组件一致的 Kubernetes 版本。
- 镜像拉取慢/失败:更换 kubernetes 与 Docker 镜像源,或提前用 crictl pull 拉取所需镜像。
- 加入集群失败:检查 token 有效期、CA 证书哈希、以及 apiserver 地址可达性。
三 网络与 CNI 插件
- 部署时机:在 kubeadm init 后、节点 Ready 之前部署 CNI 网络插件(如 Calico/Flannel)。
- Flannel VXLAN 场景:
- 确认节点间 UDP 8472 放行(firewalld/安全组)。
- 确认 Pod CIDR 与 Flannel 配置一致(如 10.244.0.0/16)。
- 检查 Flannel Pod 状态与日志、节点路由表是否正确下发。
- 系统与内核:
- 确认 net.ipv4.ip_forward=1 与桥接相关 iptables 参数为 1。
- 某些环境下 SELinux 开启会导致 Flannel 初始化失败,可临时关闭验证。
- 常见现象与要点:
- 不同节点 Pod IP 不通:优先排查 VXLAN/主机路由/安全组/防火墙。
- Pod 内无法解析 DNS:检查 kube-dns/kubeproxy 是否正常、iptables FORWARD 策略是否为 ACCEPT。
- Service 访问异常:核对 Endpoints、容器端口与 Service 端口映射、以及 kube-proxy 规则是否生效。
四 防火墙端口与节点互通
- 常见需放行端口(示例):
- 6443/TCP(kube-apiserver)
- 2379–2380/TCP(etcd)
- 10250/TCP(kubelet API)
- 10251/TCP(kube-scheduler)
- 10252/TCP(kube-controller-manager)
- 30000–32767/TCP(NodePort 范围)
- Flannel VXLAN:8472/UDP
- 排查建议:
- 节点间先验证 主机 IP 互通(ping、traceroute)。
- 如启用 firewalld,按需添加端口/富规则并 reload;云环境同步检查 安全组。
五 日志与快速定位命令清单
- 查看节点与系统组件状态:
- kubectl:get nodes、get pods -A、describe node 、logs -n kube-system
- 系统服务:systemctl status kubelet、journalctl -f -u kubelet
- 容器运行时:systemctl status containerd、crictl ps -a、crictl images
- 初始化与镜像:
- 带配置初始化:kubeadm init --config=kubeadm.yaml
- 忽略特定预检(仅测试):–ignore-preflight-errors=SystemVerification
- 网络连通性:
- 节点间:ping <node_ip>
- Flannel VXLAN:nc -zv <node_ip> 8472 或 ss -u ln | grep 8472
- 内核与转发:
- sysctl:sysctl -p、检查 net.ipv4.ip_forward 与桥接参数
- 重置与重试:
- 重置集群:kubeadm reset -f,清理后重新 init