Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 TKE 上部署 AI 大模型

在 TKE 上部署 AI 大模型

原创
作者头像
imroc
修改于 2025-02-20 12:10:52
修改于 2025-02-20 12:10:52
3870
举报

概述

本文介绍如何在 TKE 上部署 AI 大模型,以 DeepSeek-R1 为例,使用 OllamavLLMSGLang 运行大模型并暴露 API,然后使用 OpenWebUI 提供交互界面。

Ollama 提供是 Ollama API,部署架构:

vLLMSGLang 都提供了兼容 OpenAI 的 API,部署架构:

Ollama、vLLM、SGLang 与 OpenWebUI 介绍

  • Ollama 是一个运行大模型的工具,可以看成是大模型领域的 Docker,可以下载所需的大模型并暴露 Ollama API,极大的简化了大模型的部署。
  • vLLM 与 Ollama 类似,也是一个运行大模型的工具,但它针对推理做了很多优化,提高了模型的运行效率和性能,使得在资源有限的情况下也能高效运行大语言模型,另外,它提供兼容 OpenAI 的 API。
  • SGLang 与 vLLM 类似,性能更强,且针对 DeepSeek 做了深度优化,也是 DeepSeek 官方推荐的工具。
  • OpenWebUI 是一个大模型的 Web UI 交互工具,支持通过 Ollama 与 OpenAI 两种 API 与大模型交互。

技术选型

Ollama、vLLM 还是 SGLang?

  • Ollama 的特点:个人用户或本地开发环境使用 Ollama 很方便,对各种 GPU 硬件和大模型的兼容性很好,不需要复杂的配置就能跑起来,但性能上不如 vLLM。
  • vLLM 的特点:推理性能更好,也更节约资源,适合部署到服务器供多人使用,还支持多机多卡分布式部署,上限更高,但能适配的 GPU 硬件比 Ollama 少,且需要根据不同 GPU 和大模型来调整 vllm 的启动参数才能跑起来或者获得更好的性能表现。
  • SGLang 的特点:是性能卓越的新兴之秀,针对特定模型优化(如 DeepSeek),吞吐量更高。
  • 选型建议:如果有一定的技术能力且愿意折腾,能用 vLLM 或 SGLang 成功跑起来更推荐用 vLLM 和 SGLang 将大模型部署到 Kubernetes 中,否则就用 Ollama ,两种方式在本文中都有相应的部署示例。

AI 大模型数据如何存储?

AI 大模型通常占用体积较大,直接打包到容器镜像不太现实,如果启动时通过 initContainers 自动下载又会导致启动时间过长,因此建议使用共享存储来挂载 AI 大模型(先下发一个 Job 将模型下载到共享存储,然后再将共享存储挂载到运行大模型的 Pod 中),这样后面 Pod 启动时就无需下载模型了(虽然最终加载模型时同样也会经过CFS的网络下载,但只要 CFS 使用规格比较高,如 Turbo 类型,速度就会很快)。

在腾讯云上可使用 CFS 来作为共享存储,CFS 的性能和可用性都非常不错,适合 AI 大模型的存储。本文将使用 CFS 来存储 AI 大模型。

GPU 机型如何选?

不同的机型使用的 GPU 型号不一样,机型与 GPU 型号的对照表参考 GPU 计算型实例 ,Ollama 相比 vLLM,支持的 GPU 型号更广泛,兼容性更好,建议根据事先调研自己所使用的工具和大模型,选择合适的 GPU 型号,再根据前面的对照表确定要使用的 GPU 机型,另外也注意下选择的机型在哪些地域在售,以及是否售罄,可通过 购买云服务器 页面进行查询(实例族选择GPU机型)。

镜像说明

本文中的示例使用的镜像都是官方提供的镜像,tag 为 latest,建议根据自身情况改成指定版本的 tag,可点击下面的连接查看镜像的 tag 列表:

官方镜像均在 DockerHub,且体积较大,在 TKE 环境 默认有免费的 DockerHub 镜像加速,国内地域也可以拉取 DockerHub 的镜像,但速度一般,镜像较大时等待的时间较长,建议将镜像同步至 容器镜像服务 TCR,再替换 YAML 中镜像地址,这样可极大加快镜像拉取速度。

操作步骤

步骤1: 准备集群

登录 容器服务控制台,创建一个集群,集群类型选择TKE 标准集群。详情请参见 创建集群

