Linux系统安装Kubernetes集群 kubeadm部署实战

浅墨大大_7242

浅墨大大_7242

2026-04-08

833人浏览

原创

kubeadm init 卡在 [wait-control-plane] 阶段主因是 cri-dockerd/containerd 运行时未正确配置或 kubelet 服务未就绪;需检查 kubelet 状态、cgroup driver 一致性、containerd 是否启动,并确保 systemd 管理的 kubelet 已 active 且能响应本地 socket。

linux系统安装kubernetes集群 kubeadm部署实战

为什么 kubeadm init 卡在 [wait-control-plane] 阶段

绝大多数初学者卡在这一步,根本原因不是网络慢,而是 cri-dockerd 或 containerd 的镜像运行时未正确配置,或 kubelet 服务未就绪。kubeadm 默认依赖 systemd 管理的 kubelet,且要求其已启动、无报错、能响应本地 socket 请求。

实操建议:

  • 先执行 sudo systemctl status kubelet,确认状态为 active (running);若报 failed to run Kubelet,常见是 cgroup driver 不匹配(containerd 默认用 systemd,而 kubelet 配置里写了 cgroupfs)
  • 检查 /var/lib/kubelet/config.yaml 中 cgroupDriver 值,必须与 containerd 的 /etc/containerd/config.toml 中 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 下的 SystemdCgroup = true 保持一致
  • 执行 sudo crictl ps 应返回空列表但不报错;若提示 connection refused,说明 containerd 没启,或 kubelet 未指定正确的 --container-runtime-endpoint
  • 跳过镜像拉取(仅测试):加参数 --skip-phases=addon/coredns --image-repository registry.aliyuncs.com/google_containers,避免因国内网络卡在拉 kube-apiserver 镜像

初始化后 kubectl get nodes 显示 NotReady

NotReady 不等于失败,只是节点尚未通过 CNI 插件注册网络就绪状态。kubeadm init 完成后,kubelet 已注册节点,但 Pod 网络插件(如 Calico、Flannel)未部署,节点无法分配 IP、无法调度 Pod。

实操建议:

  • 确认 kubectl get pods -A 中 coredns 处于 Pending 状态 —— 这是典型 CNI 缺失信号
  • Calico 安装必须严格匹配 Kubernetes 版本:kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml 中的 v3.25 要根据你 kubeadm version 输出的 k8s 小版本(如 1.27.x → 用 v3.26)查对应文档
  • Flannel 注意修改 net-conf.json 中的 Network 字段,需与 kubeadm init --pod-network-cidr 参数值完全一致(例如都用 10.244.0.0/16)
  • 部署后等 30 秒再查 kubectl get nodes,Calico 的 calico-node DaemonSet 启动需要时间;若仍 NotReady,看 kubectl describe node <name></name> 中 Events 是否有 NetworkPluginNotReady 或 FailedCreatePodSandBox

worker 节点 kubeadm join 报错 couldn't validate the identity of the API Server

这不是证书过期,而是 control-plane 节点上的 kubeadm init 生成的 token 过期(默认 24 小时),或 worker 节点时间与 master 相差超过 1 分钟(TLS 双向校验对时间敏感)。

Free Ride - Unlimited free AI
Free Ride - Unlimited free AI

一款AI工具,主要用于管理 OpenClaw 所使用的来自 OpenRouter 的免费 AI 模型。自动按质量对模型进行排序,配置回退机制以应对速率限制,并更新 opencla...,适合需要提升相关任务效率的用户。

下载

实操建议:

  • 在 master 上重新生成 token:kubeadm token create --print-join-command,该命令输出的就是可直接复制执行的完整 kubeadm join 命令
  • 检查所有节点是否启用 NTP 同步:timedatectl status | grep "System clock synchronized",应为 yes;若否,运行 sudo timedatectl set-ntp true
  • 确保 worker 节点能访问 master 的 6443 端口:nc -v <master-ip> 6443</master-ip>;若不通,检查防火墙(ufw 或 firewalld)是否放行,或云平台安全组规则
  • 如果使用私有 CA 或自定义证书,kubeadm join 必须带上 --certificate-key 和 --control-plane(仅用于新增 control-plane 节点),普通 worker 不需要后者

集群部署后 DNS 解析失败(nslookup kubernetes.default 超时)

DNS 失败几乎全是 CoreDNS Pod 异常或 Service ClusterIP 冲突导致,和 /etc/resolv.conf 无关。CoreDNS 依赖 kube-system namespace 下的 kube-dns Service(ClusterIP 类型),而该 Service 的 endpoints 必须指向正常运行的 CoreDNS Pod。

实操建议:

  • 先确认 kubectl get svc -n kube-system kube-dns 存在且 CLUSTER-IP 非 None;再查 kubectl get endpoints -n kube-system kube-dns,SUBSETS 应有 IP+端口,否则 CoreDNS Pod 未就绪
  • 检查 CoreDNS Pod 日志:kubectl logs -n kube-system deployment/coredns -c coredns;常见错误是日志里出现 plugin/errors 或反复打印 ready: false,说明它连不上 kube-apiserver
  • 验证 apiserver 是否可访问:进任意 Pod(如 busybox),执行 curl -k https://10.96.0.1:443/healthz(10.96.0.1 是 kube-dns Service 的 ClusterIP,也是 kube-apiserver 的默认 Service 地址);若超时,说明 Service 网络不通,大概率是 CNI 插件没跑起来或配置错 CIDR
  • CoreDNS 的 ConfigMap 中 forward . /etc/resolv.conf 行不能删 —— 它负责把外部域名转发给宿主机 DNS,删了会导致访问 google.com 失败,但不影响集群内服务发现

真正麻烦的从来不是命令敲几遍,而是每个组件对 cgroup driver、时间同步、CIDR 对齐、证书时效这些隐性契约的强依赖。漏掉一个,kubectl 就只会冷冷地返回 NotReady 或 Connection refused,不会告诉你少配了哪一行。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2055

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3042

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1036

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3459

7

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2680

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3523

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

795

4

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

2023.09.14

13106

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux man-pages 项目
Linux man-pages 项目

共0课时 | 0人学习

Linux系统运维及项目正式上线
Linux系统运维及项目正式上线

共14课时 | 2.8万人学习

Linux负载均衡视频教程
Linux负载均衡视频教程

共7课时 | 1.9万人学习