CentOS 上安装 Kubernetes 的常见问题与排查要点
一 环境前置检查与系统配置
- 资源与系统基线:建议单节点至少CPU≥2核、内存≥2GB、磁盘≥20GB;执行yum update -y更新系统并安装常用工具(如 bash-completion、wget、vim、net-tools、gcc)。
- 关闭 Swap:Kubelet 默认要求关闭 Swap。临时执行swapoff -a;永久禁用需注释**/etc/fstab**中的 swap 行。
- SELinux:建议测试环境设为SELINUX=permissive/disabled,执行setenforce 0临时生效,或编辑**/etc/selinux/config**永久修改。
- 防火墙:为减少初期排障复杂度,可临时systemctl stop firewalld && systemctl disable firewalld;生产环境应按需放行端口。
- 内核与网络参数:加载br_netfilter并开启桥接流量经 iptables 处理:
- modprobe br_netfilter
- echo ‘1’ | tee /proc/sys/net/bridge/bridge-nf-call-iptables
- echo ‘1’ | tee /proc/sys/net/bridge/bridge-nf-call-ip6tables
- 写入**/etc/sysctl.d/k8s.conf并执行sysctl -p**
- 时间同步:安装并启用chrony/ntpd,避免证书与组件通信异常。
二 容器运行时与 kubelet 常见报错
- CRI 未就绪或 containerd 未启动:报错如“CRI v1 runtime API is not implemented … containerd.sock”时,检查并启动 containerd:
- systemctl status/start/enable containerd
- 使用 containerd 时的 cgroup 驱动:确保与 kubelet 一致(推荐systemd)。生成默认配置并修改:
- containerd config default | tee /etc/containerd/config.toml
- sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
- systemctl restart containerd
- Docker 配置(如使用 Docker):在**/etc/docker/daemon.json**设置镜像加速与 cgroup 驱动:
- { “registry-mirrors”: [“https://mirrors.aliyun.com/dockerhub”], “exec-opts”: [“native.cgroupdriver=systemd”] }
- systemctl daemon-reload && systemctl restart docker
- kubelet 无法启动:查看journalctl -xefu kubelet;常见原因为 Swap 未关闭、cgroup 驱动不一致、镜像不可达等。
三 镜像拉取与初始化失败
- 使用国内镜像仓库加速:kubeadm 初始化时指定**–image-repository=registry.aliyuncs.com/google_containers**;提前拉取镜像:
- kubeadm config images pull --config=init-config.yaml
- coredns 镜像标签问题:如遇 coredns 特定标签拉取失败,可手动拉取并重命名标签(示例:docker pull …/coredns:1.8.4 后 docker tag …)。
- kubeadm init 失败排查:使用kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification查看更详细错误;必要时检查**/var/log/messages**、kubelet 日志与网络连通性。
四 网络与端口问题
- 端口与通信:Master 与 Node 之间需放通多端口;初期可临时关闭防火墙验证是否为策略阻断。参考官方文档的“Check required ports”,并用netstat -tnlp检查占用。
- Pod 网络插件:初始化后需部署 CNI 插件(如Calico或Flannel):
- kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 或 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml
- 节点 NotReady:多因未安装 CNI、内核版本偏低或网络参数未生效;可升级内核并复核br_netfilter/ip_forward等参数。
- 重启后异常:常见于仅临时关闭了 SELinux/防火墙/Swap;重启后用journalctl -xefu kubelet与kubectl describe pod定位。
五 快速排查清单
- 查看节点与系统状态:
- kubectl get nodes;kubectl get pods -A
- free -m、df -h、top/vmstat 3、journalctl -xefu kubelet
- 复核关键配置:
- getenforce、swapoff -a、cat /proc/sys/net/bridge/bridge-nf-call-iptables
- systemctl status containerd docker kubelet
- 网络连通与端口:
- ping/ss/telnet 检查节点互通与端口可达;必要时按官方清单精确放行防火墙规则。