喜讯!TCMS 官网正式上线!一站式提供企业级定制研发、App 小程序开发、AI 与区块链等全栈软件服务,助力多行业数智转型,欢迎致电:13888011868 QQ 932256355 洽谈合作!
本文提供一套完整的企业级 Ollama 服务 Kubernetes 部署方案,从命名空间隔离、持久化存储配置、Deployment 部署到 Service 暴露,详解每一步核心参数与生产级优化技巧。包含部署前环境检查、全流程操作步骤、服务验证方法及 GPU 加速、多副本扩展等实战建议,帮助开发者和运维人员快速在 K8s 集群落地稳定、可扩展的 Ollama 服务。

 
在开始部署前,需确保你的环境满足以下基础条件,避免后续配置踩坑:
K8s集群就绪:已搭建至少1节点的K8s集群(推荐1.24+版本,支持Containerd runtime),可通过kubectl get nodes验证集群状态(节点需处于Ready状态)。
存储支持:集群需具备持久化存储能力(如默认存储类、NFS、Local Path等),用于保存Ollama模型文件(模型不持久化会导致Pod重启后需重新下载)。
资源预留:根据目标模型调整节点资源——运行7B模型需至少4核CPU+8GB内存,13B模型需8核CPU+16GB内存;若用GPU加速,需提前安装NVIDIA设备插件(nvidia-device-plugin)。
工具就绪:本地安装kubectl并配置集群访问权限,可通过kubectl cluster-info验证连接有效性。
Ollama的K8s部署需包含“命名空间隔离、持久化存储、Deployment部署、Service暴露”4个核心组件。以下是完整配置文件及关键参数解读,所有配置已添加生产级注释,可直接修改后使用。
首先创建独立命名空间ollama-system,将Ollama相关资源与其他服务隔离,便于后续管理和权限控制:
# 命名空间配置:隔离Ollama资源
apiVersionv1
kindNamespace
metadata
  nameollama-system  # 命名空间名称,后续所有资源均在此命名空间下
  labels
    appollama  # 统一标签,便于筛选资源Ollama默认将模型存储在/root/.ollama目录,若不做持久化,Pod重启后模型会被清空。通过PersistentVolumeClaim(PVC)申请存储,确保模型文件长期保留:
# 持久化存储配置:保存Ollama模型
apiVersionv1
kindPersistentVolumeClaim
metadata
  nameollama-models-pvc  # PVC名称,后续Deployment将挂载此PVC
  namespaceollama-system
spec
  accessModes
ReadWriteOnce  # 单节点读写模式(多副本需改为ReadWriteMany,依赖存储类支持)
  resources
    requests
      storage50Gi  # 存储容量:7B模型约4GB、13B约13GB、多模型需累加(建议预留20%冗余)
  # 若集群无默认存储类,需指定存储类(如local-path、nfs-client)
  # storageClassName: "your-storage-class-name"关键说明:若计划部署多副本Ollama(高可用场景),需使用支持ReadWriteMany的存储(如NFS、GlusterFS),否则多Pod会因存储权限冲突导致模型加载失败。
Deployment负责管理Ollama容器的生命周期,包括资源限制、健康检查、环境变量配置等,是整个部署的核心:
# Ollama服务部署配置:管理容器运行
apiVersionapps/v1
kindDeployment
metadata
  nameollama-deployment  # Deployment名称
  namespaceollama-system
  labels
    appollama
spec
  replicas1  # 副本数:默认1(多副本需先解决存储共享问题,谨慎开启)
  selector
    matchLabels
      appollama  # 匹配Pod标签,用于管理Pod
  template
    metadata
      labels
        appollama  # Pod标签,需与selector.matchLabels一致
    spec
      containers
nameollama  # 容器名称
        # 镜像选择:默认用latest(生产环境建议指定版本,如ollama/ollama:0.1.48)
        # 若用GPU加速,替换为ollama/ollama:nvidia(需提前安装NVIDIA设备插件)
        imageollama/ollamalatest
        ports
