Repository navigation
v0.6.0
Added
- OpenShift / non-root support — new
spec.security.runAsNonRootfield onLiteLLMInstanceautomatically switches to the officiallitellm-non_rootimage (ghcr.io/berriai/litellm-non_root), setsRunAsNonRoot: true, and runs asnobody(UID 65534). Compatible with OpenShift restricted SCC and Kubernetes Pod Security Standards. - ServiceAccount reconciliation — the
LiteLLMInstancecontroller now creates a ServiceAccount for the LiteLLM pods, preventingCreateContainerConfigErrorwhen the referenced ServiceAccount did not exist. - Helm chart — new Helm chart in
deploy/charts/litellm-operator/as an alternative to OLM-based installation. Includes ClusterRole, ClusterRoleBinding, ServiceAccount, Deployment, leader election RBAC, and all CRD manifests.
Fixed
- Secondary controllers failed with
masterKey.autoGenerate—resolveInstancenow correctly derives the auto-generated master key Secret name ({instance}-master-key) whenspec.masterKey.secretRefis nil andautoGenerate: trueis set. Previously all secondary controllers (Model, Team, User, VirtualKey) failed with"secret ref is nil". - Model update returned 400 "model not found" — the
/model/updateLiteLLM API endpoint requiresmodel_info.idin the request body. AddedIDfield toModelInfoReqand set it in the model update path. - Duplicate resource creation on first sync — all four secondary controllers (Model, Team, User, VirtualKey) could create duplicate resources in LiteLLM because the status subresource (containing the LiteLLM resource ID) was not persisted before the annotation update triggered a re-queue. Fixed by calling
Status().Update()beforeUpdate()in the create path, and setting the sync hash annotation on create (not just on update). - Default resource limits too low — bumped default container resources from 100m/256Mi requests and 1 CPU/512Mi limits to 250m/512Mi requests and 2 CPU/2Gi limits. LiteLLM's Python runtime and Prisma imports require more memory than the previous defaults.
- Container security context too restrictive — removed hardcoded
RunAsNonRoot: true,ReadOnlyRootFilesystem: true, andRunAsUser: 1001from the default container security context. LiteLLM's default image runs as root and writes to the filesystem at startup. Non-root execution is now opt-in viaspec.security.runAsNonRoot. - Migration Job uses correct image and security context — the database migration Job now respects
spec.security.runAsNonRoot, using the non-root image and correct UID (65534) when enabled. - Migration Job command updated — changed from Python
asyncio.run(main())toprisma db pushwhich is the supported migration approach.
Changed
- Pod security context is now conditional: applied only when
spec.security.runAsNonRoot: true, instead of being hardcoded for all deployments. - Image repository selection is automatic:
ghcr.io/berriai/litellmfor default mode,ghcr.io/berriai/litellm-non_rootwhen non-root is enabled. Users can still override viaspec.image.repository.
Full Changelog: v0.5.0...v0.6.0