K8S 1.30环境中私有化部署 Ollama 和 DeepSeek-R1(671B模型)
时间:2025-2-19 17:16 作者:Anglei 分类: 虚拟化
1. 前提准备
硬件要求
由于部署的模型是大规模的671B参数模型,需要高性能计算资源。建议的硬件配置为:
计算资源:
至少 32 vCPU,推荐 64 vCPU。
至少 128 GB 内存,推荐 256 GB 内存。
每个节点最好配备 1TB SSD 或以上存储。
网络要求:
内部网络带宽至少 10Gbps,确保模型的分布式推理时网络不会成为瓶颈。
Kubernetes集群
Kubernetes版本:1.30
建议集群有多个节点,确保可以进行资源调度和扩展。
启用 GPU资源(如果需要加速计算)。
2. 获取模型Docker镜像
确保你有合适的 Ollama 和 DeepSeek-R1 的Docker镜像。如果这些镜像是公开的,直接从Docker Hub或其他容器仓库获取;如果是私有镜像,你需要提供正确的凭证和地址。
ctr -n=k8s.io images pull ollama/ollama-model:latest
ctr -n=k8s.io images pull deepseek-r1/deepseek-r1-model:671b
3. 准备Kubernetes配置文件
你需要创建Kubernetes的Deployment和Service配置文件,并确保配置好Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 来存储模型数据。这里假设你已经通过Docker镜像准备好了相关镜像。
3.1 Persistent Volume (PVC) 配置
在Kubernetes中,PVC(Persistent Volume Claim)用于请求持久化存储。由于模型非常大,可能需要大容量的存储。
model-pvc.yaml:
apiVersion: v1
kind:PersistentVolumeClaim
metadata:
name:model-pvc
spec:
accessModes:
-ReadWriteOnce
resources:
requests:
storage:2Ti# 根据模型大小设置存储容量
3.2 Ollama部署文件
ollama-deployment.yaml:
apiVersion: apps/v1
kind:Deployment
metadata:
name:ollama-model
spec:
replicas:1
selector:
matchLabels:
app:ollama
template:
metadata:
labels:
app:ollama
spec:
containers:
-name:ollama
image:ollama/ollama-model:latest
resources:
requests:
memory:"64Gi"
cpu:"16"
limits:
memory:"128Gi"
cpu:"32"
ports:
-containerPort:8080
volumeMounts:
-name:model-storage
mountPath:/mnt/models
volumes:
-name:model-storage
persistentVolumeClaim:
claimName:model-pvc
3.3 DeepSeek-R1部署文件
deepseek-r1-deployment.yaml:
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"
limits:
memory:"256Gi"
cpu:"64"
ports:
-containerPort:8081
volumeMounts:
-name:model-storage
mountPath:/mnt/models
volumes:
-name:model-storage
persistentVolumeClaim:
claimName:model-pvc
3.4 服务配置
为了方便外部访问模型服务,配置Kubernetes Service来公开暴露服务。这里使用LoadBalancer类型的服务。
ollama-service.yaml:
apiVersion: v1
kind:Service
metadata:
name:ollama-service
spec:
selector:
app:ollama
ports:
-protocol:TCP
port:8080
targetPort:8080
type:LoadBalancer
deepseek-r1-service.yaml:
apiVersion: v1
kind:Service
metadata:
name:deepseek-r1-service
spec:
selector:
app:deepseek-r1
ports:
-protocol:TCP
port:8081
targetPort:8081
type:LoadBalancer
4. 部署到Kubernetes
通过以下命令将Kubernetes资源应用到集群中:
kubectl apply -f model-pvc.yaml
kubectl apply -f ollama-deployment.yaml
kubectl apply -f deepseek-r1-deployment.yaml
kubectl apply -f ollama-service.yaml
kubectl apply -f deepseek-r1-service.yaml
4.1 检查Pod状态
kubectl get pods
确保所有Pod都正常运行。如果Pod未启动,可以使用以下命令查看详细的错误信息。
kubectl describe pod <pod-name>
4.2 检查服务状态
kubectl get svc
通过该命令查看是否已成功创建服务,且它们暴露的端口(8080和8081)是否可以从外部访问。
5. 访问模型
5.1 获取外部IP
如果使用的是LoadBalancer类型的Service,你可以通过以下命令获取外部IP:
kubectl get svc
输出示例如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ollama-service LoadBalancer 10.100.200.1 <external-ip> 8080:30000/TCP 10m
deepseek-r1-service LoadBalancer 10.100.200.2 <external-ip> 8081:30001/TCP 10m
你可以在浏览器或者API客户端中使用这个外部IP访问模型接口,例如:
Ollama模型API:http://<external-ip>:30000
DeepSeek-R1模型API:http://<external-ip>:30001
5.2 调用模型接口
如果模型提供了RESTful API,你可以通过HTTP请求调用。例如,使用curl进行推理请求:
假设Ollama模型提供一个推理接口
curl -X POST http://<external-ip>:30000/inference -d '{"input": "your text input"}'
6. 监控和日志管理
6.1 查看Pod日志
kubectl logs <pod-name>
查看运行中的Pod的日志,确保模型的推理过程正常。
6.2 使用Prometheus和Grafana监控
部署 Prometheus 来监控Kubernetes集群的资源使用。
配置 Grafana 仪表盘来实时展示模型的推理性能、延迟和吞吐量。
6.3 设置告警
使用Prometheus的告警功能来监控模型的健康状态,例如内存使用超过阈值时通过alertmanager触发告警。
总结
上述步骤展示了如何在Kubernetes 1.30集群中部署Ollama和DeepSeek-R1这类大规模的深度学习模型。需要注意,部署时要合理配置资源请求和限制,确保集群能够承载这些模型的计算和存储需求。通过服务暴露,外部应用可以访问这些模型提供的API进行推理。

本文完结,相关标签: k8s Ollama deepseek
推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(0) |
![]() 鲜花(0) |
![]() 鸡蛋(2) |