SuperAPI AI 工具集

kubespray-lab-setup

部署与运维

查看项目

更新于 10-23 01:25

技能介绍

Kubespray Lab Setup 是一个用于本地搭建 Kubespray 测试环境的技能,基于 Vagrant 与 VirtualBox 创建 6 节点 Rocky Linux 10 实验室,用于验证 Kubespray 高可用(HA)部署。

用途 该技能覆盖:为 Kubespray 测试搭建本地 Vagrant/VirtualBox 实验室;创建多节点 Rocky Linux 集群;配置带 HAProxy、NFS 与部署工具的管理节点;为 K8s 节点准备内核模块与 sysctl 设置;使用本地负载均衡器测试 HA 配置。它不负责运行 Kubespray playbook、配置 HA 变量或排查集群问题,这些属于其他技能的范围。

架构与节点规格 所有节点位于 VirtualBox Host-Only 网络 192.168.10.0/24。admin-lb(192.168.10.10,2 CPU / 1024 MB)承担部署工作站、HAProxy 负载均衡(API :6443 转发至控制平面,统计页 :9000,Prometheus :8405)和 NFS 服务器(/srv/nfs/share)。k8s-node1~3(192.168.10.11-13,各 4 CPU / 2048 MB)为控制平面 + stacked etcd;k8s-node4~5(192.168.10.14-15,各 4 CPU / 2048 MB)为工作节点。每台 VM 使用 enp0s3(NAT,联网)和 enp0s8/enp0s9(Host-Only,集群通信)。

主要能力 Vagrantfile 定义 6 台 VM,使用 bento/rockylinux-10 镜像,启用 linked_clone 节省磁盘,并通过 --nicpromisc2 allow-all 允许第二块网卡的混杂模式以支持 Calico/Flannel 等 CNI 流量;K8s 节点先于 admin-lb 创建,以便后者进行 SSH 密钥分发。

admin-lb.sh 完成管理节点引导:设置时区、关闭 firewalld 与 SELinux、开启 root 登录与密码认证、写入 /etc/hosts、安装并配置 HAProxy(含 TCP 健康检查与统计/Prometheus 前端)、安装 NFS 服务并导出 /srv/nfs/share、通过 Kubernetes 官方仓库安装 kubectl、安装 k9s 与 Helm、用 sshpass 向 5 个节点分发 SSH 密钥,并克隆 Kubespray v2.29.1 并安装其 Python 依赖。

init_cfg.sh 完成 K8s 节点初始化:设置时区、关闭 swap、关闭 firewalld 与 SELinux、加载 overlay 与 br_netfilter 内核模块、配置 bridge-nf-call-iptables、ip_forward 等 sysctl 参数、写入 /etc/hosts、配置 SSH 登录。

使用方式 在项目目录执行 vagrant up(约 15-30 分钟)启动全部 VM;用 vagrant status 确认 6 台运行;vagrant ssh admin-lb 登录管理节点;通过 ssh root@192.168.10.1N hostname 验证连通性;用 systemctl status haproxy 及浏览器访问 http://192.168.10.10:9000/stats 检查 HAProxy;用 curl http://192.168.10.10:8405/metrics 查看指标(K8s 未部署前 API 前端显示 DOWN 属正常);用 showmount -e localhost 验证 NFS 导出。

Rocky Linux 10 注意事项 系统自带 Python 3.12 并启用 PEP 668,直接 pip install 会报 externally-managed-environment;脚本已使用 pip3 install --break-system-packages 处理,也可改用虚拟环境。

常见错误与限制 可能遇到 VirtualBox 存储控制器不匹配、host-only 网段被拒(需在 /etc/vbox/networks.conf 中加入 192.168.10.0/24)、启动超时、sshpass 分发密钥失败(可重跑 vagrant provision admin-lb)、HAProxy 未运行、NFS 导出未生效等。常见错误还包括:遗漏 --nicpromisc2 allow-all 导致 CNI 流量被丢弃;Kubespray inventory 未设置 ip= 导致误用 NAT 地址;先启动 admin-lb 导致密钥分发失败;未关闭 swap 或 SELinux 导致 kubelet/容器运行时异常;未启用 linked_clone 造成磁盘占用过大;Kubespray 分支与 K8s 版本不匹配导致部署失败。该技能面向本地实验环境,脚本中写有固定密码,仅应在隔离测试环境中使用。