如何使用Ollama+GPU Operator快速完成K8S上Deepseek的部署

人工智能 潘老师 6天前 13 ℃ (0) 扫码查看

现在大模型为我们的工作带来了极大便利,像DeepSeek、豆包、Qwen等,敲几个字就能实现文案生成、代码编写、表格制作等功能,极大地提升了效率。不过,对于企业而言,公司内部数据敏感度高,使用外部大模型存在数据泄露风险。我在为Rainbond开源社区用户解答疑问时发现,大家对大模型私有化部署的需求十分强烈,都希望将大模型部署到企业内网,既能根据自身需求定制优化,又能保障数据安全与合规。

网上虽然有不少相关教程,但大多零散,且操作方式偏向极客风格,真正能应用到生产环境中的少之又少。经过一番摸索,我找到了一套全链路解决方案,借助Ollama、RKE2、Rainbond和GPU Operator,1小时内就能完成Deepseek大模型的部署。下面,我就详细给大家介绍一下具体步骤。

一、前期准备

首先,我们需要准备一台合适的GPU服务器,以NVIDIA A100为例,推荐的硬件配置如下:

二、部署RKE2

这里我们以单节点集群为例进行快速部署演示。

(一)创建RKE2配置

  1. 私有镜像仓库配置: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应用的落地。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ai/17498.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】