Kuboard-Spary
基于 kubespray (opens new window)提供图形化的 K8S 集群离线安装、维护工具。
官网
KuboardSpray | https://kuboard-spray.cn/
兼容性
操作系统的兼容性取决于 资源包,最新资源包 支持的操作系统有: Ubuntu、Anolis、CentOS、RedHat、OracleLinux、Rocky Linux、Kylin Linux Advanced Server、openSUSE Leap 等
安装Kuboard-Spray
找一台不低于1核2G,不少于10G剩余磁盘空间,已经安装好 docker 的服务器,执行如下指令,即可完成 KuboardSpray 的安装:
离线安装时,在可以联网的机子上拉取对应镜像
[root@manage ~]# docker load -i kuboard-spray-v1.2.4-amd64.tar
0eba131dffd0: Loading layer [==================================================>] 75.16MB/75.16MB
6bf5922392b8: Loading layer [==================================================>] 3.584kB/3.584kB
b7ec1bdadac9: Loading layer [==================================================>] 376.1MB/376.1MB
a1116a8b0eba: Loading layer [==================================================>] 164.5MB/164.5MB
63e1f35eb2b6: Loading layer [==================================================>] 2.048kB/2.048kB
57ad3256d2a2: Loading layer [==================================================>] 2.56kB/2.56kB
befa9dce28ec: Loading layer [==================================================>] 479.2MB/479.2MB
ed17f8e2e740: Loading layer [==================================================>] 86.53kB/86.53kB
06d40503cfc3: Loading layer [==================================================>] 24.06kB/24.06kB
eefc133193fd: Loading layer [==================================================>] 23.55kB/23.55kB
2d2497260679: Loading layer [==================================================>] 7.68kB/7.68kB
0f14582253f2: Loading layer [==================================================>] 7.517MB/7.517MB
c0d05ade22b8: Loading layer [==================================================>] 258.6kB/258.6kB
b5f895fc864b: Loading layer [==================================================>] 18.94kB/18.94kB
c2d721dd7251: Loading layer [==================================================>] 17.19MB/17.19MB
5b5b9f1e937e: Loading layer [==================================================>] 16.38MB/16.38MB
de00719b1631: Loading layer [==================================================>] 4.096kB/4.096kB
3462c7be3056: Loading layer [==================================================>] 24.7MB/24.7MB
Loaded image: eipwork/kuboard-spray:v1.2.4-amd64启动kuboard-spray容器
docker run -d \
--privileged \
--restart=unless-stopped \
--name=kuboard-spray \
-p 80:80/tcp \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:latest-amd64
# 如果是 arm64 环境,请将标签里的 amd64 修改为 arm64,例如 eipwork/kuboard-spray:latest-arm64
# 如果抓不到这个镜像,可以尝试一下这个备用地址:
# swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64常见问题
- KuboardSpray 的信息保存在容器的
/data路径,请将其映射到一个安全的地方,上面的命令中,将其映射到了~/kuboard-spray-data路径;- 只要此路径的内容不受损坏,重启、升级、重新安装 Kuboard-Spray,或者将数据及 Kuboard-Spray 迁移到另外一台机器上,都可以找回到原来的信息
登录kuboard-spray
在浏览器地址栏中输入 http://这台机器的IP地址,输入用户名 admin,默认密码 Kuboard123,即可登录 kuboard-spray 界面
正常可以访问到此页面,输入用户名 admin,默认密码 Kuboard123

加载资源包
离线资源的拉取
点击资源包列表,点击离线导入

在弹出的框框内点击离线导入,选择对应的镜像源,按照步骤二的第1点拉取镜像并保存,上传到目标机器,在目标机器执行步骤二的第3点,记录步骤三的yaml信息

加载资源包
点击添加集群安装计划

新环境点击添加资源包—>确定(添加资源包)

在线安装直接选择导入
离线安装在其他有网的机子,拉取对应离线镜像包/自己制作对应镜像包,然后点击离线导入

权限问题:
- 导入资源包时,可能会碰到
no such file or directory或者permission denied之类的错误提示,通常是因为开启了 SELinux,导致 kuboard-spray 不能读取映射到容器/data的路径离线导入:
- 如果处在内网环境,上图中的列表默认将是空的,请注意其中的
离线加载资源包按钮,它可以引导轻松完成资源包的离线加载过程。- 离线导入所需的yaml信息,记得随离线资源一起带走
将离线包导入【离线需操作】
[root@manage ~]# docker load -i kuboard-spray-resource-spray-v2.21.0c_k8s-v1.26.4_v4.4-amd64.tar
8d3ac3489996: Loading layer [==================================================>] 5.866MB/5.866MB
5623aeba2121: Loading layer [==================================================>] 456.2MB/456.2MB
d623e0c8461d: Loading layer [==================================================>] 195.5MB/195.5MB
3447235ba453: Loading layer [==================================================>] 397.5MB/397.5MB
bd33c99c3d79: Loading layer [==================================================>] 496.2MB/496.2MB
f3dc33297d56: Loading layer [==================================================>] 6.788MB/6.788MB
da94e024bd20: Loading layer [==================================================>] 48.84MB/48.84MB
fe2bac659d0c: Loading layer [==================================================>] 7.168kB/7.168kB
35bf8d78d459: Loading layer [==================================================>] 7.168kB/7.168kB
a25e06ce9733: Loading layer [==================================================>] 114.7kB/114.7kB
Loaded image: eipwork/kuboard-spray-resource:spray-v2.21.0c_k8s-v1.26.4_v4.4-amd64将步骤三的yaml信息填到离线资源包的框框中


