# services/ai-llm/gpu-seed-job.yaml apiVersion: batch/v1 kind: Job metadata: name: ollama-gpu-seed-v2 namespace: ai spec: backoffLimit: 2 activeDeadlineSeconds: 7200 template: metadata: labels: app: ollama-gpu-seed spec: automountServiceAccountToken: false restartPolicy: Never nodeSelector: kubernetes.io/hostname: titan-24 containers: - name: seed image: ollama/ollama@sha256:2c9595c555fd70a28363489ac03bd5bf9e7c5bdf2890373c3a830ffd7252ce6d env: - {name: OLLAMA_HOST, value: "127.0.0.1:11434"} - {name: OLLAMA_MODELS, value: /models} - {name: OLLAMA_NO_CLOUD, value: "1"} command: [/bin/bash, -ec] args: - | ollama serve >/tmp/ollama.log 2>&1 & server_pid=$! trap 'kill "$server_pid"; wait "$server_pid" || true' EXIT for attempt in $(seq 1 60); do ollama list >/dev/null 2>&1 && break sleep 1 done ollama pull qwen2.5:14b-instruct-q4_0 >/tmp/pull.log 2>&1 || { tail -c 1000 /tmp/pull.log; exit 1; } cd /models/manifests/registry.ollama.ai/library sha256sum -c <<'PINS' 5449194ff8035ccb13a6409a5814de6c8f9c39f555f429e383ae0fb7137001bd qwen2.5/14b-instruct-q4_0 PINS # Runtime mounts this cache read-only, after registry digest checks. chmod -R a+rX /models touch /models/.pilot-v1-ready resources: requests: {cpu: 500m, memory: 512Mi} limits: {cpu: "2", memory: 2Gi} volumeMounts: - {name: models, mountPath: /models} volumes: - name: models persistentVolumeClaim: claimName: ollama-gpu-titan24