You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Ollama作为K8s StatefulSet部署:自定义入口脚本拉取模型遇问题

Ollama K8s StatefulSet 部署问题解决(含Nvidia Container Toolkit配置)

一、修复初始run.sh脚本语法错误

原脚本存在两个核心问题:变量未正确转为数组、续行符使用不当导致语法报错。修正后的run.sh如下:

#!/bin/bash
set -x
# 后台启动ollama服务
ollama serve &
# 轮询等待服务就绪,替代固定sleep提升可靠性
for i in $(seq 10); do
  if ollama ps >/dev/null 2>&1; then
    break
  fi
  sleep 1
done
# 将MODELS环境变量按逗号分割为数组
IFS=',' read -r -a models <<< "$MODELS"
# 遍历拉取模型
for model in "${models[@]}"; do
  echo "Pulling model: $model"
  ollama pull "$model"
done
# 保持容器前台运行,避免进程退出导致Pod终止
wait

对应基础Dockerfile配置:

FROM ollama/ollama:latest

COPY run.sh /usr/local/bin/run.sh
RUN chmod +x /usr/local/bin/run.sh

ENTRYPOINT ["/usr/local/bin/run.sh"]

二、解决生命周期钩子报错问题

你后续修改的Dockerfile存在命令参数错误:CMD ["ollama", "serve"]会导致容器执行/bin/ollama ollama serve,而ollama并无ollama子命令,因此报错。正确配置应为:

ENTRYPOINT ["/bin/ollama"]
CMD ["serve"]

若坚持使用生命周期钩子,需修正脚本逻辑并确保命令可执行:

lifecycle:
  postStart:
    exec:
      command:
        - bash
        - -c
        - |
          for i in $(seq 10); do
            if ollama ps >/dev/null 2>&1; then
              break
            fi
            sleep 1
          done
          IFS=',' read -r -a models <<< "$MODELS"
          for model in "${models[@]}"; do
            ollama pull "$model"
          done

注:钩子执行失败会直接导致Pod进入CrashLoopBackOff,建议优先采用启动脚本的方式处理模型拉取。

三、自定义Dockerfile整合Nvidia Container Toolkit

基于官方Ollama CUDA镜像构建,已预装Nvidia依赖,无需手动安装工具包。完整Dockerfile:

# 基于官方CUDA镜像,支持GPU加速
FROM ollama/ollama:latest-cuda

# 复制启动脚本
COPY run.sh /usr/local/bin/run.sh
RUN chmod +x /usr/local/bin/run.sh

# 默认模型配置,可通过K8s清单环境变量覆盖
ENV MODELS="llama3.2"

ENTRYPOINT ["/usr/local/bin/run.sh"]

四、K8s StatefulSet配置要点

  1. 环境变量与GPU资源配置:
containers:
- name: ollama
  image: your-custom-ollama-image:tag
  env:
  - name: MODELS
    value: "llama3.2,phi3" # 多模型用逗号分隔
  resources:
    limits:
      nvidia.com/gpu: 1 # 按需配置GPU数量
  volumeMounts:
  - name: ollama-data
    mountPath: /root/.ollama # 持久化模型存储目录
  1. 持久化存储声明:
volumeClaimTemplates:
- metadata:
    name: ollama-data
  spec:
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 50Gi # 按需配置存储容量

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:13:12