点击确认

等待完成,完成后离线包已导入

然后回到上一个页面点击任务已结束

顶上会提示已导入成功,这个页面也可以关闭了

安装集群
添加计划
回到最初的页面/回到首页,点击添加集群安装计划按钮,填写集群名称、选择资源包,点击确认
集群名称:这个名称保存后不可修改
资源包:选择已经导入的资源包,如果没有可尝试刷新,若刷新也没有可能是未导入成功

集群规划
点击添加节点
注意:
kuboard-spray 所在机器不能当做 K8S 集群的一个节点,因为安装过程中会重启集群节点的容器引擎,这会导致 kuboard-spray 被重启掉。

输入节点名称、选择节点角色,点击确认
注意点:
- 最少的节点数量是 1 个
- ETCD 节点、控制节点的总数量必须为奇数
- 在
全局设置标签页,可以设置节点的通用连接参数,例如所有的节点都使用相同的 ssh 端口、用户名、密码,则共同的参数只在此处设置即可- 在节点标签页,如果该节点的角色包含
etcd则必须填写ETCD 成员名称这个字段- 如果 KuboardSpray 所在节点不能直接访问到 Kubernetes 集群的节点,可以设置跳板机参数,使 KuboardSpray 可以通过 ssh 访问集群节点
- 集群安装过程中,除了已经导入的资源包以外,还需要使用 yum 或 apt 指令安装一些系统软件,例如 curl, rsync, ipvadm, ipset, ethtool 等,此时要用到操作系统的 apt 软件源或者 yum 软件源。
全局设置标签页中,可以引导完成 apt / yum 软件源的设置,可以:
- 使用节点操作系统已经事先配置的 apt / yum 源
- 在安装过程中自动配置节点的操作系统使用指定的软件源
- 如果使用 docker 作为集群的容器引擎,还需要在
全局设置标签页指定安装 docker 用的 apt / yum 源- 如果使用 containerd 作为容器引擎,则无需配置 docker 的 apt / yum 源,containerd 的安装包已经包含在 KuboardSpray 离线资源包中

在右侧输入对应信息,选择组件等,点击验证连接会测试与主机的连接性,成功会给出 对应的信息


保存信息
填写完后,点击保存

安装集群
点击安装/设置集群

默认即可,点击确认

会新开一个窗口输出安装日志

安装完成/失败后底下会有提示,右上角也会有结束的标志

回到原来的页面点击任务已结束

安装完后

在master节点,可查看节点信息
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 4m24s v1.26.4
node1 Ready <none> 3m16s v1.26.4
可选组件取消了kuboard,可以按照自己的习惯,安装其k8s WEB管理工具,如dashboard、kuboard,如果需要kuboard完全可以在可选组件选择kuboard进行安装
当前安装方式,证书是一年的证书,每个月的第一个星期会进行滚动更新,至于滚动更新是依赖于
kuboard-spary,还是依赖于kuboard,暂时不确认
其他
查看污点
# kubectl describe nodes <node-name> | grep Taints
# 如master节点
kubectl describe nodes master |grep Taints删除污点
gameble-
# gameble就是污点名,后加减号就删掉了
kubectl taint nodes <node-name> <taint-name>:<effect>-
# 如master
kubectl taint nodes master gameble-关于高可用
ETCD
Kuboard-Spray 自动配置为集群:部署时若有多个 etcd 节点,会自动组建为 etcd 集群,API Server 将配置连接到所有 etcd 节点。
ETCD 是一个基于 Raft 共识算法的分布式键值存储系统,其高可用性通过集群方式实现。
集群配置自动化:在 Kuboard-Spray 的节点规划中,只需要将至少 3个节点 的角色分配为
etcd和control-plane。部署工具会自动完成所有集群配置,并确保 API Server 的--etcd-servers参数中包含所有这些 etcd 节点的地址。故障容错能力:
etcd集群通过多数节点同意(仲裁)来决策。集群规模决定了其容错能力,具体对应关系如下:实际上2个节点这种Kuboard-Spray会提示你使用三个节点ETCD,生产环境推荐:部署奇数个(如3或5个)节点以维持仲裁(Quorum)
| 集群节点数 | 最大容错节点数 |
|---|---|
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
API Server
动配置负载均衡:在每个非控制节点上部署 nginx 反向代理,代理所有 API Server 实例的请求(Localhost Load Balancing)。这避免了依赖外部负载均衡器的复杂性,简化了部署。
API Server 是无状态服务,其高可用依赖于负载均衡。
- 内置负载均衡器:Kuboard-Spray 采用了一种巧妙的 "Localhost Load Balancing"(本地主机负载均衡)策略,在**每个非控制平面节点(即Worker节点)**上部署一个
nginx反向代理,将发往localhost:6443的请求,以轮询方式均衡地分发到所有API Server实例上。 - 组件配置详解:集群内各组件的流量走向如下:
- 工作负载访问:
kubelet和kube-proxy会通过本地的nginx代理 (127.0.0.1:6443) 连接到API Server,避免单点故障。 - 控制平面内部通信:
kube-controller-manager和kube-scheduler默认会连接到localhost:6443,这同样保证了它们对 API Server 访问的高可用。 - 外部访问:对于管理员从集群外部使用
kubectl的情况,你需要自己提供一个外部负载均衡器,或者使用kube-vip这类工具来提供一个虚拟 IP,以便将流量分发到各个控制平面节点上。
- 工作负载访问: