西河刘卡车医 发表于 2025-2-12 18:42:00

华为云kubernetes摆设deepseek r1、ollama和open-webui(已踩过坑)

1 概述

ollama是一个管理大模型的一个中心层,通过它你可以下载并管理deepseek R1、llama3等大模型。
open-webui是一个web界面(界面计划受到chatgpt启发),可以集成ollama API、 OpenAI的 API。
用常见的web应用架构来类比,open-webui是前端,ollama是后端,大模型是数据库。
https://i-blog.csdnimg.cn/direct/9f068f67ddd549f3bb5146ad6466fb6f.png
文本介绍华为云kubernetes摆设open-webui最新版、ollama最新版、DeepSeek-R1-Distill-Qwen-1.5B(因为小模型可以只使用CPU,节省本文测试的成本)。


2 云资源情况准备

2.1 购买文件存储SFS Turbo

https://i-blog.csdnimg.cn/direct/f9d2dfbe95c64d8c85caeeabc052a6db.png


2.2 购买kubernetes集群

https://i-blog.csdnimg.cn/direct/a9752175a9bf42d7be71ed9ebd8947a5.png


2.3 在k8s中创建storageclass对象

参数everest.io/share-access-to是VPC的ID。
参数everest.io/share-export-location是sfs turbo实例的共享路径:自界说子目次,sfs turbo实例的共享路径是在sfs实例的详细页查询,自界说子目次可以是任意路径。
参数everest.io/volume-id是sfs turbo实例的ID。
只需要修改以上三个参数。
在本文,storageclass的名称叫做sfsturbo-subpath-sc。
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
name: sfsturbo-subpath-sc
mountOptions:
- lock
parameters:
csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io
csi.storage.k8s.io/fstype: nfs
everest.io/archive-on-delete: "true"
everest.io/share-access-to: xxxxxxxxxxxxxxxxxx   # VPC ID
everest.io/share-expand-type: bandwidth
everest.io/share-export-location: xxxxx.sfsturbo.internal:/mydir   # sfs turbo实例的共享路径:自定义子目录
everest.io/share-source: sfs-turbo
everest.io/share-volume-type: STANDARD
everest.io/volume-as: subpath
everest.io/volume-id: xxxxxxxxxxxxx   # sfs turbo实例的ID
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate
https://i-blog.csdnimg.cn/direct/0294cb4cbca440a9af107b9ccb7a64b0.png

2.4 购买用于暴露容器的负载均衡器ELB

https://i-blog.csdnimg.cn/direct/e92c47aecc8d4349916c68e2f3bb41c7.png

3 摆设

3.1 创建namespace

ollama和open webui都摆设在此namespace。
kubectl create ns ollama

3.1 摆设ollama

statefulset使用刚刚创建的存储类sfsturbo-subpath-sc。
确保PVC的磁盘容量能存储下全部待下载的大模型。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: ollama
namespace: ollama
spec:
serviceName: "ollama"
replicas: 1
selector:
    matchLabels:
      app: ollama
template:
    metadata:
      labels:
      app: ollama
    spec:
      containers:
      - name: ollama
          image: swr.cn-south-1.myhuaweicloud.com/migrator/ollama:0.5.7
          ports:
            - containerPort: 11434
          resources:
            requests:
            cpu: "1000m"
            memory: "2Gi"
            # nvidia.com/gpu: "4"# 如果要用英伟达GPU,请声明下GPU卡的数量
            limits:
            cpu: "4000m"
            memory: "4Gi"
          volumeMounts:
            - name: ollama-volume
            mountPath: /root/.ollama
          tty: true
volumeClaimTemplates:
    - metadata:
      name: ollama-volume
      spec:
      storageClassName: sfsturbo-subpath-sc
      accessModes: ["ReadWriteOnce"]
      resources:
          requests:
            storage: 200Gi# 确保磁盘容量能存储下所有待下载的大模型
---
apiVersion: v1
kind: Service
metadata:
name: ollama
namespace: ollama
labels:
    app: ollama
