二进制安装 Kubernetes 适合需要深度定制集群环境或离线场景,但相比自动化脚本,它要求手动处理证书、网络插件和系统参数,容易在组件兼容性和配置细节上出错。
先说结论:二进制安装适合学习原理或特殊环境,生产环境建议先准备好内核版本、证书 SAN 列表和网络插件方案。
- 适合:需要定制组件参数、离线环境或学习 K8s 架构的场景
- 先准备:检查内核版本是否支持 cgroup v2,规划好证书 SAN 包含所有访问地址
- 验收:确保所有节点状态为 Ready 且核心组件 Pod 运行正常
命令速用版
遇到节点无法加入或组件启动失败,优先执行以下检查:
systemctl status kubelet -l
journalctl -u kubelet -xe
kubectl get csr
kubectl certificate approve <csr-name>
uname -r
为什么会这样
二进制安装缺乏自动化脚本的容错检查,每个组件(如 kubelet、apiserver)都需要手动配置 systemd 服务和证书。常见问题多源于系统环境不匹配(如内核版本过低)、证书签名遗漏(SAN 字段缺失)或网络插件未正确初始化,导致组件间通信失败。
分步处理
1. 环境准备:关闭防火墙、禁用 SELinux 和 Swap,确保内核版本满足要求(CentOS 7 默认内核可能需升级)。
2. 证书配置:生成证书时,SAN 字段需包含所有 Master 节点 IP、域名及 Kubernetes 默认域名(如 kubernetes.default)。
3. 组件启动:配置 kubelet 时使用 `--cgroup-driver`=systemd,并确保 containerd 或 Docker 配置一致。
4. 网络插件:安装 Calico 或 Flannel 前,确保 etcd 连通性,并配置正确的 Pod 网段。
怎么验证是否生效
执行 kubectl get nodes 查看所有节点状态是否为 Ready,同时检查 kube-system 命名空间下的核心组件(如 coredns、network-plugin)是否处于 Running 状态。
kubectl get nodes
kubectl get pod -n kube-system
常见坑
1. 内核版本不兼容:CentOS 7 默认内核 3.10 可能导致 kubelet 崩溃,建议升级至 5.4.x 以上长期支持内核。
2. 证书过期或遗漏:证书 SAN 未包含 VIP 或域名会导致 APIServer 认证失败,日志出现 x509 错误。
3. 节点无法加入:CSR 请求 Pending 状态未批准,或 token.csv 文件格式错误导致 TLS 引导认证失败。
4. 网络插件缺失:未安装 CNI 插件前,Pod 无法启动,节点状态可能一直为 NotReady。
参考来源
- 避坑指南:在 CentOS 7/8/9 上二进制安装 K8s v1.35.0 最容易踩的 10 个坑及解决方案
- 99% 的人都会遇到!二进制安装 K8s 节点无法加入集群排查思路详解
- 二进制安装 Kubernetes(k8s) v1.23.5 ---(上)
- 以二进制文件安装 K8S 之环境准备
- 二进制安装 k8s 集群 (5)-安装 flannel