步骤2: 准备 CFS 存储

安装 CFS 插件
  1. 在集群列表中,单击集群 ID,进入集群详情页。
  2. 选择左侧菜单栏中的组件管理,在组件页面单击新建
  3. 在新建组件管理页面中勾选 CFS(腾讯云文件存储

支持选择 CFS(腾讯云文件存储)CFS Turbo(腾讯云高性能并行文件系统,本文以 CFS(腾讯云文件存储)为例。 CFS-Turbo 的性能更强,读写速度更快,但成本也更高。如果希望大模型运行和下载速度更快,可以考虑使用 CFS-Turbo。

  1. 单击完成即可创建组件。
新建 StorageClass

该步骤选择项较多,因此本文示例通过容器服务控制台来创建 PVC。若您希望通过 YAML 来创建,可以先用控制台创建一个测试 PVC,然后复制生成的 YAML 文件

  1. 在集群列表中,单击集群 ID,进入集群详情页。
  2. 选择左侧菜单栏中的存储,在 StorageClass 页面单击新建
  3. 在新建存储页面,根据实际需求,创建 CFS 类型的 StorageClass。如下图所示:
  4. 名称:请输入 StorageClass 名称,本文以 “cfs-ai” 为例。
  5. Provisioner:选择 “文件存储 CFS”。
  6. 存储类型:建议选择“性能存储”,其读写速度比“标准存储”更快。

如果是新建 CFS-Turbo StorageClass,则需要在文件存储控制台先新建好 CFS-Turbo 文件系统,然后创建 StorageClass 时引用对应的 CFS-Turbo 实例。

创建 PVC

创建一个 CFS 类型的 PVC,用于存储 AI 大模型:

代码语言:yaml
AI代码解释
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ai-model
  labels:
    app: ai-model
spec:
  storageClassName: cfs-ai
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  1. 注意替换 storageClassName
  2. 对于 CFS 来说,storage 大小无所谓,可随意指定,按实际占用空间付费的。

再创建一个 PVC 给 OpenWebUI 用,可使用同一个 storageClassName:

代码语言:yaml
AI代码解释
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: webui
  labels:
    app: webui
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: cfs-ai
  resources:
    requests:
      storage: 100Gi

步骤3: 新建 GPU 节点池

  1. 在集群管理页面,选择集群 ID,进入集群的基本信息页面。
  2. 选择左侧菜单栏中的节点管理,在节点池页面单击新建
  3. 选择节点类型。配置详情请参见 创建节点池
  4. 如果使用原生节点普通节点操作系统选新一点的;系统盘数据盘默认 50GB,建议调大点(如200GB),避免因 AI 相关镜像大导致节点磁盘空间压力大;机型配置GPU 机型中选择一个符合需求且没有售罄的机型,如有 GPU 驱动选项,也选最新的版本。
  5. 如果使用超级节点,是虚拟的节点,每个 Pod 都是独占的轻量虚拟机,所以无需选择机型,只需在部署的时候通过 Pod 注解来指定 GPU 卡的型号(后面示例中会有)。
  6. 单击创建节点池

GPU 插件无需显式安装,如果使用普通节点原生节点,配置了 GPU 机型,会自动安装 GPU 插件;如果使用超级节点,则无需安装 GPU 插件。

步骤4: 使用 Job 下载 AI 大模型

下发一个 Job,将需要用的 AI 大模型下载到 CFS 共享存储中,以下分别是 vLLM、SGLang 和 Ollama 的 Job 示例:

  1. 使用之前 Ollama 或 vLLM 的镜像执行一个脚本去下载我们需要的 AI 大模型,本例中下载的是 DeepSeek-R1 的模型,修改 LLM_MODEL 以替换大语言模型。
  2. 如果使用 Ollama,可以在 Ollama 模型库 查询和搜索需要的模型;如果使用 vLLM,可以在 Hugging Face 模型库ModelScope 模型库 查询和搜索需要的模型(国内环境可以用 ModelScope 的模型库,避免因网络问题下载失败,通过 USE_MODELSCOPE 环境环境变量控制是否从 ModelScope 下载)。
vLLM Job
代码语言:yaml
AI代码解释
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: vllm-download-model
  labels:
    app: vllm-download-model
spec:
  template:
    metadata:
      name: vllm-download-model
      labels:
        app: vllm-download-model
      annotations:
        eks.tke.cloud.tencent.com/root-cbs-size: '100' # 如果用超级节点,默认系统盘只有 20Gi,vllm 镜像解压后会撑爆磁盘,用这个注解自定义一下系统盘容量(超过20Gi的部分会收费)。
    spec:
      containers:
      - name: vllm
        image: vllm/vllm-openai:latest
        env:
        - name: LLM_MODEL
          value: deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
        - name: USE_MODELSCOPE
          value: "1"
        command:
        - bash
        - -c
        - |
          set -ex
          if [[ "$USE_MODELSCOPE" == "1" ]]; then
            exec modelscope download --local_dir=/data/$LLM_MODEL --model="$LLM_MODEL"
          else
            exec huggingface-cli download --local-dir=/data/$LLM_MODEL $LLM_MODEL
          fi
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      restartPolicy: OnFailure
SGLang Job
代码语言:yaml
AI代码解释
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: sglang-download-model
  labels:
    app: sglang-download-model
spec:
  template:
    metadata:
      name: sglang-download-model
      labels:
        app: sglang-download-model
    spec:
      containers:
      - name: sglang
        image: lmsysorg/sglang:latest
        env:
        - name: LLM_MODEL
          value: deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
        - name: USE_MODELSCOPE
          value: "1"
        command:
        - bash
        - -c
        - |
          set -ex
          if [[ "$USE_MODELSCOPE" == "1" ]]; then
            exec modelscope download --local_dir=/data/$LLM_MODEL --model="$LLM_MODEL"
          else
            exec huggingface-cli download --local-dir=/data/$LLM_MODEL $LLM_MODEL
          fi
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      restartPolicy: OnFailure
Ollama Job
代码语言:yaml
AI代码解释
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: ollama-download-model
  labels:
    app: ollama-download-model
spec:
  template:
    metadata:
      name: ollama-download-model
      labels:
        app: ollama-download-model
      annotations:
        eks.tke.cloud.tencent.com/root-cbs-size: '100' # 如果用超级节点,默认系统盘只有 20Gi,vllm 镜像解压后会撑爆磁盘,用这个注解自定义一下系统盘容量(超过20Gi的部分会收费)。
    spec:
      containers:
      - name: ollama
        image: ollama/ollama:latest
        env:
        - name: LLM_MODEL
          value: deepseek-r1:7b
        command:
        - bash
        - -c
        - |
          set -ex
          ollama serve &
          sleep 5 # sleep 5 seconds to wait for ollama to start
          exec ollama pull $LLM_MODEL
        volumeMounts:
        - name: data
          mountPath: /root/.ollama # ollama 的模型数据存储在 `/root/.ollama` 目录下,挂载 CFS 类型的 PVC 到该路径。
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      restartPolicy: OnFailure

步骤5: 部署 Ollama、vLLM 或 SGLang

  • 运行大模型需要使用 GPU,因此在 requests/limits 中指定了 nvidia.com/gpu 资源,以便让 Pod 调度到 GPU 机型并分配 GPU 卡使用。
  • 如果希望大模型跑在超级节点,需通过 Pod 注解 eks.tke.cloud.tencent.com/gpu-type 指定 GPU 类型,可选 V100T4A10*PNV4A10*GNV4,具体可参考 这里
  • 如调度到超级节点,也指定下 eks.tke.cloud.tencent.com/root-cbs-size: '100' 这个注解提升系统盘容量(默认只有 20GB,镜像解压后可能撑爆磁盘)。
vLLM

通过 Deployment 部署 vLLM:

代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vllm
  labels:
    app: vllm
spec:
  selector:
    matchLabels:
      app: vllm
  replicas: 1
  template:
    metadata:
      labels:
        app: vllm
    spec:
      containers:
      - name: vllm
        image: vllm/vllm-openai:latest
        imagePullPolicy: Always
        env:
        - name: PYTORCH_CUDA_ALLOC_CONF
          value: expandable_segments:True
        - name: LLM_MODEL
          value: deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
        command:
        - bash
        - -c
        - |
          vllm serve /data/$LLM_MODEL \
            --served-model-name $LLM_MODEL \
            --host 0.0.0.0 \
            --port 8000 \
            --trust-remote-code \
            --enable-chunked-prefill \
            --max_num_batched_tokens 1024 \
            --max_model_len 1024 \
            --enforce-eager \
            --tensor-parallel-size 1
        securityContext:
          runAsNonRoot: false
        ports:
        - containerPort: 8000
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /health
            port: 8000
          initialDelaySeconds: 5
          periodSeconds: 5
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            nvidia.com/gpu: "1"
          limits:
            nvidia.com/gpu: "1"
        volumeMounts:
        - name: data
          mountPath: /data
        - name: shm
          mountPath: /dev/shm
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      # vLLM needs to access the host's shared memory for tensor parallel inference.
      - name: shm
        emptyDir:
          medium: Memory
          sizeLimit: "2Gi"
      restartPolicy: Always


---

apiVersion: v1
kind: Service
metadata:
  name: vllm-api
spec:
  selector:
    app: vllm
  type: ClusterIP
  ports:
  - name: api
    protocol: TCP
    port: 8000
    targetPort: 8000
  1. --served-model-name 参数指定大模型名称,与前面下载 Job 中指定的名称要一致,注意替换。
  2. 模型数据引用前面下载 Job 使用的 PVC,挂载到 /data 目录下。
  3. vLLM 监听 8000 端口暴露 API,定义 Service 方便后续被 OpenWebUI 调用。
SGLang

通过 Deployment 部署 SGLang:

代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sglang
  labels:
    app: sglang
spec:
  selector:
    matchLabels:
      app: sglang
  replicas: 1
  template:
    metadata:
      labels:
        app: sglang
    spec:
      containers:
      - name: sglang
        image: lmsysorg/sglang:latest
        env:
        - name: LLM_MODEL
          value: deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
        command:
        - bash
        - -c
        - |
          set -x
          exec python3 -m sglang.launch_server \
            --host 0.0.0.0 \
            --port 30000 \
            --model-path /data/$LLM_MODEL
        resources:
          limits:
            nvidia.com/gpu: "1"
        ports:
        - containerPort: 30000
        volumeMounts:
        - name: data
          mountPath: /data
        - name: shm
          mountPath: /dev/shm
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      - name: shm
        emptyDir:
          medium: Memory
          sizeLimit: 40Gi
      restartPolicy: Always

---
apiVersion: v1
kind: Service
metadata:
  name: sglang
spec:
  selector:
    app: sglang
  type: ClusterIP
  ports:
  - name: api
    protocol: TCP
    port: 30000
    targetPort: 30000
  1. LLM_MODEL 环境变量指定大模型名称,与前面下载 Job 中指定的名称要一致,注意替换。
  2. 模型数据引用前面下载 Job 使用的 PVC,挂载到 /data 目录下。
  3. SGLang 监听 30000 端口暴露 API,并定义 Service 以便后续被 OpenWebUI 调用。
Ollama
代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama
  labels:
    app: ollama
spec:
  selector:
    matchLabels:
      app: ollama
  replicas: 1
  template:
    metadata:
      labels:
        app: ollama
    spec:
      containers:
      - name: ollama
        image: ollama/ollama:latest
        imagePullPolicy: IfNotPresent
        command: ["ollama", "serve"]
        env:
        - name: OLLAMA_HOST
          value: ":11434"
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            nvidia.com/gpu: "1"
          limits:
            cpu: 4000m
            memory: 4Gi
            nvidia.com/gpu: "1"
        ports:
        - containerPort: 11434
          name: ollama
        volumeMounts:
        - name: data
          mountPath: /root/.ollama
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: ai-model
      restartPolicy: Always

---

apiVersion: v1
kind: Service
metadata:
  name: ollama
spec:
  selector:
    app: ollama
  type: ClusterIP
  ports:
  - name: server
    protocol: TCP
    port: 11434
    targetPort: 11434
  1. Ollama 的模型数据存储/root/.ollama 目录下,挂载已经下载好 AI 大模型的 CFS 类型 PVC 到该路径。
  2. Ollama 监听 11434 端口暴露 API,定义 Service 方便后续被 OpenWebUI 调用。
  3. Ollama 默认监听的是回环地址(127.0.0.1),指定 OLLAMA_HOST 环境变量,强制对外暴露 11434 端口。

步骤6: 配置 GPU 弹性伸缩

如果需要对 GPU 资源进行弹性伸缩,可以按照下面的方法进行配置。

GPU 的 Pod 会有一些监控指标,参考 GPU 监控指标,可以根据这些监控指标配置 HPA 实现 GPU Pod 的弹性伸缩,比如按照 GPU 利用率:

代码语言:yaml
AI代码解释
复制
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: vllm
spec:
  minReplicas: 1
  maxReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: vllm
  metrics: # 更多 GPU 指标参考 https://cloud.tencent.com/document/product/457/38929#gpu
  - pods:
      metric:
        name: k8s_pod_rate_gpu_used_request # GPU利用率 (占 Request)
      target:
        averageValue: "80"
        type: AverageValue
    type: Pods
  behavior:
    scaleDown:
      policies:
      - periodSeconds: 15
        type: Percent
        value: 100
      selectPolicy: Max
      stabilizationWindowSeconds: 300
    scaleUp:
      policies:
      - periodSeconds: 15
        type: Percent
        value: 100
      - periodSeconds: 15
        type: Pods
        value: 4
      selectPolicy: Max
      stabilizationWindowSeconds: 0

需要注意的是,GPU 资源通常比较紧张,缩容后不一定还能再买回来,如不希望缩容,可以给 HPA 配置下禁止缩容:

代码语言:yaml
AI代码解释
复制
behavior:
  scaleDown:
    selectPolicy: Disabled

如果使用原生节点或普通节点,还需对节点池启动弹性伸缩,否则 GPU Pod 扩容后没相应的 GPU 节点会导致 Pod 一直处于 Pending 状态。

节点池启用弹性伸缩的方法是编辑节点池,然后勾选弹性伸缩,配置一下节点数量范围,最后点击确认

步骤7: 部署 OpenWebUI

使用 Deployment 部署 OpenWebUI,并定义 Service 方便后续对外暴露访问。后端 API 可以由 vLLM、SGLang 或 Ollama 提供,以下提供这三种情况的 OpenWebUI 部署示例:

vLLM 后端
代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - name: webui
        image: imroc/open-webui:main # docker hub 中的 mirror 镜像,长期自动同步,可放心使用
        env:
        - name: OPENAI_API_BASE_URL
          value: http://vllm-api:8000/v1 # vllm 的地址
        - name: ENABLE_OLLAMA_API # 禁用 Ollama API,只保留 OpenAI API
          value: "False"
        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

---
apiVersion: v1
kind: Service
metadata:
  name: webui
  labels:
    app: webui
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: webui
SGLang 后端
代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - name: webui
        image: imroc/open-webui:main # docker hub 中的 mirror 镜像,长期自动同步,可放心使用
        env:
        - name: OPENAI_API_BASE_URL
          value: http://sglang:30000/v1 # sglang 的地址
        - name: ENABLE_OLLAMA_API # 禁用 Ollama API,只保留 OpenAI API
          value: "False"
        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

---
apiVersion: v1
kind: Service
metadata:
  name: webui
  labels:
    app: webui
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: webui
Ollama 后端
代码语言:yaml
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      labels:
        app: webui
    spec:
      containers:
      - name: webui
        image: imroc/open-webui:main # docker hub 中的 mirror 镜像,长期自动同步,可放心使用
        env:
        - name: OLLAMA_BASE_URL
          value: http://ollama:11434 # ollama 的地址
        - name: ENABLE_OPENAI_API # 禁用 OpenAI API,只保留 Ollama API
          value: "False"
        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

---
apiVersion: v1
kind: Service
metadata:
  name: webui
  labels:
    app: webui
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: webui

OpenWebUI 的数据存储在 /app/backend/data 目录(如账号密码、聊天历史等数据),我们挂载 PVC 到这个路径。

步骤8: 暴露 OpenWebUI 并与模型对话

如果只是本地测试,可以使用 kubectl port-forward 暴露服务:

代码语言:bash
AI代码解释
复制
kubectl port-forward service/webui 8080:8080

在浏览器中访问 http://127.0.0.1:8080 即可。

你还可以通过 Ingress 或 Gateway API 来暴露,下面给出示例。

Gateway API

注意: 使用 Gateway API 需要集群中装有 Gateway API 的实现,如 TKE 应用市场中的 EnvoyGateway,具体 Gateway API 用法参考 官方文档

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: ai
spec:
  parentRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    namespace: envoy-gateway-system
    name: imroc
  hostnames:
  - "ai.imroc.cc"
  rules:
  - backendRefs:
    - group: ""
      kind: Service
      name: webui
      port: 8080
  1. parentRefs 引用定义好的 Gateway(通常一个 Gateway 对应一个 CLB)。
  2. hostnames 替换为你自己的域名,确保域名能正常解析到 Gateway 对应的 CLB 地址。
  3. backendRefs 指定 OpenWebUI 的 Service。
Ingress
代码语言:yaml
AI代码解释
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: webui
spec:
  rules:
  - host: "ai.imorc.cc"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: webui
            port:
              number: 8080
  1. host 替换为你自己的域名,确保域名能正常解析到 Ingress 对应的 CLB 地址。
  2. backend.service 指定 OpenWebUI 的 Service。

最后在浏览器访问相应的地址即可进入 OpenWebUI 页面。

首次进入 OpenWebUI 会提示创建管理员账号密码,创建完毕后即可登录,然后默认会使用前面下载好的大模型进行对话。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【独家首发】百元显卡逆袭记:Tesla M40 24G挑战 66G显存的 SRE-Qwen运维大模型,测完又要涨价了!
你好,我是术哥,云原生开源技术布道者:KubeSphere Ambassador、Milvus 北辰使者。很高兴在「运维有术」与你相遇。
运维有术
2025/03/13
7730
【独家首发】百元显卡逆袭记:Tesla M40 24G挑战 66G显存的 SRE-Qwen运维大模型,测完又要涨价了!
在 TKE 上部署 AI 大模型(以 DeepSeek-R1 为例)
陈鹏,腾讯云容器服务产品架构师,拥有丰富的云原生技术实践经验,同时也是 Kubernetes、Istio 等云原生项目 Contributor,《Kubernetes 实践指南》等电子书作者。
腾讯云原生
2025/02/18
5220
在 TKE 上部署 AI 大模型(以 DeepSeek-R1 为例)
DeepSeek-容器化(Docker)部署vLLM和Open WebUI
前面小节我们通过conda创建虚拟Python环境,实现vLLM和OpenWebUI的配置,但是这个安装部署会非常繁琐非费时间。我们今天将使用容器来部署。环境还是使用ubuntu20.4,复用上个环境已经安装GPU驱动和模型文件。
运维小路
2025/03/06
3.5K0
DeepSeek-容器化(Docker)部署vLLM和Open WebUI
在 Kubernetes 上部署 llama3
Ollama 是一个运行大模型的工具,可以看成是大模型领域的 Docker,可以下载所需的大模型并暴露 API。
imroc
2024/04/30
9610
在 Kubernetes 上部署 llama3
Ollama 升级!支持一键拉取Huggingface上所有的模型,太方便了!(vLLM、Fastgpt、Dify、多卡推理)
我记得,梦的开始,源于Ollama。很早以前的一篇文章教大家如何通过 Ollama 来使用开源 LLM,许多人最初接触 AI 时也是从Ollama开始的。Ollama 之所以出色,是因为它使用了 GGML 格式,这是一种‘轻量版’的大语言模型,以较低精度运行,能够轻松适配普通硬件。这使得在本地系统上运行这些模型变得简单高效,真正为 AI 的广泛应用铺平了道路。
AI进修生
2024/12/02
17.1K0
Ollama 升级!支持一键拉取Huggingface上所有的模型,太方便了!(vLLM、Fastgpt、Dify、多卡推理)
DeepSeek-基于vLLM部署
注:使用不同的推理模型,需要的模型文件是不一样的,比如我前面用的ollama下载的模型,则只能在ollma里面使用,不能拿到vLLM来使用。
运维小路
2025/03/03
1.5K0
DeepSeek-基于vLLM部署
DeepSeek-Open WebUI部署
前面部署了vLLM版本以后,访问它比较麻烦。如何才能更好的实现访问呢,这个就是我们今天要讲的Open WebUI,它可以向我们使用官方DeepSeek一样直接在网页进行对话。
运维小路
2025/03/04
6750
DeepSeek-Open WebUI部署
【TKE】超级节点部署 LLaMA 大语言模型服务
有训练好的 GGUF 模型文件(LLaAM)想要部署在腾讯云上做推理,可以选择使用 TKE serverless 超级节点快速部署。
Jokey
2023/11/07
3900
kubernetes-StatefulSet动态存储(二)
除了使用volumeClaimTemplates来动态分配存储外,您还可以手动创建PVC并将它们与StatefulSet的Pod关联。这可以通过在volumeClaimTemplates字段中省略PVC模板并手动创建PVC来实现。例如,以下是一个手动创建PVC并将其与StatefulSet的Pod关联的示例:
玖叁叁
2023/05/04
3790
Kubernetes 使用Rook-Ceph作为持久化存储PV
目前Ceph支持对象存储,CephFS(文件存储),和块存储。下面我将展示CephFS的方法。
繁华是客
2024/11/06
3510
DeepSeek r1本地部署手把手教程
https://developer.nvidia.com/rdp/cudnn-archive
蛋黄
2025/03/03
2530
TKE集群设置容器coredump持久化
业务跑在容器上,当业务进程发生异常退出时候,业务日志无法定位到具体原因,需要结合coredump文件进一步分析,下面我们来介绍下如何在tke上持久化容器的coredump文件。 现在业务在tke部署容器,通常有2种方式,一直是部署在普通cvm节点,一种是超级节点上,下面我们分别说明下在这2种节点的pod如何持久化coredump文件。
聂伟星
2023/11/24
7360
TKE(K8S)部署mysql使用CFS存储
2,权限组 来访地址: * 用户权限是:no_root_squash 读写权限:读写
chen1900s
2022/07/17
6090
详解几种常见本地大模型个人知识库工具部署、微调及对比选型(2)
这里首先介绍的是大模型侧的工具安装部署实践,至于为什么先提大模型侧后提知识库侧呢?这是因为大模型通常是知识库操作和应用的基础与核心,是提供智能决策的引擎。它们构建了理解和生成文本、图像、语音等多模态反应的基础能力,是整个智能应用的心脏,同时,由于这次主题是本地大模型个人知识库,所以大模型的安装、配置、优化和部署是首要步骤,也是确保知识库工具能够顺畅运行的基石。
zhouzhou的奇妙编程
2024/06/12
4.5K0
TKE使用nfs文件系统
本文主要实践TKE集群使用nfs文件系统,包括使用cfs-csi(新创建实例,共享新实例),静态nfs挂载,已有实例共享挂载
williamji
2024/07/31
2020
在 TKE 上使用 NVIDIA Dynamo 部署 PD 分离的大模型
刘瑾锋,腾讯云容器服务 TKE 后台开发工程师,主要负责容器服务(TKE)相关研发工作。
腾讯云原生
2025/04/21
1.4K0
在 TKE 上使用 NVIDIA Dynamo 部署 PD 分离的大模型
本地部署AI大模型DeepSeek
在刚刚过去的春节假期,AI界可一点都不平静,一款来自中国的AI应用 DeepSeek,如同横空出世的黑马,迅速在全球范围内掀起了波澜。先是在美区App Store免费榜中力压ChatGPT,成功登顶,成为无数用户追捧的对象;而后又引发了美国科技股的剧烈震荡,英伟达市值一夜之间蒸发数千亿美元,整个科技板块都因之而颤抖。这一系列令人咋舌的事件,让DeepSeek这个名字,瞬间成为了全球AI领域的焦点。
wangmcn
2025/02/10
3580
本地部署AI大模型DeepSeek
使用 Higress AI 网关代理 vLLM 推理服务
随着大语言模型技术的快速发展,越来越多的企业和组织开始考虑在本地私有化部署模型,以满足数据安全、合规性和低延迟等需求。在众多的大模型推理引擎中,vLLM 凭借其卓越的性能和高效的资源利用率,已成为目前最热门的 LLM 推理引擎之一。
Se7en258
2025/06/12
1900
使用 Higress AI 网关代理 vLLM 推理服务
K3S从放弃到入门(三) 搞点有用的
搞了两天集群了,得搞点有实际用途的东西出来,所以决定搭建一个WordPress的博客。
2022/03/31
1.1K0
Longhorn,企业级云原生容器分布式存储 - K8S 资源配置示例
请注意,只有 ext4 文件系统支持在卷意外分离后(detached unexpectedly)自动重新挂载。
为少
2021/08/26
7360
Longhorn,企业级云原生容器分布式存储 - K8S 资源配置示例
推荐阅读
相关推荐
【独家首发】百元显卡逆袭记:Tesla M40 24G挑战 66G显存的 SRE-Qwen运维大模型,测完又要涨价了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档