spec:
type: ClusterIP
ports:
    - port: 11434
      protocol: TCP
      targetPort: 11434
selector:
    app: ollama
https://i-blog.csdnimg.cn/direct/34c70844d1934d5595e0c0a65d27682a.png

3.1 摆设open webui(重点)



[*]deployment挂载一个固定的PVC,PVC使用刚刚创建的存储类sfsturbo-subpath-sc。
[*]OLLAMA_BASE_URL情况变量是ollama的地址。
[*]无法毗连huggingface.co:
由于在国内情况是无法毗连huggingface.co,最终导致open webui的界面是一片空缺(应用日志报错:MaxRetryError("HTTPSConnectionPool(host=‘huggingface.co’, port=443)),因此需要增长情况变量HF_ENDPOINT=https://hf-mirror.com。
[*]无法毗连openai:
由于不使用openai,因此将情况变量OPENAI_API_BASE_URL和OPENAI_API_KEY都设置成None,否则open webui在国内情况是无法毗连openai,最终导致open webui的界面是一片空缺(应用日志报错:Connection error: Cannot connect to host api.openai.com:443)。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: webui-pvc
namespace: ollama
labels:
    app: webui
spec:
storageClassName: sfsturbo-subpath-sc
accessModes: ["ReadWriteOnce"]
resources:
    requests:
      storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: webui
namespace: ollama
spec:
replicas: 1
selector:
    matchLabels:
      app: webui
template:
    metadata:
      labels:
      app: webui
    spec:
      containers:
      - name: webui
          image: swr.cn-south-1.myhuaweicloud.com/migrator/open-webui:main
          env:
            - name: OLLAMA_BASE_URL             # 这是ollama的地址
            value: http://ollama:11434            
            - name: HF_ENDPOINT               # 国内环境无法连接huggingface.co
            value: https://hf-mirror.com
            - name: OPENAI_API_KEY
            value: None
            - name: OPENAI_API_BASE_URL
            value: None
          tty: true
          ports:
            - containerPort: 8080
          resources:
            requests:
            cpu: "500m"
            memory: "500Mi"
            limits:
            cpu: "1000m"
            memory: "1Gi"
          volumeMounts:
            - name: webui-volume
            mountPath: /app/backend/data
      volumes:
      - name: webui-volume
          persistentVolumeClaim:
            claimName: webui-pvc
---
apiVersion: v1
kind: Service
metadata:
name: webui
namespace: ollama
labels:
    app: webui
spec:
type: ClusterIP
ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
selector:
    app: webui
https://i-blog.csdnimg.cn/direct/76d8420886b44525b1fc88a0ba4b1706.png
接着为open webui容器添加ingress路由以在公网暴露:
https://i-blog.csdnimg.cn/direct/82d3225de8414643aa716b9b9240322b.png


4 下载模型

进入ollama容器:
kubectl exec -it ollama-0 -n ollama bash
在容器内执行ollama pull下令下载大模型DeepSeek-R1-Distill-Qwen-1.5B。
nohup ollama pull deepseek-r1:1.5b &
tail -f nohup.out
有哪些deepseek模型可以下载,请去https://ollama.com/library/deepseek-r1地址里搜刮。

5 与大模型对话

在浏览器地址输入负载均衡器ELB的公网IP,打开网页后需要先设置open webui的管理员账号密码,登录乐成后即可选择刚刚下载的deepseek模型来谈天。
https://i-blog.csdnimg.cn/direct/e4fa97ed469d4afda4f0b3c2f71a47a8.png


6 小结

文本介绍使用华为云kubernetes摆设open-webui最新版、ollama最新版、DeepSeek-R1-Distill-Qwen-1.5B。在现实过程中,花费时间最多的是open-webui,因为它默认去访问在国内无法访问的两个外国地址:huggingface.co和api.openai.com,而访问这些地址最终又导致界面变成空缺。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 华为云kubernetes摆设deepseek r1、ollama和open-webui(已踩过坑)