containerPort11434  # Ollama默认API端口,需与Service映射
        env
nameOLLAMA_HOST  # 允许外部访问(默认仅localhost,必须设为0.0.0.0)
          value"0.0.0.0"
nameOLLAMA_MAX_LOADED_MODELS  # 最大加载模型数(默认3,根据内存调整)
          value"2"
        # 资源限制:根据模型大小调整,避免资源不足或浪费
        resources
          requests# 最小资源需求(K8s调度时参考)
            cpu"2"    # 7B模型建议2核,13B建议4核
            memory"8Gi"  # 7B模型建议8GB,13B建议16GB
          limits# 最大资源限制(超出会被K8s限制)
            cpu"4"    # 避免CPU占用过高影响其他服务
            memory"16Gi" # 防止OOM(内存溢出)
        # GPU资源配置(可选,需用nvidia镜像)
        # resources:
        #   limits:
        #     nvidia.com/gpu: 1  # 申请1张GPU(根据实际需求调整)
        # 挂载持久化存储:将PVC挂载到Ollama模型目录
        volumeMounts
namemodels-storage  # 卷名称,需与下方volumes.name一致
          mountPath/root/.ollama  # Ollama模型默认存储路径,不可修改
        # 健康检查:确保服务正常运行,避免无效Pod对外提供服务
        livenessProbe# 存活检查:失败会重启Pod
          tcpSocket
            port11434
          initialDelaySeconds30  # 启动后延迟30秒检查(首次加载模型较慢)
          periodSeconds10  # 每10秒检查一次
        readinessProbe# 就绪检查:失败会从Service移除Pod
          tcpSocket
            port11434
          initialDelaySeconds10  # 启动后10秒开始检查
          periodSeconds5  # 每5秒检查一次
      # 定义卷:关联PVC与容器挂载点
      volumes
namemodels-storage
        persistentVolumeClaim
          claimNameollama-models-pvc  # 关联前面创建的PVC名称核心参数解读:
OLLAMA_HOST: 0.0.0.0:必须配置,否则Ollama仅监听容器内部localhost,外部无法访问;
资源限制:若运行13B及以上模型,需将cpu调整为4核+、memory调整为16GB+,否则模型加载会超时;
GPU配置:需同时满足“使用nvidia镜像+配置GPU资源限制+集群安装NVIDIA设备插件”三个条件,缺一不可。
Deployment创建的PodIP是临时的,需通过Service固定访问地址,实现“Pod动态变化但访问地址不变”:
# 服务暴露配置:固定Ollama访问地址
apiVersionv1
kindService
metadata
  nameollama-service  # Service名称,集群内访问用此名称
  namespaceollama-system
spec
  selector
    appollama  # 匹配Ollama的Pod标签,将流量转发到对应Pod
  ports
port11434  # Service暴露的端口(集群内访问用此端口)
    targetPort11434  # 对应Pod的端口(需与Deployment的containerPort一致)
  typeClusterIP  # 访问类型:默认集群内访问(外部访问需修改为NodePort/LoadBalancer)访问类型说明:
ClusterIP:仅K8s集群内可访问,地址为ollama-service.ollama-system:11434(适合集群内其他服务调用);
NodePort:通过节点IP+固定端口访问(如node-ip:30080),需添加nodePort: 30080(端口范围30000-32767);
LoadBalancer:云厂商环境使用(如AWS ELB、阿里云SLB),自动分配公网IP,无需手动配置端口。
将上述4个组件的配置整合为一个YAML文件(如ollama-k8s-deploy.yaml),执行部署命令:
# 部署Ollama相关资源
kubectl apply -f ollama-k8s-deploy.yaml执行后,通过以下命令查看资源状态,确保所有组件正常:
# 查看命名空间是否创建成功
kubectl get ns | grep ollama-system
# 查看PVC是否绑定成功(STATUS需为Bound)
kubectl get pvc -n ollama-system
# 查看Deployment状态(READY需为1/1)
kubectl get deployment -n ollama-system
# 查看Pod状态(STATUS需为Running,RESTARTS为0)
kubectl get pods -n ollama-system若Pod状态为Pending,可能是“存储未绑定”或“资源不足”,可通过kubectl describe pod <pod-name> -n ollama-system查看具体原因。
Pod运行正常后,需进入容器拉取所需模型(如Llama3-8B、Qwen-7B):
# 进入Ollama容器(替换<pod-name>为实际Pod名称)
kubectl exec -it -n ollama-system <pod-name> -- /bin/sh
# 在容器内拉取模型(以Llama3-8B为例)
ollama pull llama3:8b拉取过程依赖网络速度(7B模型约4GB),可通过kubectl logs -f <pod-name> -n ollama-system查看拉取进度。
在K8s集群内其他Pod(如测试用的busybox)中,通过Service地址测试API:
# 进入测试Pod
kubectl run -it busybox --image=busybox:1.35 -- /bin/sh
# 测试模型列表接口(返回已拉取的模型)
wget -qO- http://ollama-service.ollama-system:11434/api/tags通过kubectl port-forward将Service端口转发到本地,实现本地访问:
# 将集群内ollama-service的11434端口转发到本地11434端口
kubectl port-forward -n ollama-system service/ollama-service 11434:11434转发成功后,本地浏览器访问http://localhost:11434,或通过curl测试对话接口:
# 调用Ollama对话API(提问“什么是Kubernetes?”)
curl http://localhost:11434/api/chat -d '{
  "model": "llama3:8b",
  "messages": [{"role": "user", "content": "什么是Kubernetes?"}]
}'若返回JSON格式的对话结果,说明Ollama服务已正常工作。
多副本场景:使用NFS或云存储(如AWS EFS、阿里云NAS),确保accessModes: ReadWriteMany;
性能优化:模型加载依赖磁盘IO,生产环境建议使用SSD(机械硬盘加载13B模型可能超时)。
根据模型动态调整:13B模型建议cpu: 4-8核、memory: 16-32GB,34B模型需cpu: 8核+、memory: 64GB+;
GPU加速:若有NVIDIA GPU,优先使用ollama/ollama:nvidia镜像,模型加载速度可提升3-5倍,对话响应延迟降低50%以上。
监控配置:Ollama暴露/metrics端点,可通过Prometheus+Grafana监控“模型加载状态、API请求量、响应延迟”;
日志收集:将容器日志输出到ELK或 Loki,便于排查模型加载失败、API报错等问题;
自动重启:添加PodDisruptionBudget(PDB),避免运维操作导致服务中断。
权限控制:为命名空间添加RBAC权限,仅允许指定用户操作Ollama资源;
网络隔离:使用NetworkPolicy限制访问来源,仅允许信任的服务访问11434端口;
镜像安全:使用私有镜像仓库存储Ollama镜像,避免官方镜像被篡改。
本文提供的Ollama服务K8s部署方案,覆盖了“持久化存储、资源管控、服务暴露、测试验证”全流程,既适合测试环境快速上手,也可通过“存储优化、GPU加速、监控配置”适配生产需求。核心优势在于:
模型持久化:通过PVC避免Pod重启后模型丢失,减少重复下载;
资源可控:通过requests/limits限制资源占用,避免影响其他服务;
灵活扩展:支持单副本调试、多副本高可用、GPU加速等多种场景。
实际部署时,可根据“模型大小、集群环境、访问需求”调整配置(如存储容量、资源限制、Service类型),即可快速落地轻量级AI服务。
以下是完整的Ollama服务K8s部署配置(包含模型持久化、资源优化和健康检查):
# ollama-deployment.yaml
apiVersionapps/v1
kindDeployment
metadata
  nameollama
  namespaceai-services  # 建议独立命名空间管理AI服务
  labels
    appollama
spec
  replicas1  # 模型服务通常单副本,如需扩展需考虑模型同步
  selector
    matchLabels
      appollama
  strategy
    typeRecreate  # 重建策略,避免多副本模型文件冲突
  template
    metadata
      labels
        appollama
    spec
      containers
