KubeSphere 多机部署在集群上部署 cube-studio

K8s 集群与 KubeSphere 就绪后,在其上部署 CubeStudio(含存储、网关、转发模式处理)时读这篇

02-部署安装 / 部署方式 / KubeSphere多机部署
CubeStudio部署kubeconfig节点标签label nodeistiogatewayvirtualservicenodeportservice-node-port-rangekube-proxyipvsiptableskube-ipvs0NFSjuicefs分布式文件系统

KubeSphere 多机部署(三)在集群上部署 cube-studio

这是「KubeSphere 多机部署」系列的第 3 篇,概览与目录见 README。 开始前请先完成 K8s 集群与 KubeSphere 安装,见 02-安装KubeSphere与K8s集群

KubeSphere 集群就绪后,按"单机部署 cube-studio"的标准流程部署平台即可(参见 单机 k8s 部署),但因为 KubeSphere 已自带 Prometheus 等组件,需要做几处适配。仓库为此提供了专门的部署脚本 install/kubernetes/start-with-kubesphere.sh(相比标准 start.sh,它跳过了 Prometheus operator / node-exporter / servicemonitor 那一整套,只额外部署 grafana 与 prometheus-adapter,复用 KubeSphere 自带的 Prometheus)。

步骤 4:部署 CubeStudio

1. 下载 CubeStudio 源码

下载源码:

git clone --depth=1 https://github.com/data-infra/cube-studio.git

可选:NFS 安装

KubeSphere 没有自带分布式文件系统,可先用 NFS 提供共享存储:

# 服务器端
yum -y install rpcbind nfs-utils
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
echo "/data/k8s *(rw,no_root_squash)" >> /etc/exports
exportfs -rv

# 客户端(其它节点)
yum -y install nfs-utils
mount -t nfs 192.168.31.110:/data/k8s/ /data/k8s
echo "192.168.31.110:/data/k8s /data/k8s nfs noatime,nodiratime 0 0" >>/etc/fstab

之后应用 NFS 的 StorageClass,并为旧版 NFS 动态供应开启 RemoveSelfLink=false

说明:原始笔记此处引用了一个本地的 nfs-sc.yaml(NFS StorageClass 定义文件),但该文件为作者本机路径、未随仓库提供。请自行准备 NFS StorageClass 的 yaml(定义 provisioner、回收策略等)后 kubectl apply。NFS 离线部署的相关示例可参考 install/kubernetes/nfs/(含 nfs.yamlNFS离线部署.md)与 04-运维管理/分布式存储目录

kubectl apply -f nfs-sc.yaml

# 旧版本 k8s 的 NFS 动态供应需要开启该特性门控
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 添加
--feature-gates=RemoveSelfLink=false

注意:

  • 一定要关闭 KubeSphere 的默认存储类(避免与上述 StorageClass 冲突)。
  • 建议直接在 KubeSphere 中安装 Istio 网关。

2. 复制 config

将 k8s 集群的 kubeconfig 文件复制到 install/kubernetes/config

cp $HOME/.kube/config install/kubernetes/config

然后在 worker 上用 KubeSphere 专用脚本部署,xx.xx.xx.xx 为机器内网 IP:

# KubeSphere 环境用这个脚本(跳过 Prometheus operator 那套,复用 KubeSphere 自带 Prometheus)
sh start-with-kubesphere.sh xx.xx.xx.xx

如需手动只给节点打标签(脚本内也会做这一步),标签集合如下:

kubectl label node node112 train=true cpu=true notebook=true service=true org=public istio=true kubeflow=true kubeflow-dashboard=true mysql=true redis=true monitoring=true logging=true --overwrite

上面的标签集合与 install/kubernetes/start-with-kubesphere.sh(第 19 行)、标准 start.sh(第 25 行)给节点打的标签完全一致;多机时把 node112 换成实际节点名(或按需给多个节点打标签)。

注意:start-with-kubesphere.sh 并不会把 istio 全部注释掉——它仍然部署 istioinstall-1.15.0.yaml + gateway.yaml + virtual.yaml,见 install/kubernetes/start-with-kubesphere.sh:69-82),只跳过了 Prometheus operator/node-exporter/servicemonitor 那套(对比纯 start.sh:49-99 的完整 Prometheus operator 栈)。如果你的 KubeSphere 已启用并接管 istio 网关,请按需自行注释掉脚本中 istio 部分,避免重复安装。

3. istio 网关与端口映射

istio 中 gatewayvirtualservice 两个配置注意加上 name,并添加 nodeport 之类的映射;也可以改 KubeSphere 的 nodeport 范围,把它映射到 80 端口(不采用 externalIP 指定的方式)。

建议手动确定 nodeport 范围,修改 istio gateway 的映射端口;并扩大 API server 的 nodeport 范围:

vi /etc/kubernetes/manifests/kube-apiserver.yaml
# 加入
--service-node-port-range=1-40000

# 或用脚本在 "- kube-apiserver" 行后插入
line=$(cat /etc/kubernetes/manifests/kube-apiserver.yaml|grep -n '\- kube-apiserver'|awk -F ":" '{print $1}')
sed -i "$line a\ \ \ \ -\ --service-node-port-range=1-40000" /etc/kubernetes/manifests/kube-apiserver.yaml

CubeStudio 仓库中 istio 的网关 / 路由配置见 install/kubernetes/gateway.yamlinstall/kubernetes/virtual.yamlstart.sh 会 apply 这两个文件。

4. kube-proxy 转发模式(IPVS → iptables)

注意:当 kube-proxy 为 IPVS 模式时,使用原来的 start.sh 脚本,不要用本机 IP(用 externalIP 指定本机 IP 会导致集群崩溃)。

KubeSphere 默认转发模式是 IPVS,如有需要可改为 iptables:

kubectl edit cm kube-proxy -n kube-system
# 搜索 /mode,把 mode 从 ipvs 改为 ""

如果已有集群残留了 IPVS 的虚拟网卡地址,删除:

# 删除已绑定到 kube-ipvs0 的地址
ip addr del 192.168.31.110/32 dev kube-ipvs0
# 删除虚拟网卡
ip link del kube-ipvs0

关于 IPVS 模式转发失败、externalIP 导致节点故障的排查可参考:

5. 分布式文件系统(JuiceFS)

KubeSphere 没有自带分布式文件系统,官网推荐 Ceph 或 JuiceFS。使用 JuiceFS:

cd install/kubernetes/juicefs/ && sh start_juicefs.sh

执行前请:

  1. 阅读 install/kubernetes/juicefs/README.md
  2. 修改 install/kubernetes/juicefs/.env 中的 JUICEFS_HOST_IP 为本节点的 IP;
  3. 保证 /data 目录有足够空间。

部署完成后的访问入口、排查清单等可参考 单机 k8s 部署 中的部署后排查部分。本篇命令与版本号来自原始 KubeSphere 部署笔记,具体以源码(install/kubernetes/)为准,仅供导航与上手。

最后更新 2026-07-04完整文档以官方仓库为准:GitHub Wiki