马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
用 kubeadm 在三台 CentOS 9 上搭一个 k8s 集群,前置动作比集群本身更容易卡住:虚拟机克隆后 MAC、主机名、UUID 撞车,网络不通;防火墙没关导致 kubelet 起不来;镜像拉不动导致 Control Plane 初始化失败。这篇先把「三台机器准备到能跑 kubeadm」这一步做扎实,把这几类坑逐个填掉。
一、版本与环境说明
- 系统:CentOS 9;
- k8s:v1.29.5;
- docker:26.1.3;
- 私有镜像仓库:Harbor v2.9.4(可选,但生产环境建议有)。
集群规划(4 台虚拟机):
| 节点 | 主机名 | IP |
| 主节点 | k8s-master | 192.168.65.130 |
| 工作节点 1 | k8s-node1 | 192.168.65.131 |
| 工作节点 2 | k8s-node2 | 192.168.65.132 |
| 私有镜像仓库 | k8s-harbor | 192.168.65.135 |
参考官方文档: kubeadm 创建集群、Calico 网络插件安装。
二、从一台克隆出三台并改身份
1. 克隆
已经装好一台带 docker 的 CentOS 9 之后:右键虚拟机 → 克隆 → 下一步 → 选「当前状态」→ 选「创建完整克隆」→ 填名称、选存储位置 → 完成。重复出 node1、node2 两台。
2. 改 MAC 与虚拟化选项
克隆出来的机器 MAC 相同,会导致网络异常,必须改:
- 编辑虚拟机设置 → 硬件 → 网络适配器 → 高级 → 点「生成」换新 MAC → 确定;
- 处理器 → 勾选「虚拟化引擎」→ 确定;
- 另外两台同样处理。
3. 改主机名、IP 与 UUID
# 改主机名
hostnamectl set-hostname k8s-master
# 查看
hostname
# 生成新 UUID
uuidgen
# 改网卡配置(文件名按实际网卡来)
vim /etc/NetworkManager/system-connections/ens160.nmconnection
把 UUID 与新的 IP 填进去(新 IP 要在 VMware 分配的网段内),保存后重载网卡:
nmcli connection reload ens160
4. 关机打快照(可选但推荐)
关掉机器再打快照,恢复速度快;之后再开机继续。集群跑崩了还能回滚。
三、三台机器都要做的集群前置
1. 改 hosts
echo "192.168.65.130 k8s-master.com k8s-master" >> /etc/hosts
echo "192.168.65.131 k8s-node1.com k8s-node1" >> /etc/hosts
echo "192.168.65.132 k8s-node2.com k8s-node2" >> /etc/hosts
echo "192.168.65.135 k8s-harbor.com k8s-harbor" >> /etc/hosts
三台都加,后面组件之间按名字互相找,省掉一堆 IP 改动。
k8s 组件之间端口很多,防火墙没关会让节点加入失败。改完防火墙状态记得重启 docker:
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl restart docker
3. Docker 镜像加速
写 /etc/docker/daemon.json:
registry-mirrors:填可用的镜像加速器地址;
insecure-registries:如果你用自建 Harbor,把仓库地址填进来,否则 pull 会报证书错。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json
改完 sudo systemctl restart docker 生效。
四、这一步之后
- 三台机器互 ping 主机名能通、docker 正常、防火墙已关,就可以按 kubeadm 官方流程 init master、join 节点;
- 容器网络插件用 Calico,按官方文档装,别用已经废弃的 flannel 老方案;
- 节点 join 失败先看
journalctl -u kubelet,九成是前置没做干净(hosts 没同步、防火墙没关、SWAP 没关);
- 打快照是集群搭建阶段的保命手段,每过一关打一次。
qidao123.com企服评测-应用市场 编辑提示 |