CentOS 上 K8s 安装常见问题与排查要点
一 环境准备与系统兼容
swapoff -a 并注释 /etc/fstab 中 swap 行;setenforce 0 并将 /etc/selinux/config 设为 SELINUX=permissive/disabled;配置 NTP/chrony 同步时间。/etc/hosts 或 DNS 中保证节点互解析。firewalld。二 容器运行时与 kubelet 配置
kubeadm init 阶段拉取镜像失败。--cgroup-driver=systemd)。/etc/docker/daemon.json:设置 "exec-opts": ["native.cgroupdriver=systemd"],必要时配置 "registry-mirrors";重启 Docker。/etc/sysctl.d/k8s.conf:启用 net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1、net.ipv4.ip_forward=1 并执行 sysctl -p。docker tag 重命名所需镜像。systemctl enable --now kubelet,查看 journalctl -u kubelet -f 定位启动失败原因。三 初始化与网络插件
kubeadm init 失败:证书、网络 CIDR 冲突、镜像拉取失败、端口占用等。kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16(Flannel 常用 10.244.0.0/16;Calico 常用 192.168.0.0/16,以所选清单为准)。kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml;如 Flannel 执行 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml。kubeadm token create --print-join-command 生成最新 Join 命令;如仍失败,先 kubeadm reset 清理后重试。四 端口与防火墙
firewall-cmd --reload;或测试环境临时停用 firewalld 简化排障。五 快速排查清单
kubectl get nodes;kubectl get pods -A;systemctl status kubelet;journalctl -u kubelet -f。free -h、/etc/fstab)、SELinux 为 permissive/disabled、时间已同步(timedatectl status)。sysctl -p 生效;ip a、ip route、bridge link 检查网卡与网桥;必要时抓包或 conntrack -S 观察连接跟踪。docker images 确认所需镜像存在;kubeadm reset 后使用最新 kubeadm init 与 kubeadm join 命令。