mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
Both charts run schema migrations from a Job that is a pre-install and pre-upgrade hook, and neither set activeDeadlineSeconds. A migration that blocks on the database therefore never fails: backoffLimit is not reached because the pod never terminates, so the Job stays active indefinitely and the release waits on the hook forever. `helm upgrade` and any GitOps controller driving it stop reconciling the whole chart until someone deletes the Job by hand, which means unrelated changes to the gateway, the backend and the UI silently stop shipping. Give the field a 1800s default, guarded by `with` so setting it to null restores the old unbounded behaviour. A migration that has exhausted its retries is not going to succeed on the next one, so failing is strictly better than hanging: a failed sync is visible and retryable, a hung one is neither. Chart.yaml is deliberately untouched. Recent template-only changes to litellm-helm did not bump it either.
125 lines
4.6 KiB
YAML
125 lines
4.6 KiB
YAML
{{- if .Values.migrationJob.enabled }}
|
|
# This job runs the Prisma migrations for the LiteLLM DB.
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: {{ include "litellm.fullname" . }}-migrations
|
|
labels:
|
|
{{- include "litellm.labels" . | nindent 4 }}
|
|
annotations:
|
|
{{- if .Values.migrationJob.hooks.argocd.enabled }}
|
|
argocd.argoproj.io/hook: PreSync
|
|
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
|
|
{{- end }}
|
|
{{- if .Values.migrationJob.hooks.helm.enabled }}
|
|
helm.sh/hook: "pre-install,pre-upgrade"
|
|
helm.sh/hook-delete-policy: "before-hook-creation"
|
|
helm.sh/hook-weight: {{ .Values.migrationJob.hooks.helm.weight | default "1" | quote }}
|
|
{{- end }}
|
|
checksum/config: {{ toYaml .Values | sha256sum }}
|
|
spec:
|
|
template:
|
|
metadata:
|
|
labels:
|
|
{{- include "litellm.labels" . | nindent 8 }}
|
|
{{- with .Values.podLabels }}
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
annotations:
|
|
{{- with .Values.migrationJob.annotations }}
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
spec:
|
|
{{- with .Values.imagePullSecrets }}
|
|
imagePullSecrets:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
serviceAccountName: {{ include "litellm.migrationServiceAccountName" . }}
|
|
securityContext:
|
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
|
{{- with .Values.migrationJob.extraInitContainers }}
|
|
initContainers:
|
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
|
{{- end }}
|
|
containers:
|
|
- name: prisma-migrations
|
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
securityContext:
|
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
|
command: ["python", "litellm/proxy/prisma_migration.py"]
|
|
workingDir: "/app"
|
|
env:
|
|
{{- if .Values.db.useExisting }}
|
|
- name: DATABASE_USERNAME
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ .Values.db.secret.name }}
|
|
key: {{ .Values.db.secret.usernameKey }}
|
|
- name: DATABASE_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ .Values.db.secret.name }}
|
|
key: {{ .Values.db.secret.passwordKey }}
|
|
- name: DATABASE_HOST
|
|
{{- if .Values.db.secret.endpointKey }}
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ .Values.db.secret.name }}
|
|
key: {{ .Values.db.secret.endpointKey }}
|
|
{{- else }}
|
|
value: {{ .Values.db.endpoint }}
|
|
{{- end }}
|
|
- name: DATABASE_NAME
|
|
value: {{ .Values.db.database }}
|
|
- name: DATABASE_URL
|
|
value: {{ .Values.db.url | quote }}
|
|
{{- else if .Values.db.deployStandalone }}
|
|
- name: DATABASE_URL
|
|
value: postgresql://{{ .Values.postgresql.auth.username }}:{{ .Values.postgresql.auth.password }}@{{ .Release.Name }}-postgresql/{{ .Values.postgresql.auth.database }}
|
|
{{- end }}
|
|
{{- if .Values.envVars }}
|
|
{{- range $key, $val := .Values.envVars }}
|
|
- name: {{ $key }}
|
|
value: {{ $val | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- with .Values.extraEnvVars }}
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
- name: DISABLE_SCHEMA_UPDATE
|
|
value: "false" # always run the migration from the Helm PreSync hook, override the value set
|
|
{{- with .Values.volumeMounts }}
|
|
volumeMounts:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
{{- with .Values.migrationJob.resources }}
|
|
resources:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
{{- with .Values.migrationJob.extraContainers }}
|
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
|
{{- end }}
|
|
{{- with .Values.volumes }}
|
|
volumes:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
restartPolicy: OnFailure
|
|
{{- with .Values.nodeSelector }}
|
|
nodeSelector:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with .Values.affinity }}
|
|
affinity:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with .Values.tolerations }}
|
|
tolerations:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
ttlSecondsAfterFinished: {{ .Values.migrationJob.ttlSecondsAfterFinished }}
|
|
backoffLimit: {{ .Values.migrationJob.backoffLimit }}
|
|
{{- with .Values.migrationJob.activeDeadlineSeconds }}
|
|
activeDeadlineSeconds: {{ . }}
|
|
{{- end }}
|
|
{{- end }}
|