Kubernetes安装失败主因是环境未清理或关键参数遗漏:必须关闭SELinux(setenforce 0并改config)、firewalld(stop+disable)、swap(swapoff -a并注释fstab),确认Docker cgroup驱动为systemd,检查kubelet日志定位cgroups/cert/port问题。

Kubernetes安装失败,八成不是版本不兼容,而是环境没清理干净或关键系统参数被忽略。直接看现象、查日志、改配置,比重装快得多。
CentOS上kubeadm init卡住或报错failed to run Kubelet
kubeadm init 卡在 [wait-control-plane] 或启动后 kubelet 一直 Crash,常见于 SELinux、firewalld、swap 未关闭,或 cgroup 驱动不一致。
- 必须关闭 SELinux:运行
sudo setenforce 0并修改/etc/selinux/config中SELINUX=disabled - 必须关闭 firewalld:
sudo systemctl stop firewalld && sudo systemctl disable firewalld - 必须禁用 swap:
sudo swapoff -a,并注释掉/etc/fstab中所有 swap 行 - 确认 Docker 使用 systemd cgroup 驱动:检查
/etc/docker/daemon.json是否含"exec-opts": ["native.cgroupdriver=systemd"],改完重启docker - 若仍失败,用
journalctl -u kubelet -n 100 -f看实时错误,重点搜cgroups、cert、port关键字
Node状态为NotReady,或flannel/coredns卡在ContainerCreating
节点 NotReady 或核心组件起不来,大概率是 CNI 插件没装对、没生效,或网络配置与集群 CIDR 冲突。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
- 先确认
kubectl get pods -n kube-system中coredns和flannel(或calico-node)是否处于Pending或ContainerCreating - 执行
kubectl describe pod -n kube-system <pod-name></pod-name>,看 Events 里是否有FailedCreatePodSandBox或open /run/flannel/subnet.env: no such file - Flannel 场景下,手动创建缺失文件:
sudo mkdir -p /run/flannel && sudo tee /run/flannel/subnet.env,填入正确子网(如FLANNEL_NETWORK=10.244.0.0/16) - 确保
kubeadm init时指定的--pod-network-cidr与 CNI 配置中定义的 CIDR 完全一致(例如 Flannel 要求--pod-network-cidr=10.244.0.0/16) - Calico 用户注意:某些内核版本需开启
iptables -P FORWARD ACCEPT,否则 Pod 间不通
kubectl 命令报错 The connection to the server localhost:8080 was refused
这不是 API Server 没起来,而是本地 kubectl 没拿到认证凭据,常见于非 root 用户安装后没同步 admin.conf。
- 检查
/etc/kubernetes/admin.conf是否存在且可读 - 普通用户执行:
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config - root 用户只需:
export KUBECONFIG=/etc/kubernetes/admin.conf(临时)或直接复制到/root/.kube/config - 验证:
kubectl cluster-info应返回Kubernetes control plane is running,而非连接拒绝 - 如果用的是 kubeadm 1.25+,注意默认不再生成
~/.kube/config,必须显式拷贝或使用kubeadm init phase upload-config kubeconfig补救
镜像拉取失败导致 coreDNS 或 etcd 启动卡住
离线环境或国内网络下,kubeadm init 默认拉取 k8s.gcr.io 镜像必然失败,但错误提示常被掩盖在 kubelet 日志深处。
- 先查
kubectl get pods -A,若etcd或coredns处于ImagePullBackOff,说明镜像没拉到 - 用
kubeadm config images list查出所需镜像列表,再用docker pull手动拉取并重打 tag(例如docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.0→docker tag ... k8s.gcr.io/kube-apiserver:v1.28.0) - 更稳妥的做法:init 前加
--image-repository参数,例如kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers - 注意 etcd 镜像名特殊:kubeadm v1.28+ 默认用
registry.k8s.io/etcd,别误配成google_containers/etcd - 若已失败,删掉
kubeadm reset后务必清空/var/lib/kubelet/pki和/etc/kubernetes/manifests,否则证书冲突会复现
真正难排查的从来不是“哪个步骤错了”,而是“哪个前提被默认跳过了”——比如 swap 没关透、cgroup 驱动没对齐、或者 admin.conf 权限漏改。装之前花两分钟跑一遍检查清单,比装一半再翻日志省三小时。

















