章
目
录
现在大模型为我们的工作带来了极大便利,像DeepSeek、豆包、Qwen等,敲几个字就能实现文案生成、代码编写、表格制作等功能,极大地提升了效率。不过,对于企业而言,公司内部数据敏感度高,使用外部大模型存在数据泄露风险。我在为Rainbond开源社区用户解答疑问时发现,大家对大模型私有化部署的需求十分强烈,都希望将大模型部署到企业内网,既能根据自身需求定制优化,又能保障数据安全与合规。
网上虽然有不少相关教程,但大多零散,且操作方式偏向极客风格,真正能应用到生产环境中的少之又少。经过一番摸索,我找到了一套全链路解决方案,借助Ollama、RKE2、Rainbond和GPU Operator,1小时内就能完成Deepseek大模型的部署。下面,我就详细给大家介绍一下具体步骤。
一、前期准备
首先,我们需要准备一台合适的GPU服务器,以NVIDIA A100为例,推荐的硬件配置如下:
- CPU:14核及以上
- 内存:56GB及以上
- GPU:NVIDIA A100(24GB显存,也支持其他CUDA兼容显卡,不过需要确认是否在GPU Operator支持列表内)
- 操作系统:Ubuntu 22.04(需与GPU Operator支持的系统版本匹配)
二、部署RKE2
这里我们以单节点集群为例进行快速部署演示。
(一)创建RKE2配置
- 私有镜像仓库配置:Rainbond有默认的私有镜像仓库,我们要对其进行配置。
mkdir -p /etc/rancher/rke2
上述命令用于创建存放RKE2配置文件的目录。接着,通过以下命令创建registries.yaml
文件并配置相关信息:
cat > /etc/rancher/rke2/registries.yaml << EOL
mirrors:
"goodrain.me":
endpoint:
- "https://goodrain.me"
configs:
"goodrain.me":
auth:
username: admin
password: admin1234
tls:
insecure_skip_verify: true
EOL
这个文件里配置了镜像仓库的地址、认证信息等,确保后续能顺利拉取镜像。
2. 集群基础配置:创建集群的基础配置文件config.yaml
。
cat > /etc/rancher/rke2/config.yaml << EOF
disable:
- rke2-ingress-nginx #禁用默认Ingress,会与Rainbond网关冲突
system-default-registry: registry.cn-hangzhou.aliyuncs.com # 国内镜像仓库
EOF
这里禁用了默认的Ingress,因为它会和Rainbond网关产生冲突,同时指定了国内镜像仓库,加快镜像拉取速度。
(二)安装并启动RKE2
为了提升部署速度,我们利用国内镜像进行加速安装。
# 一键安装RKE2(国内源)
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# 启动服务
systemctl enable rke2-server.service && systemctl start rke2-server.service
安装过程大概需要5 – 20分钟,具体时长取决于网络情况。我们可以通过journalctl -fu rke2-server
实时查看安装日志,了解安装进度。
(三)验证集群状态
安装完成后,我们要拷贝Kubernetes工具及配置文件,方便后续操作。
mkdir -p /root/.kube
#集群配置文件
cp /etc/rancher/rke2/rke2.yaml /root/.kube/config
#拷贝命令行工具
cp /var/lib/rancher/rke2/bin/{ctr,kubectl} /bin
接下来,执行下面的命令确认节点与核心组件是否正常运行:
#查看节点状态(应显示Ready)
kubectl get node
#查看系统Pod(所有kube-system命名空间下的Pod应为Running状态)
kubectl get pod -n kube-system
当看到节点状态显示为“Ready”,且kube-system
命名空间下的Pod都处于“Running”状态时,就说明RKE2集群部署成功了。此时,我们就可以继续后续的操作,通过GPU Operator接入显卡资源,为大模型运行提供算力支持。
三、部署GPU Operator
(一)提前准备国内镜像(解决NFD镜像拉取问题)
由于node-feature-discovery(NFD)
镜像的默认仓库在国外,直接拉取可能会遇到问题,所以我们要提前通过国内镜像站下载并打标签。
export CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sock
ctr -n k8s.io images pull registry.cn-hangzhou.aliyuncs.com/smallqi/node-feature-discovery:v0.17.2
ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/smallqi/node-feature-discovery:v0.17.2 registry.k8s.io/nfd/node-feature-discovery:v0.17.2
这些命令先设置了容器运行时的地址,然后从国内镜像站拉取NFD镜像,并将其标记为Kubernetes官方认可的镜像,方便后续使用。
(二)安装Helm
Helm是Kubernetes的包管理器,我们需要安装它来部署GPU Operator。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
&& chmod 700 get_helm.sh \
&& ./get_helm.sh
这组命令通过下载安装脚本并赋予执行权限,完成Helm的安装。
(三)配置GPU Operator安装参数
创建gpu-values.yaml
文件,指定所有组件使用国内镜像仓库,防止拉取国外镜像失败。
cat > gpu-values.yaml << EOF
toolkit:
env:
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock
- name: CONTAINERD_RUNTIME_CLASS
value: nvidia
- name: CONTAINERD_SET_AS_DEFAULT
value: "true"
version: v1.17.1-ubuntu20.04
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
validator:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
operator:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
initContainer:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
driver:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
manager:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
devicePlugin:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
dcgmExporter:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
gfd:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
migManager:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
vgpuDeviceManager:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
vfioManager:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
driverManager:
repository: registry.cn-hangzhou.aliyuncs.com/smallqi
EOF
这个文件对GPU Operator的各个组件进行了配置,指定了它们使用的镜像仓库、运行时参数等信息。
(四)一键安装GPU Operator
# 添加NVIDIA Helm仓库并更新
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
# 安装GPU Operator(指定版本和配置文件,无需修改参数)
helm install gpu-operator -n gpu-operator --create-namespace \
nvidia/gpu-operator --version=v25.3.0 -f gpu-values.yaml
上述命令先添加NVIDIA的Helm仓库并更新,然后使用指定的版本和配置文件安装GPU Operator。安装完成后,等待约3 – 5分钟,通过kubectl get pod -n gpu-operator
确认所有Pod状态为“Running”,表示安装成功。
(五)配置RKE2默认容器运行时
让RKE2默认使用nvidia
作为容器运行时。
cat > /etc/rancher/rke2/config.yaml << EOF
disable:
- rke2-ingress-nginx #禁用默认Ingress,会与Rainbond网关冲突
system-default-registry: registry.cn-hangzhou.aliyuncs.com # 国内镜像仓库
default-runtime: nvidia #指定 nvidia 为默认容器运行时
EOF
# 重启RKE2使配置生效
$ systemctl restart rke2-server.service
# 等待5分钟,确保所有系统Pod重新启动完成
修改config.yaml
文件后,重启RKE2服务使配置生效,等待所有系统Pod重新启动完成,这样RKE2就会使用nvidia
作为默认容器运行时了。
(六)验证GPU算力调度
创建测试Pod,验证GPU是否能被K8s正常识别和使用。
# 生成测试YAML(运行CUDA示例程序)
cat > cuda-sample.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vectoradd
image: registry.cn-hangzhou.aliyuncs.com/zqqq/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04
resources:
limits:
nvidia.com/gpu: 1 # 声明使用1张GPU
EOF
# 部署测试Pod
$ kubectl apply -f cuda-sample.yaml
部署完测试Pod后,查看日志确认GPU调度是否正常。
$ kubectl logs -f cuda-vectoradd
# 输出包含以下内容则表示GPU调度正常:
[Vector addition of 50000 elements]
...
Test PASSED #CUDA程序运行通过
Done
当看到日志中出现“Test PASSED”,就说明GPU资源已成功接入RKE2集群,现在可以在K8S集群内实现GPU调度了。
四、部署Rainbond
(一)添加Rainbond Helm仓库
helm repo add rainbond https://chart.rainbond.com
helm repo update
这两条命令用于添加Rainbond的Helm仓库并更新,以便后续获取Rainbond的安装包。
(二)配置集群网络参数
创建values.yaml
文件,指定集群入口IP和节点信息。
cat > values.yaml << EOF
Cluster:
gatewayIngressIPs: 10.0.0.5 # 填写服务器公网 IP 或负载均衡 IP
nodesForGateway:
- externalIP: 10.0.0.5 # 节点公网 IP
internalIP: 10.0.0.5 # 节点内网 IP
name: iv-ydtpg1wqo0ay8n6f4k7n # 节点名称(通过 kubectl get node 查看)
nodesForChaos:
- name: iv-ydtpg1wqo0ay8n6f4k7n # 节点名称(通过 kubectl get node 查看)
containerdRuntimePath: /run/k3s/containerd # 指向 RKE2 的容器运行时路径
EOF
根据实际情况修改文件中的IP地址和节点名称等信息,这些配置会影响Rainbond的网络设置和节点连接。
(三)一键安装Rainbond
helm install rainbond rainbond/rainbond --create-namespace -n rbd-system -f values.yaml
执行该命令进行Rainbond的安装,安装完成后,通过kubectl get pod -n rbd-system
观察名称含rbd-app-ui
的Pod状态,当状态显示“Running”且“Ready”为“1/1”时,说明安装完成,这个过程大约需要5 – 8分钟。安装完成后,我们可以通过配置的gatewayIngressIPs
地址(格式为http://10.0.0.5:7070
)访问Rainbond界面。
五、部署Ollama
(一)通过Rainbond可视化界面安装Ollama
登录Rainbond后,点击创建应用,选择从应用市场创建,在开源应用商店搜索关键词“ollama”并点击安装。Rainbond会自动拉取Ollama镜像并部署,镜像大小约1.2GB。
(二)按需分配计算资源
安装完成后,进入Ollama组件详情页,点击其他设置调整资源配额。
- CPU/内存:建议根据模型规模设置,比如deepseek R1 14B版本至少需要12核 + 32GB内存,这里我们暂时不限制(设置为0表示使用节点默认资源)。
- GPU资源:在
limits
中添加nvidia.com/gpu: 1
,声明使用1张GPU。
limits:
cpu: 0
memory: 0
nvidia.com/gpu: 1
保存配置后,点击左上角的重启按钮,等待Ollama组件重新启动,约1分钟后组件状态恢复为绿色(Running)就可以使用了。大家可以参考以下资源配置表,根据不同模型版本选择合适的资源配置:
模型版本 | CPU核心 | 内存要求 | 硬盘空间 | GPU显存(推荐) |
---|---|---|---|---|
1.5B | 4+ | 8GB+ | 3GB+ | 非必需(CPU推理) |
7B/8B | 8+ | 16GB+ | 8GB+ | 8GB+(如RTX 3070) |
14B | 12+ | 32GB+ | 15GB+ | 16GB+(如RTX 4090) |
32B+ | 16+/32+ | 64GB+/128GB+ | 30GB+/70GB+ | 24GB+/多卡并行(如A100) |
六、部署DeepSeek R1
(一)通过Web终端启动模型服务
在Rainbond界面中进入Ollama组件详情页,点击右上角Web终端进入命令行模式(确保浏览器允许WebSocket连接)。执行Ollama官方提供的模型启动命令(以32B版本为例):
ollama run deepseek-r1:32b
如果终端没有响应,可以检查集群WebSocket地址是否可达。进入平台管理 -> 集群 -> 编辑集群信息,复制WebSocket地址,在本地浏览器或Postman中测试该地址的连通性。
(二)配置模型访问端口
在Ollama组件详情页找到端口设置项,将默认的HTTP协议修改为TCP,然后复制生成的访问地址(格式为http://你的服务器IP:随机端口
,如http://10.0.0.5:30000
)。如果使用域名访问,记得在网关管理中绑定域名。
七、接入到Chatbox使用
(一)下载并安装Chatbox
从Chatbox官方网站下载对应平台(支持Windows/macOS/Linux)的客户端,完成安装后启动应用。
(二)添加Ollama API地址
进入Chatbox设置界面(点击左上角菜单 -> 设置 -> 模型管理),点击添加自定义模型,选择Ollama类型,在地址栏粘贴Rainbond中获取的访问地址(如http://10.0.0.5:30000
),点击保存。系统会自动识别已部署的模型(如deepseek-r1:32b
),无需手动配置参数。
(三)开始对话
返回Chatbox主界面,选择刚刚添加的DeepSeek R1模型,即可进入聊天窗口。输入问题并点击发送,模型会实时返回响应,还支持流式输出和历史对话记录查看。
通过Ollama、RKE2、Rainbond与GPU Operator的协同配合,我们就能在1小时内完成Deepseek大模型的私有化部署。这只是大模型私有部署的开端,后续借助Rainbond的快速开发能力,通过微服务构建、可视化编排等功能,企业可以轻松实现业务系统与大模型的深度集成,在安全可控的本地化环境中灵活运用大模型能力,加速AI应用的落地。