Fix: pin the LiteLLM chart and image to reproducible versions
IMPLEMENTATION RULES: Before implementing this plan, read and follow:
- WORKFLOW.md - The implementation process
- PLANS.md - Plan structure and best practices
Status: Backlog
Goal: Two installs of the same UIS revision must deploy the same LiteLLM.
Investigation: INVESTIGATE-service-litellm-install-reliability.md
Priority: High
Last Updated: 2026-08-06
Problem
manifests/220-litellm-config.yaml pins nothing:
image:
repository: ghcr.io/berriai/litellm-database
tag: "main-latest" # rolling main-branch build
pullPolicy: Always
and 210-setup-litellm.yml installs the chart with no --version.
Consequences:
main-latestis pre-release code from the main branch. It currently resolves to LiteLLM 1.97.0 while the newest stable release is v1.95.0.- With
pullPolicy: Always, any pod restart can silently change the version — including a restart triggered by an unrelated node event. - A developer on Rancher Desktop and a production cluster installed a week apart are running different code. This breaks the parity promise directly.
- Reproducing a bug report becomes guesswork, because "which version" has no answer.
The tag also carries a stale debugging comment: # Back to latest - should have the fix.
Solution
Pin both the chart and the image to explicit stable versions, in one place, with a documented procedure for moving them.
Phase 1: Pin
Tasks
- 1.1 Determine the newest stable LiteLLM release and the matching
litellm-helmchart version (stable = no-rc/-devsuffix) - 1.2 Replace
tag: "main-latest"with the stable image tag inmanifests/220-litellm-config.yaml; remove the stale comment - 1.3 Change
pullPolicy: AlwaystoIfNotPresent— with a fixed tag,Alwaysonly adds a registry round trip and a failure mode when the registry is unreachable (relevant to offline restart, see the registry cache investigation) - 1.4 Add
--version <chart-version>to thehelm upgrade --installcommand in210-setup-litellm.yml - 1.5 Record both versions in a comment at the top of the values file, with the date they were chosen
Validation
kubectl get deploy litellm -n ai \
-o jsonpath='{.spec.template.spec.containers[0].image}'
# -> ghcr.io/berriai/litellm-database:<pinned tag>, not main-latest
helm list -n ai # chart version matches the pin
User confirms the pinned version deploys and serves models.
Phase 2: Make upgrading deliberate
Tasks
- 2.1 Document the upgrade procedure: how to find the current stable release, how to bump both pins together, how to roll back
- 2.2 Note the constraint that image and chart versions must be moved together, since chart values keys can change between majors
Validation
User confirms the procedure is followable without reading the chart source.
Acceptance Criteria
- No rolling tags (
main-latest,latest) anywhere in the LiteLLM manifests - The Helm install specifies an explicit chart version
- A pod restart cannot change the running version
- The upgrade path is documented
-
pullPolicyis appropriate for a fixed tag
Implementation Notes
Worth checking whether other services carry the same problem before closing
this out — the fix is per-service, but the policy ("no rolling tags in
manifests") should be uniform. There is an existing
INVESTIGATE-system-version-pinning.md in the backlog; this plan should be
reconciled with it rather than duplicating it.
Files to Modify
manifests/220-litellm-config.yamlansible/playbooks/210-setup-litellm.yml