基于 Kubernetes 的 Ollama DeepSeek-R1 模型部署
一、理论背景
1. Ollama
Ollama是由Ollama公司开发的AI模型工具,专注于将大规模语言模型(如GPT-3、BERT、T5等)本地化部署。它的主要特点如下:
- 私有化部署:允许在本地机器上运行AI模型,避免将敏感数据上传到外部服务器。
- 支持多种语言模型:如GPT、T5等。
- 高效性:本地部署提高了对数据安全的控制。
- 易于集成:提供简单的API接口,便于与现有应用集成。
2. DeepSeek
DeepSeek是一个智能搜索和深度学习驱动的工具,旨在提升大规模数据集的处理能力,尤其是在NLP和文本数据搜索方面。它的主要特点包括:
- 深度学习驱动的搜索:通过深度学习技术优化传统的搜索引擎。
- 语义搜索:提供更精准的搜索结果。
- 大规模数据处理:适用于新闻、电商、科研等行业。
- 自学习能力:能够根据用户行为进行自我优化。
二、硬件与环境要求
1. 硬件要求
由于部署的模型是大规模的671B参数模型,建议的硬件配置如下:
- 计算资源:至少32 vCPU,推荐64 vCPU。
- 内存:至少128GB内存,推荐256GB内存。
- 存储:每个节点最好配备1TB SSD或以上存储。
- 网络要求:内部网络带宽至少10Gbps。

2. Kubernetes集群要求
- Kubernetes版本:1.20-1.30
- 集群配置:多节点部署,支持资源调度与扩展。
- GPU支持:如果需要加速计算,建议启用GPU资源。
三、部署前准备步骤
1. 获取模型Docker镜像
确保已经获取到Ollama和DeepSeek-R1的Docker镜像。使用以下命令拉取镜像:
ctr -n=k8s.io images pull ollama/ollama-model:latest
ctr -n=k8s.io images pull deepseek-r1/deepseek-r1-model:671b
如过容器运行时是docker:
docker pull ollama/ollama-model:latest
docker pull deepseek-r1/deepseek-r1-model:671b
2. 安装Nvidia 显卡 和 切换容器运行时为nvidia
Nvidia显卡,执行nvidia-smi 没有输出则说明没有装显卡驱动
国产显卡执行npu-smi info
怎么检查服务器是不是带有显卡?
lspci | grep -i nvidia
将下载的 gpu 驱动文件上传到服务器安装即可
直接安装即可,视情况加参数
chmod a+x NVIDIA-Linux-x86_64-535.154.05.run
./NVIDIA-Linux-x86_64-535.154.05.run
3.K8S中如何使用GPU资源
nvidia-docker 并不会与已经安装好的 Docker 冲突。nvidia-docker 是一个额外的工具,用于在 Docker 中更方便地使用 gpu,它与 Docker 共存并为其提供额外的功能。在安装过程中,nvidia-docker 会检测系统是否安装了 Docker,并会自动地与 Docker 进行集成,以提供对 gpu 容器的支持。因此,安装 nvidia-docker 后,可以继续使用已经安装好的 Docker 工具,并能够在 Docker 中更方便地使用 gpu。 nvidia-docker 属于旧一代的工具,适用于 docker19.3 以下版本,目前,官方推荐使用 nvidia-container-toolkit
4. 安装K8S nvidia 插件
查看某GPU节点资源情况
这说明 k8s 节点没有识别到 gpu 资源,即使当前节点有 gpu 资源

k8s 中要识别 gpu 资源,需要安装 nvidia-device-plugin 插件,注册分配 gpu 主要由 device-plugin 插件完成
官网:https://github.com/NVIDIA/k8s-device-plugin
wget https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
vim nvidia-device-plugin.yml #该文件存在 hostpath 的卷,注意确认 kubelet 的安装路径正确.
kubectl apply -f nvidia-device-plugin.yml
kubectl get pod -n kube-system | grep nvidia-device-plugin #查看 k8s 的 gpu 节点资源情况就可以显示 gpu 资源了

四、准备Kubernetes配置文件
1. Ollama部署配置
vim ollama-deployment.yaml
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
2.Deepseek-R1部署配置
vim deepseek-r1-deployment.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deepseek-pvc
spec:
accessModes:
- ReadWriteMany # NFS 支持多个节点同时读写
resources:
requests:
storage: 2T
storageClassName: nfs-storage # 使用定义的 StorageClass
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deepseek-r1-model
spec:
replicas: 1
selector:
matchLabels:
app: deepseek-r1
template:
metadata:
labels:
app: deepseek-r1
spec:
containers:
- name: deepseek-r1
image: deepseek-r1/deepseek-r1-model:671b
resources:
requests:
memory: "128Gi"
cpu: "32"
nvidia.com/gpu: 1 # 请求 1 个 NVIDIA GPU
limits:
memory: "256Gi"
cpu: "64"
nvidia.com/gpu: 1 # 限制最多使用 1 个 NVIDIA GPU
ports:
- containerPort: 8081
volumeMounts:
- name: deepseek-storage
mountPath: /mnt/models
volumes:
- name: deepseek-storage
persistentVolumeClaim:
claimName: deepseek-pvc
---
apiVersion: v1
kind: Service
metadata:
name: deepseek-r1-service
spec:
selector:
app: deepseek-r1
ports:
- protocol: TCP
port: 8081 # 服务端口
targetPort: 8081 # 容器端口
nodePort: 30001 # 分配一个静态端口,确保在所有节点上都能访问
type: NodePort
3.部署到Kubernetes
通过以下命令将Kubernetes资源应用到集群中:
kubectl apply -f ollama-deployment.yaml
kubectl apply -f deepseek-r1-deployment.yaml
4.检查POD 状态
kubectl get pods -n namespace
确保所有Pod都正常运行。如果Pod未启动,可以使用 kubectl describe pod <pod-name> 来查看详细的错误信息。

5.检查服务状态
kubectl get svc #--通过NodePort端口访问。
你可以在浏览器或者API客户端中使用这个外部IP访问模型接口,例如:
- Ollama模型API:
http://<external-ip>:30000
- DeepSeek-R1模型API:
http://<external-ip>:30001
6.调用接口模型
如果模型提供了RESTful API,你可以通过HTTP请求调用。例如,使用curl进行推理请求:
# 假设Ollama模型提供一个推理接口
curl -X POST http://<external-ip>:30000/inference -d '{"input": "your text input"}'
714

被折叠的 条评论
为什么被折叠?



