国内安装kubernetes失败主因是镜像与软件源未切换至阿里云/清华等国内镜像站,需分别配置apt/yum源、预拉取control-plane镜像、设置containerd镜像加速、替换cni/coredns镜像地址,并确保kubeadm/kubelet/kubectl版本一致。

国内网络环境下直接用官方源装 Kubernetes,大概率卡在 kubeadm init 阶段拉不到镜像,或 kubectl 下载超时。核心问题不是“装不上”,而是默认配置没指向可用的镜像源和软件源。
配置阿里云/清华源替换 Kubernetes APT/YUM 源
Debian/Ubuntu 用户必须改 /etc/apt/sources.list.d/kubernetes.list;CentOS/RHEL 用户必须改 /etc/yum.repos.d/kubernetes.repo。不改就等于让包管理器去墙外找仓库,失败是常态。
- Ubuntu/Debian:用
https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt替换原https://apt.kubernetes.io - CentOS 7:用
https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/替换原 Google 官方 repo 地址 - 改完后务必执行
apt update或yum makecache,否则新源不生效 - 注意:kubeadm/kubelet/kubectl 版本要严格一致,例如都锁定为
1.24.15-00,避免因源混用导致版本错乱
预拉取 control-plane 镜像并指定 registry
kubeadm init 默认从 k8s.gcr.io 拉镜像,国内不可达。不能只靠 --image-repository 参数临时覆盖,因为部分组件(如 CoreDNS)的镜像名硬编码在 kubeadm 内部清单里,不预处理会失败。
评估 Kubernetes 集群安全态势,覆盖 RBAC、工作负载安全、网络策略、基础设施即代码(IaC)、运行时监控和密钥管理等 30 项控制项……
- 先执行
kubeadm config images list --kubernetes-version=v1.24.15查出所有需拉取的镜像 - 逐个用
docker pull从阿里云镜像站拉:比如registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.15 - 再运行
kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.24.15 - 跳过 preflight 检查(如 swap 已禁用但检测仍报错)可加
--ignore-preflight-errors=Swap,但不建议长期忽略
containerd 配置国内镜像加速器
即使 kubeadm 装上了,Pod 启动时 containerd 还会自己去拉业务镜像。如果没配镜像加速,kubectl run nginx 会卡在 ContainerCreating 状态。
- 编辑
/etc/containerd/config.toml,在[plugins."io.containerd.grpc.v1.cri".registry]下添加config_path = "/etc/containerd/certs.d" - 创建目录
/etc/containerd/certs.d/docker.io,并在其中放hosts.toml,内容填入阿里云或腾讯云的 mirror endpoint - 重启 containerd:
systemctl restart containerd,不重启配置不加载 - 验证是否生效:
crictl pull nginx应该秒级完成,而不是超时或重试
为什么 kubectl get nodes 返回 NotReady?
常见原因是 CNI 插件没装、或装了但镜像拉失败。Flannel/Calico 的 DaemonSet YAML 里默认镜像地址仍是 quay.io 或 docker.io,国内访问极慢甚至 404。
- 不要直接用官网 YAML:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - 下载后手动替换所有
image:行,例如把quay.io/coreos/flannel:v0.24.2改成registry.cn-hangzhou.aliyuncs.com/google_containers/flannel:v0.24.2 - 确认
coredns的 Deployment 也用了国内镜像,否则 DNS 不通,所有 Pod 都无法解析域名 - 检查
systemctl status kubelet日志,重点搜Failed to pull image和context deadline exceeded
真正卡住的地方往往不在安装命令本身,而在镜像拉取链路上的任意一环——kubeadm、kubelet、containerd、CNI 插件、CoreDNS,每个环节都可能单独失败。逐层验证比反复重装更省时间。