nameollama
        imageollama/ollamalatest
        imagePullPolicyAlways
        ports
containerPort11434
          nameapi
          protocolTCP
        # 模型存储目录挂载(关键:避免重启后重新拉取模型)
        volumeMounts
namemodel-storage
          mountPath/root/.ollama
          subPathollama  # 共享存储时隔离目录
namecache-volume
          mountPath/root/.cache/ollama
        # 启动命令:先拉取模型再启动服务(支持多模型)
        command"/bin/sh" "-c"
        args
          set -e
          # 预拉取需要的模型(根据业务需求调整)
          ollama pull llama3:8b-instruct
          ollama pull qwen:7b-chat  # 可选:添加阿里通义千问模型
          # 启动服务并绑定到0.0.0.0(允许容器外部访问)
          ollama serve --host 0.0.0.0
        # 资源限制(根据模型大小调整,8B模型建议最低配置)
        resources
          requests
            cpu"4"         # 至少4核CPU(推理加速)
            memory"12Gi"   # 8B模型建议12GB+内存
          limits
            cpu"8"
            memory"16Gi"
        # 健康检查
        livenessProbe
          httpGet
            path/
            port11434
          initialDelaySeconds120  # 模型加载需要时间,延迟检查
          periodSeconds20
          timeoutSeconds5
        readinessProbe
          httpGet
            path/
            port11434
          initialDelaySeconds60
          periodSeconds10
        # 安全上下文:允许写入模型目录
        securityContext
          runAsUser1000
          runAsGroup1000
          fsGroup1000
      # 节点亲和性:优先调度到GPU节点(如有)
      affinity
        nodeAffinity
          preferredDuringSchedulingIgnoredDuringExecution
weight100
            preference
              matchExpressions
keynvidia.com/gpu.present
                operatorIn
                values
"true"
      # 污点容忍:允许调度到有GPU污点的节点
      tolerations
key"nvidia.com/gpu"
        operator"Exists"
        effect"NoSchedule"
  # 模型存储持久卷声明(生产环境必配)
  volumes
namemodel-storage
    persistentVolumeClaim
      claimNameollama-models-pvc  # 需提前创建对应的PVC
namecache-volume
    emptyDir# 临时缓存目录,加速模型加载
      mediumMemory
      sizeLimit2Gi
---
# Ollama服务访问入口
apiVersionv1
kindService
metadata
  nameollama-service
  namespaceai-services
  labels
    appollama
spec
  selector
    appollama
  ports
port11434
    targetPortapi
    protocolTCP
    namehttp
  typeClusterIP  # 集群内部访问,如需外部访问可改为NodePort/LoadBalancer
---
# 模型存储持久卷声明(PVC)
apiVersionv1
kindPersistentVolumeClaim
metadata
  nameollama-models-pvc
  namespaceai-services
spec
  accessModes
ReadWriteOnce  # 单节点读写(多副本需ReadWriteMany,如NFS)
  resources
    requests
      storage50Gi  # 8B模型约占10GB,预留扩展空间
  storageClassName"standard"  # 根据集群存储类调整(如aws-ebs、nfs-client等)模型持久化:通过PVC挂载/root/.ollama目录,避免容器重启后重复拉取模型(8B模型约10GB,节省带宽和时间)。
资源配置:根据模型参数调整(8B模型建议12GB+内存,13B模型需24GB+),CPU核数影响推理速度。
多模型支持:在args中通过ollama pull命令预加载多个模型(如llama3、qwen等)。
GPU支持:通过节点亲和性和污点容忍,优先调度到GPU节点(需集群已配置NVIDIA设备插件),GPU可显著加速推理。
健康检查:延长初始检查延迟,适配模型加载的耗时特性。
先创建PVC所需的PersistentVolume(或依赖集群默认存储类)
部署配置:kubectl apply -f ollama-deployment.yaml
验证:kubectl logs -f deployment/ollama -n ai-services 查看模型拉取和服务启动日志