新增 AI 部署方案,备用
This commit is contained in:
parent
322b0781ac
commit
483ddad461
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
**/config/*
|
**/config/*
|
||||||
values.user.yaml
|
values.user.yaml
|
||||||
|
charts
|
23
llama-cpp/.helmignore
Normal file
23
llama-cpp/.helmignore
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
24
llama-cpp/Chart.yaml
Normal file
24
llama-cpp/Chart.yaml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: llama-cpp
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.0.2
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
appVersion: "1.16.0"
|
22
llama-cpp/README.md
Normal file
22
llama-cpp/README.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# TuringPi Llama.cpp Chart
|
||||||
|
|
||||||
|
Deploys [Llama.cpp server](https://github.com/ggerganov/llama.cpp/tree/master/examples/server) onto your TuringPi
|
||||||
|
cluster, complete with a persistent volume to store the model files, replication and an ingress. Assumes you have
|
||||||
|
followed the instructions at [docs.turingpi.com](https://docs.turingpi.com/docs/how-to-plan-kubernetes-installation) to
|
||||||
|
configure Longhorn, MetaLB and Traefik. By default, uses `lmstudio-ai/gemma-2b-it-GGUF` model, but this can be
|
||||||
|
overridden with custom values.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm install llama-cpp https://elepedus.github.io/llama-cpp/llama-cpp-0.0.1.tgz --namespace=llama-cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
By default, the ingress exposes the web UI at `llama.cluster.local`, at the same IP address as you configured
|
||||||
|
for `cluster.local` Make sure to update your `/etc/hosts` file so the new subdomain is accessible:
|
||||||
|
|
||||||
|
```
|
||||||
|
10.0.0.70 turing-cluster turing-cluster.local llama.cluster llama.cluster.local
|
||||||
|
```
|
22
llama-cpp/templates/NOTES.txt
Normal file
22
llama-cpp/templates/NOTES.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
1. Get the application URL by running these commands:
|
||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
{{- range $host := .Values.ingress.hosts }}
|
||||||
|
{{- range .paths }}
|
||||||
|
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if contains "NodePort" .Values.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "llama-cpp.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "llama-cpp.fullname" . }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "llama-cpp.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "llama-cpp.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||||
|
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
|
||||||
|
{{- end }}
|
62
llama-cpp/templates/_helpers.tpl
Normal file
62
llama-cpp/templates/_helpers.tpl
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "llama-cpp.chart" . }}
|
||||||
|
{{ include "llama-cpp.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "llama-cpp.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "llama-cpp.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "llama-cpp.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
80
llama-cpp/templates/deployment.yaml
Normal file
80
llama-cpp/templates/deployment.yaml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "llama-cpp.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "llama-cpp.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "llama-cpp.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "llama-cpp.labels" . | nindent 8 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
image: {{ printf "%s:%s" .Values.image.repository (.Values.image.tag | default .Chart.AppVersion) }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
command: [ "/server"]
|
||||||
|
args:
|
||||||
|
- "--port"
|
||||||
|
- {{ .Values.service.port | quote }}
|
||||||
|
- "--host"
|
||||||
|
- "0.0.0.0"
|
||||||
|
{{- range $key, $value := .Values.llama.args }}
|
||||||
|
{{- if $value }}
|
||||||
|
- "--{{ $key }}"
|
||||||
|
- "{{ $value }}"
|
||||||
|
{{- else }}
|
||||||
|
- "--{{ $key }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.service.port }}
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
||||||
|
readinessProbe:
|
||||||
|
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
||||||
|
{{- with .Values.volumeMounts }}
|
||||||
|
volumeMounts:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.volumes }}
|
||||||
|
volumes:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
61
llama-cpp/templates/ingress.yaml
Normal file
61
llama-cpp/templates/ingress.yaml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $fullName := include "llama-cpp.fullname" . -}}
|
||||||
|
{{- $svcPort := .Values.service.port -}}
|
||||||
|
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
|
||||||
|
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
|
||||||
|
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else -}}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
labels:
|
||||||
|
{{- include "llama-cpp.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
|
||||||
|
ingressClassName: {{ .Values.ingress.className }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ .path }}
|
||||||
|
{{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
|
||||||
|
pathType: {{ .pathType }}
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
number: {{ $svcPort }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
servicePort: {{ $svcPort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
11
llama-cpp/templates/pvc.yaml
Normal file
11
llama-cpp/templates/pvc.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: models
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.storage.size }}
|
||||||
|
storageClassName: {{ .Values.storage.storageClass }}
|
13
llama-cpp/templates/service.yaml
Normal file
13
llama-cpp/templates/service.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: { { include "llama-cpp.fullname" . } }
|
||||||
|
labels: { { - include "llama-cpp.labels" . | nindent 4 } }
|
||||||
|
spec:
|
||||||
|
type: { { .Values.service.type } }
|
||||||
|
ports:
|
||||||
|
- port: { { .Values.service.port } }
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector: { { - include "llama-cpp.selectorLabels" . | nindent 4 } }
|
15
llama-cpp/templates/tests/test-connection.yaml
Normal file
15
llama-cpp/templates/tests/test-connection.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: "{{ include "llama-cpp.fullname" . }}-test-connection"
|
||||||
|
labels:
|
||||||
|
{{- include "llama-cpp.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: wget
|
||||||
|
image: busybox
|
||||||
|
command: ['wget']
|
||||||
|
args: ['{{ include "llama-cpp.fullname" . }}:{{ .Values.service.port }}']
|
||||||
|
restartPolicy: Never
|
213
llama-cpp/values.schema.json
Normal file
213
llama-cpp/values.schema.json
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"affinity": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"fullnameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"pullPolicy": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imagePullSecrets": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"ingress": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"type": "null"
|
||||||
|
},
|
||||||
|
"className": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"hosts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pathType": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"livenessProbe": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"httpGet": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"initialDelaySeconds": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"llama": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"args": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"hf-file": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hf-repo": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"n-predict": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"parallel": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nodeSelector": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"podAnnotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"podLabels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"podSecurityContext": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"readinessProbe": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"httpGet": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replicaCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"securityContext": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"port": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"size": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"storageClass": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tolerations": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"volumeMounts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"mountPath": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volumes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"persistentVolumeClaim": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"claimName": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
101
llama-cpp/values.yaml
Normal file
101
llama-cpp/values.yaml
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
# yaml-language-server: $schema=./values.schema.json
|
||||||
|
|
||||||
|
# Default values for llama-cpp.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
# repository: "local/llama.cpp"
|
||||||
|
repository: "ghcr.io/ggerganov/llama.cpp"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# Overrides the image tag whose default is the chart appVersion.
|
||||||
|
tag: "server-60cdf40cc32f0ad4cb11e0ca8fd38f3b93d8d640"
|
||||||
|
|
||||||
|
llama:
|
||||||
|
args:
|
||||||
|
model: "/models/gemma-2b-it-q4_k_m.gguf"
|
||||||
|
hf-repo: "lmstudio-ai/gemma-2b-it-GGUF"
|
||||||
|
hf-file: "gemma-2b-it-q4_k_m.gguf"
|
||||||
|
n-predict: "-1"
|
||||||
|
parallel: "2"
|
||||||
|
|
||||||
|
storage:
|
||||||
|
size: 24Gi
|
||||||
|
storageClass: "local-path"
|
||||||
|
imagePullSecrets: []
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
podAnnotations: {}
|
||||||
|
podLabels: {}
|
||||||
|
|
||||||
|
podSecurityContext: {}
|
||||||
|
# fsGroup: 2000
|
||||||
|
|
||||||
|
securityContext: {}
|
||||||
|
# capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# runAsUser: 1000
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
hosts:
|
||||||
|
- host: llama.cluster.local
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
tls: []
|
||||||
|
# - secretName: chart-example-tls
|
||||||
|
# hosts:
|
||||||
|
# - chart-example.local
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 900
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: http
|
||||||
|
|
||||||
|
# Additional volumes on the output Deployment definition.
|
||||||
|
volumes:
|
||||||
|
- name: "models"
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: "models"
|
||||||
|
|
||||||
|
# Additional volumeMounts on the output Deployment definition.
|
||||||
|
volumeMounts:
|
||||||
|
- name: "models"
|
||||||
|
mountPath: "/models"
|
||||||
|
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
affinity: {}
|
25
open-webui/.helmignore
Normal file
25
open-webui/.helmignore
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
.drone.yml
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
|
values-minikube.yaml
|
15
open-webui/Chart.lock
Normal file
15
open-webui/Chart.lock
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
dependencies:
|
||||||
|
- name: ollama
|
||||||
|
repository: https://otwld.github.io/ollama-helm/
|
||||||
|
version: 1.4.0
|
||||||
|
- name: pipelines
|
||||||
|
repository: https://helm.openwebui.com
|
||||||
|
version: 0.0.6
|
||||||
|
- name: tika
|
||||||
|
repository: https://apache.jfrog.io/artifactory/tika
|
||||||
|
version: 2.9.0
|
||||||
|
- name: redis
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: 20.6.3
|
||||||
|
digest: sha256:b5e309a6aa07e946ccb1f49f84dc359a0af837b8d830efb88498d6f8da2aea8f
|
||||||
|
generated: "2025-01-29T07:24:10.947566155+08:00"
|
44
open-webui/Chart.yaml
Normal file
44
open-webui/Chart.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
annotations:
|
||||||
|
licenses: MIT
|
||||||
|
apiVersion: v2
|
||||||
|
appVersion: 0.5.4
|
||||||
|
dependencies:
|
||||||
|
- condition: ollama.enabled
|
||||||
|
import-values:
|
||||||
|
- child: service
|
||||||
|
parent: ollama.service
|
||||||
|
name: ollama
|
||||||
|
repository: https://otwld.github.io/ollama-helm/
|
||||||
|
version: '>=0.24.0'
|
||||||
|
- condition: pipelines.enabled
|
||||||
|
import-values:
|
||||||
|
- child: service
|
||||||
|
parent: pipelines.service
|
||||||
|
name: pipelines
|
||||||
|
repository: https://helm.openwebui.com
|
||||||
|
version: '>=0.0.1'
|
||||||
|
- condition: tika.enabled
|
||||||
|
name: tika
|
||||||
|
repository: https://apache.jfrog.io/artifactory/tika
|
||||||
|
version: '>=2.9.0'
|
||||||
|
- alias: redis-cluster
|
||||||
|
condition: redis-cluster.enabled
|
||||||
|
name: redis
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: '>=20.6.2'
|
||||||
|
description: "Open WebUI: A User-Friendly Web Interface for Chat Interactions \U0001F44B"
|
||||||
|
home: https://www.openwebui.com/
|
||||||
|
icon: https://raw.githubusercontent.com/open-webui/open-webui/main/static/favicon.png
|
||||||
|
keywords:
|
||||||
|
- llm
|
||||||
|
- chat
|
||||||
|
- web-ui
|
||||||
|
- open-webui
|
||||||
|
name: open-webui
|
||||||
|
sources:
|
||||||
|
- https://github.com/open-webui/helm-charts
|
||||||
|
- https://github.com/open-webui/open-webui/pkgs/container/open-webui
|
||||||
|
- https://github.com/otwld/ollama-helm/
|
||||||
|
- https://hub.docker.com/r/ollama/ollama
|
||||||
|
- https://charts.bitnami.com/bitnami
|
||||||
|
version: 5.4.0
|
126
open-webui/README.md
Normal file
126
open-webui/README.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
# open-webui
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
Open WebUI: A User-Friendly Web Interface for Chat Interactions 👋
|
||||||
|
|
||||||
|
**Homepage:** <https://www.openwebui.com/>
|
||||||
|
|
||||||
|
## Source Code
|
||||||
|
|
||||||
|
* <https://github.com/open-webui/helm-charts>
|
||||||
|
* <https://github.com/open-webui/open-webui/pkgs/container/open-webui>
|
||||||
|
* <https://github.com/otwld/ollama-helm/>
|
||||||
|
* <https://hub.docker.com/r/ollama/ollama>
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
Before you can install, you need to add the `open-webui` repo to [Helm](https://helm.sh)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm repo add open-webui https://helm.openwebui.com/
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can install the chart:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm upgrade --install open-webui open-webui/open-webui
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
| Repository | Name | Version |
|
||||||
|
|------------|------|---------|
|
||||||
|
| https://apache.jfrog.io/artifactory/tika | tika | >=2.9.0 |
|
||||||
|
| https://charts.bitnami.com/bitnami | redis-cluster(redis) | >=20.6.2 |
|
||||||
|
| https://helm.openwebui.com | pipelines | >=0.0.1 |
|
||||||
|
| https://otwld.github.io/ollama-helm/ | ollama | >=0.24.0 |
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Key | Type | Default | Description |
|
||||||
|
|-----|------|---------|-------------|
|
||||||
|
| affinity | object | `{}` | Affinity for pod assignment |
|
||||||
|
| annotations | object | `{}` | |
|
||||||
|
| clusterDomain | string | `"cluster.local"` | Value of cluster domain |
|
||||||
|
| containerSecurityContext | object | `{}` | Configure container security context ref: <https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-containe> |
|
||||||
|
| copyAppData.resources | object | `{}` | |
|
||||||
|
| extraEnvVars | list | `[{"name":"OPENAI_API_KEY","value":"0p3n-w3bu!"}]` | Env vars added to the Open WebUI deployment. Most up-to-date environment variables can be found here: https://docs.openwebui.com/getting-started/env-configuration/ |
|
||||||
|
| extraEnvVars[0] | object | `{"name":"OPENAI_API_KEY","value":"0p3n-w3bu!"}` | Default API key value for Pipelines. Should be updated in a production deployment, or be changed to the required API key if not using Pipelines |
|
||||||
|
| extraResources | list | `[]` | Extra resources to deploy with Open WebUI |
|
||||||
|
| image | object | `{"pullPolicy":"IfNotPresent","repository":"ghcr.io/open-webui/open-webui","tag":""}` | Open WebUI image tags can be found here: https://github.com/open-webui/open-webui |
|
||||||
|
| imagePullSecrets | list | `[]` | Configure imagePullSecrets to use private registry ref: <https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry> |
|
||||||
|
| ingress.additionalHosts | list | `[]` | |
|
||||||
|
| ingress.annotations | object | `{}` | Use appropriate annotations for your Ingress controller, e.g., for NGINX: nginx.ingress.kubernetes.io/rewrite-target: / |
|
||||||
|
| ingress.class | string | `""` | |
|
||||||
|
| ingress.enabled | bool | `false` | |
|
||||||
|
| ingress.existingSecret | string | `""` | |
|
||||||
|
| ingress.host | string | `""` | |
|
||||||
|
| ingress.tls | bool | `false` | |
|
||||||
|
| livenessProbe | object | `{}` | Probe for liveness of the Open WebUI container ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes> |
|
||||||
|
| nameOverride | string | `""` | |
|
||||||
|
| namespaceOverride | string | `""` | |
|
||||||
|
| nodeSelector | object | `{}` | Node labels for pod assignment. |
|
||||||
|
| ollama.enabled | bool | `true` | Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure |
|
||||||
|
| ollama.fullnameOverride | string | `"open-webui-ollama"` | If enabling embedded Ollama, update fullnameOverride to your desired Ollama name value, or else it will use the default ollama.name value from the Ollama chart |
|
||||||
|
| ollamaUrls | list | `[]` | A list of Ollama API endpoints. These can be added in lieu of automatically installing the Ollama Helm chart, or in addition to it. |
|
||||||
|
| openaiBaseApiUrl | string | `""` | OpenAI base API URL to use. Defaults to the Pipelines service endpoint when Pipelines are enabled, and "https://api.openai.com/v1" if Pipelines are not enabled and this value is blank |
|
||||||
|
| persistence.accessModes | list | `["ReadWriteOnce"]` | If using multiple replicas, you must update accessModes to ReadWriteMany |
|
||||||
|
| persistence.annotations | object | `{}` | |
|
||||||
|
| persistence.enabled | bool | `true` | |
|
||||||
|
| persistence.existingClaim | string | `""` | Use existingClaim if you want to re-use an existing Open WebUI PVC instead of creating a new one |
|
||||||
|
| persistence.selector | object | `{}` | |
|
||||||
|
| persistence.size | string | `"2Gi"` | |
|
||||||
|
| persistence.storageClass | string | `""` | |
|
||||||
|
| persistence.subPath | string | `""` | Subdirectory of Open WebUI PVC to mount. Useful if root directory is not empty. |
|
||||||
|
| pipelines.enabled | bool | `true` | Automatically install Pipelines chart to extend Open WebUI functionality using Pipelines: https://github.com/open-webui/pipelines |
|
||||||
|
| pipelines.extraEnvVars | list | `[]` | This section can be used to pass required environment variables to your pipelines (e.g. Langfuse hostname) |
|
||||||
|
| podAnnotations | object | `{}` | |
|
||||||
|
| podLabels | object | `{}` | |
|
||||||
|
| podSecurityContext | object | `{}` | Configure pod security context ref: <https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-containe> |
|
||||||
|
| readinessProbe | object | `{}` | Probe for readiness of the Open WebUI container ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes> |
|
||||||
|
| redis-cluster | object | `{"auth":{"enabled":false},"enabled":false,"fullnameOverride":"open-webui-redis","replica":{"replicaCount":3}}` | Deploys a Redis cluster with subchart 'redis' from bitnami |
|
||||||
|
| redis-cluster.auth | object | `{"enabled":false}` | Redis Authentication |
|
||||||
|
| redis-cluster.auth.enabled | bool | `false` | Enable Redis authentication (disabled by default). For your security, we strongly suggest that you switch to 'auth.enabled=true' |
|
||||||
|
| redis-cluster.enabled | bool | `false` | Enable Redis installation |
|
||||||
|
| redis-cluster.fullnameOverride | string | `"open-webui-redis"` | Redis cluster name (recommended to be 'open-webui-redis') - In this case, redis url will be 'redis://open-webui-redis-master:6379/0' or 'redis://[:<password>@]open-webui-redis-master:6379/0' |
|
||||||
|
| redis-cluster.replica | object | `{"replicaCount":3}` | Replica configuration for the Redis cluster |
|
||||||
|
| redis-cluster.replica.replicaCount | int | `3` | Number of Redis replica instances |
|
||||||
|
| replicaCount | int | `1` | |
|
||||||
|
| resources | object | `{}` | |
|
||||||
|
| service | object | `{"annotations":{},"containerPort":8080,"labels":{},"loadBalancerClass":"","nodePort":"","port":80,"type":"ClusterIP"}` | Service values to expose Open WebUI pods to cluster |
|
||||||
|
| serviceAccount.annotations | object | `{}` | |
|
||||||
|
| serviceAccount.automountServiceAccountToken | bool | `false` | |
|
||||||
|
| serviceAccount.enable | bool | `true` | |
|
||||||
|
| serviceAccount.name | string | `""` | |
|
||||||
|
| startupProbe | object | `{}` | Probe for startup of the Open WebUI container ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes> |
|
||||||
|
| strategy | object | `{}` | Strategy for updating the workload manager: deployment or statefulset |
|
||||||
|
| tika.enabled | bool | `false` | Automatically install Apache Tika to extend Open WebUI |
|
||||||
|
| tolerations | list | `[]` | Tolerations for pod assignment |
|
||||||
|
| topologySpreadConstraints | list | `[]` | Topology Spread Constraints for pod assignment |
|
||||||
|
| volumeMounts | object | `{"container":[],"initContainer":[]}` | Configure container volume mounts ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/> |
|
||||||
|
| volumes | list | `[]` | Configure pod volumes ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/> |
|
||||||
|
| websocket.enabled | bool | `false` | Enables websocket support in Open WebUI with env `ENABLE_WEBSOCKET_SUPPORT` |
|
||||||
|
| websocket.manager | string | `"redis"` | Specifies the websocket manager to use with env `WEBSOCKET_MANAGER`: redis (default) |
|
||||||
|
| websocket.redis | object | `{"annotations":{},"args":[],"command":[],"enabled":true,"image":{"pullPolicy":"IfNotPresent","repository":"redis","tag":"7.4.2-alpine3.21"},"labels":{},"name":"open-webui-redis","resources":{},"service":{"annotations":{},"containerPort":6379,"labels":{},"nodePort":"","port":6379,"type":"ClusterIP"}}` | Deploys a redis |
|
||||||
|
| websocket.redis.annotations | object | `{}` | Redis annotations |
|
||||||
|
| websocket.redis.args | list | `[]` | Redis arguments (overrides default) |
|
||||||
|
| websocket.redis.command | list | `[]` | Redis command (overrides default) |
|
||||||
|
| websocket.redis.enabled | bool | `true` | Enable redis installation |
|
||||||
|
| websocket.redis.image | object | `{"pullPolicy":"IfNotPresent","repository":"redis","tag":"7.4.2-alpine3.21"}` | Redis image |
|
||||||
|
| websocket.redis.labels | object | `{}` | Redis labels |
|
||||||
|
| websocket.redis.name | string | `"open-webui-redis"` | Redis name |
|
||||||
|
| websocket.redis.resources | object | `{}` | Redis resources |
|
||||||
|
| websocket.redis.service | object | `{"annotations":{},"containerPort":6379,"labels":{},"nodePort":"","port":6379,"type":"ClusterIP"}` | Redis service |
|
||||||
|
| websocket.redis.service.annotations | object | `{}` | Redis service annotations |
|
||||||
|
| websocket.redis.service.containerPort | int | `6379` | Redis container/target port |
|
||||||
|
| websocket.redis.service.labels | object | `{}` | Redis service labels |
|
||||||
|
| websocket.redis.service.nodePort | string | `""` | Redis service node port. Valid only when type is `NodePort` |
|
||||||
|
| websocket.redis.service.port | int | `6379` | Redis service port |
|
||||||
|
| websocket.redis.service.type | string | `"ClusterIP"` | Redis service type |
|
||||||
|
| websocket.url | string | `"redis://open-webui-redis:6379/0"` | Specifies the URL of the Redis instance for websocket communication. Template with `redis://[:<password>@]<hostname>:<port>/<db>` |
|
||||||
|
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).
|
36
open-webui/README.md.gotmpl
Normal file
36
open-webui/README.md.gotmpl
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{ template "chart.header" . }}
|
||||||
|
|
||||||
|
{{ template "chart.deprecationWarning" . }}
|
||||||
|
|
||||||
|
{{ template "chart.badgesSection" . }}
|
||||||
|
|
||||||
|
{{ template "chart.description" . }}
|
||||||
|
|
||||||
|
{{ template "chart.homepageLine" . }}
|
||||||
|
|
||||||
|
{{ template "chart.maintainersSection" . }}
|
||||||
|
|
||||||
|
{{ template "chart.sourcesSection" . }}
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
Before you can install, you need to add the `open-webui` repo to [Helm](https://helm.sh)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm repo add open-webui https://helm.openwebui.com/
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can install the chart:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm upgrade --install open-webui open-webui/open-webui
|
||||||
|
```
|
||||||
|
|
||||||
|
{{ template "chart.requirementsSection" . }}
|
||||||
|
|
||||||
|
{{ template "chart.valuesSection" . }}
|
||||||
|
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).
|
77
open-webui/templates/NOTES.txt
Normal file
77
open-webui/templates/NOTES.txt
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
{{- `
|
||||||
|
🎉 Welcome to Open WebUI!!
|
||||||
|
___ __ __ _ _ _ ___
|
||||||
|
/ _ \ _ __ ___ _ __ \ \ / /__| |__ | | | |_ _|
|
||||||
|
| | | | '_ \ / _ \ '_ \ \ \ /\ / / _ \ '_ \| | | || |
|
||||||
|
| |_| | |_) | __/ | | | \ V V / __/ |_) | |_| || |
|
||||||
|
\___/| .__/ \___|_| |_| \_/\_/ \___|_.__/ \___/|___|
|
||||||
|
|_|
|
||||||
|
` }}
|
||||||
|
v{{ .Chart.AppVersion }} - building the best open-source AI user interface.
|
||||||
|
- Chart Version: v{{ .Chart.Version }}
|
||||||
|
- Project URL 1: {{ .Chart.Home }}
|
||||||
|
- Project URL 2: https://github.com/open-webui/open-webui
|
||||||
|
- Documentation: https://docs.openwebui.com/
|
||||||
|
- Chart URL: https://github.com/open-webui/helm-charts
|
||||||
|
|
||||||
|
Open WebUI is a web-based user interface that works with Ollama, OpenAI, Claude 3, Gemini and more.
|
||||||
|
This interface allows you to easily interact with local AI models.
|
||||||
|
|
||||||
|
1. Deployment Information:
|
||||||
|
- Chart Name: {{ .Chart.Name }}
|
||||||
|
- Release Name: {{ .Release.Name }}
|
||||||
|
- Namespace: {{ .Release.Namespace }}
|
||||||
|
|
||||||
|
2. Access the Application:
|
||||||
|
{{- if contains "ClusterIP" .Values.service.type }}
|
||||||
|
Access via ClusterIP service:
|
||||||
|
|
||||||
|
export LOCAL_PORT=8080
|
||||||
|
export POD_NAME=$(kubectl get pods -n {{ .Release.Namespace }} -l "app.kubernetes.io/component={{ include "open-webui.name" . }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
export CONTAINER_PORT=$(kubectl get pod -n {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||||
|
kubectl -n {{ .Release.Namespace }} port-forward $POD_NAME $LOCAL_PORT:$CONTAINER_PORT
|
||||||
|
echo "Visit http://127.0.0.1:$LOCAL_PORT to use your application"
|
||||||
|
|
||||||
|
Then, access the application at: http://127.0.0.1:$LOCAL_PORT or http://localhost:8080
|
||||||
|
|
||||||
|
{{- else if contains "NodePort" .Values.service.type }}
|
||||||
|
Access via NodePort service:
|
||||||
|
export NODE_PORT=$(kubectl get -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "open-webui.name" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
|
||||||
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||||
|
Access via LoadBalancer service:
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
NOTE: The external address format depends on your cloud provider:
|
||||||
|
- AWS: Will return a hostname (e.g., xxx.elb.amazonaws.com)
|
||||||
|
- GCP/Azure: Will return an IP address
|
||||||
|
You can watch the status by running:
|
||||||
|
|
||||||
|
kubectl get -n {{ .Release.Namespace }} svc {{ include "open-webui.name" . }} --watch
|
||||||
|
export EXTERNAL_IP=$(kubectl get -n {{ .Release.Namespace }} svc {{ include "open-webui.name" . }} -o jsonpath="{.status.loadBalancer.ingress[0].hostname:-.status.loadBalancer.ingress[0].ip}")
|
||||||
|
echo http://$EXTERNAL_IP:{{ .Values.service.port }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
|
||||||
|
Ingress is enabled. Access the application at: http{{ if .Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.host }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
3. Useful Commands:
|
||||||
|
- Check deployment status:
|
||||||
|
helm status {{ .Release.Name }} -n {{ .Release.Namespace }}
|
||||||
|
|
||||||
|
- Get detailed information:
|
||||||
|
helm get all {{ .Release.Name }} -n {{ .Release.Namespace }}
|
||||||
|
|
||||||
|
- View logs:
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
kubectl logs -f statefulset/{{ include "open-webui.name" . }} -n {{ .Release.Namespace }}
|
||||||
|
{{- else }}
|
||||||
|
kubectl logs -f deployment/{{ include "open-webui.name" . }} -n {{ .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
4. Cleanup:
|
||||||
|
- Uninstall the deployment:
|
||||||
|
helm uninstall {{ .Release.Name }} -n {{ .Release.Namespace }}
|
171
open-webui/templates/_helpers.tpl
Normal file
171
open-webui/templates/_helpers.tpl
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
{{/*
|
||||||
|
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
|
||||||
|
*/}}
|
||||||
|
{{- define "open-webui.namespace" -}}
|
||||||
|
{{- if .Values.namespaceOverride -}}
|
||||||
|
{{- .Values.namespaceOverride -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- .Release.Namespace -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Set the name of the Open WebUI resources
|
||||||
|
*/}}
|
||||||
|
{{- define "open-webui.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Set the name of the integrated Ollama resources
|
||||||
|
*/}}
|
||||||
|
{{- define "ollama.name" -}}
|
||||||
|
open-webui-ollama
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Set the name of the integrated Pipelines resources
|
||||||
|
*/}}
|
||||||
|
{{- define "pipelines.name" -}}
|
||||||
|
open-webui-pipelines
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Constructs a semicolon-separated string of Ollama API endpoint URLs from the ollamaUrls list
|
||||||
|
defined in the values.yaml file
|
||||||
|
*/}}
|
||||||
|
{{- define "ollamaUrls" -}}
|
||||||
|
{{- if .Values.ollamaUrls }}
|
||||||
|
{{- join ";" .Values.ollamaUrls | trimSuffix "/" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generates the URL for accessing the Ollama service within the Kubernetes cluster when the
|
||||||
|
ollama.enabled value is set to true, which means that the Ollama Helm chart is being installed
|
||||||
|
as a dependency of the Open WebUI chart
|
||||||
|
*/}}
|
||||||
|
{{- define "ollamaLocalUrl" -}}
|
||||||
|
{{- if .Values.ollama.enabled -}}
|
||||||
|
{{- $clusterDomain := .Values.clusterDomain }}
|
||||||
|
{{- $ollamaServicePort := .Values.ollama.service.port | toString }}
|
||||||
|
{{- printf "http://%s.%s.svc.%s:%s" (default .Values.ollama.name .Values.ollama.fullnameOverride) (.Release.Namespace) $clusterDomain $ollamaServicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Constructs a string containing the URLs of the Ollama API endpoints that the Open WebUI
|
||||||
|
application should use based on which values are set for Ollama/ whether the Ollama
|
||||||
|
subchart is in use
|
||||||
|
*/}}
|
||||||
|
{{- define "ollamaBaseUrls" -}}
|
||||||
|
{{- $ollamaLocalUrl := include "ollamaLocalUrl" . }}
|
||||||
|
{{- $ollamaUrls := include "ollamaUrls" . }}
|
||||||
|
{{- if and .Values.ollama.enabled .Values.ollamaUrls }}
|
||||||
|
{{- printf "%s;%s" $ollamaUrls $ollamaLocalUrl }}
|
||||||
|
{{- else if .Values.ollama.enabled }}
|
||||||
|
{{- printf "%s" $ollamaLocalUrl }}
|
||||||
|
{{- else if .Values.ollamaUrls }}
|
||||||
|
{{- printf "%s" $ollamaUrls }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the chart name and version for the chart label
|
||||||
|
*/}}
|
||||||
|
{{- define "chart.name" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the base labels to include on chart resources
|
||||||
|
*/}}
|
||||||
|
{{- define "base.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "chart.name" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create selector labels to include on all resources
|
||||||
|
*/}}
|
||||||
|
{{- define "base.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create selector labels to include on all Open WebUI resources
|
||||||
|
*/}}
|
||||||
|
{{- define "open-webui.selectorLabels" -}}
|
||||||
|
{{ include "base.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: {{ .Chart.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create labels to include on chart all Open WebUI resources
|
||||||
|
*/}}
|
||||||
|
{{- define "open-webui.labels" -}}
|
||||||
|
{{ include "base.labels" . }}
|
||||||
|
{{ include "open-webui.selectorLabels" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create selector labels to include on chart all Ollama resources
|
||||||
|
*/}}
|
||||||
|
{{- define "ollama.selectorLabels" -}}
|
||||||
|
{{ include "base.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: {{ include "ollama.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create labels to include on chart all Ollama resources
|
||||||
|
*/}}
|
||||||
|
{{- define "ollama.labels" -}}
|
||||||
|
{{ include "base.labels" . }}
|
||||||
|
{{ include "ollama.selectorLabels" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create selector labels to include on chart all Pipelines resources
|
||||||
|
*/}}
|
||||||
|
{{- define "pipelines.selectorLabels" -}}
|
||||||
|
{{ include "base.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: {{ include "pipelines.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create labels to include on chart all Pipelines resources
|
||||||
|
*/}}
|
||||||
|
{{- define "pipelines.labels" -}}
|
||||||
|
{{ include "base.labels" . }}
|
||||||
|
{{ include "pipelines.selectorLabels" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the service endpoint to use for Pipelines if the subchart is used
|
||||||
|
*/}}
|
||||||
|
{{- define "pipelines.serviceEndpoint" -}}
|
||||||
|
{{- if .Values.pipelines.enabled -}}
|
||||||
|
{{- $clusterDomain := .Values.clusterDomain }}
|
||||||
|
{{- $pipelinesServicePort := .Values.pipelines.service.port | toString }}
|
||||||
|
{{- printf "http://%s.%s.svc.%s:%s" (include "pipelines.name" .) (.Release.Namespace) $clusterDomain $pipelinesServicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create selector labels to include on chart all websocket resources
|
||||||
|
*/}}
|
||||||
|
{{- define "websocket.redis.selectorLabels" -}}
|
||||||
|
{{ include "base.selectorLabels" . }}
|
||||||
|
app.kubernetes.io/component: {{ .Values.websocket.redis.name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create labels to include on chart all websocket resources
|
||||||
|
*/}}
|
||||||
|
{{- define "websocket.redis.labels" -}}
|
||||||
|
{{ include "base.labels" . }}
|
||||||
|
{{ include "websocket.redis.selectorLabels" . }}
|
||||||
|
{{- end }}
|
6
open-webui/templates/extra-resources.yaml
Normal file
6
open-webui/templates/extra-resources.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{{- if .Values.extraResources }}
|
||||||
|
{{- range .Values.extraResources }}
|
||||||
|
---
|
||||||
|
{{ toYaml . | nindent 0 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
49
open-webui/templates/ingress.yaml
Normal file
49
open-webui/templates/ingress.yaml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "open-webui.name" . }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.ingress.class }}
|
||||||
|
ingressClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.ingress.host | quote }}
|
||||||
|
{{- range .Values.ingress.additionalHosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ default (printf "%s-tls" .Release.Name) .Values.ingress.existingSecret }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
- host: {{ .Values.ingress.host }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "open-webui.name" . }}
|
||||||
|
port:
|
||||||
|
name: http
|
||||||
|
{{- range .Values.ingress.additionalHosts }}
|
||||||
|
- host: {{ . | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "open-webui.name" $ }}
|
||||||
|
port:
|
||||||
|
name: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
28
open-webui/templates/pvc.yaml
Normal file
28
open-webui/templates/pvc.yaml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ include "open-webui.name" . }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.selectorLabels" . | nindent 4 }}
|
||||||
|
{{- with .Values.persistence.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
{{- range .Values.persistence.accessModes }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size }}
|
||||||
|
{{- if .Values.persistence.storageClass }}
|
||||||
|
storageClassName: {{ .Values.persistence.storageClass }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.persistence.selector }}
|
||||||
|
selector:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
14
open-webui/templates/service-account.yaml
Normal file
14
open-webui/templates/service-account.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{{- if .Values.serviceAccount.enable }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.serviceAccount.name | default (include "open-webui.name" .) }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
|
||||||
|
{{- end }}
|
36
open-webui/templates/service.yaml
Normal file
36
open-webui/templates/service.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "open-webui.name" . }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.service.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
{{- include "open-webui.selectorLabels" . | nindent 4 }}
|
||||||
|
type: {{ .Values.service.type | default "ClusterIP" }}
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
name: http
|
||||||
|
port: {{ .Values.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
{{- if .Values.service.nodePort }}
|
||||||
|
nodePort: {{ .Values.service.nodePort | int }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.service.loadBalancerClass }}
|
||||||
|
loadBalancerClass: {{ .Values.service.loadBalancerClass | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (eq .Values.service.type "ClusterIP") (.Values.service.clusterIP) }}
|
||||||
|
clusterIP: {{ .Values.service.clusterIP }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (eq .Values.service.type "LoadBalancer") (.Values.service.loadBalancerIP) }}
|
||||||
|
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||||
|
{{- end }}
|
||||||
|
|
71
open-webui/templates/websocket-redis.yaml
Normal file
71
open-webui/templates/websocket-redis.yaml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{{- if and .Values.websocket.enabled .Values.websocket.redis.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.websocket.redis.name }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "websocket.redis.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.websocket.redis.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.websocket.redis.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "websocket.redis.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "websocket.redis.labels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: {{ .Values.websocket.redis.name }}
|
||||||
|
image: "{{ .Values.websocket.redis.image.repository }}:{{ .Values.websocket.redis.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.websocket.redis.image.pullPolicy }}
|
||||||
|
{{- with .Values.websocket.redis.command }}
|
||||||
|
command:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.websocket.redis.args }}
|
||||||
|
args:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.websocket.redis.service.containerPort }}
|
||||||
|
{{- with .Values.websocket.redis.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.websocket.redis.name }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "websocket.redis.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.websocket.redis.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.websocket.redis.service.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
{{- include "websocket.redis.selectorLabels" . | nindent 4 }}
|
||||||
|
type: {{ .Values.websocket.redis.service.type | default "ClusterIP" }}
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
name: http
|
||||||
|
port: {{ .Values.websocket.redis.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
{{- if .Values.websocket.redis.service.nodePort }}
|
||||||
|
nodePort: {{ .Values.websocket.redis.service.nodePort | int }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
178
open-webui/templates/workload-manager.yaml
Normal file
178
open-webui/templates/workload-manager.yaml
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
kind: StatefulSet
|
||||||
|
{{- else }}
|
||||||
|
kind: Deployment
|
||||||
|
{{- end }}
|
||||||
|
metadata:
|
||||||
|
name: {{ include "open-webui.name" . }}
|
||||||
|
namespace: {{ include "open-webui.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
serviceName: {{ include "open-webui.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "open-webui.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- if .Values.strategy }}
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
updateStrategy:
|
||||||
|
{{- toYaml .Values.strategy | nindent 4 }}
|
||||||
|
{{- else }}
|
||||||
|
strategy:
|
||||||
|
{{- toYaml .Values.strategy | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "open-webui.labels" . | nindent 8 }}
|
||||||
|
{{- with .Values.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
initContainers:
|
||||||
|
- name: copy-app-data
|
||||||
|
{{- with .Values.image }}
|
||||||
|
image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }}
|
||||||
|
imagePullPolicy: {{ .pullPolicy }}
|
||||||
|
{{- end }}
|
||||||
|
command: ['sh', '-c', 'cp -R -n /app/backend/data/* /tmp/app-data/']
|
||||||
|
{{- with .Values.containerSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.copyAppData.resources }}
|
||||||
|
resources: {{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /tmp/app-data
|
||||||
|
{{- if .Values.persistence.subPath }}
|
||||||
|
subPath: {{ .Values.persistence.subPath }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.volumeMounts.initContainer }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
enableServiceLinks: false
|
||||||
|
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
|
||||||
|
{{- if .Values.serviceAccount.enable }}
|
||||||
|
serviceAccountName: {{ .Values.serviceAccount.name | default (include "open-webui.name" .) }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
{{- with .Values.image }}
|
||||||
|
image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }}
|
||||||
|
imagePullPolicy: {{ .pullPolicy }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.service.containerPort }}
|
||||||
|
{{- with .Values.livenessProbe }}
|
||||||
|
livenessProbe: {{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.readinessProbe }}
|
||||||
|
readinessProbe: {{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.startupProbe }}
|
||||||
|
startupProbe: {{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.resources }}
|
||||||
|
resources: {{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.containerSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /app/backend/data
|
||||||
|
{{- if .Values.persistence.subPath }}
|
||||||
|
subPath: {{ .Values.persistence.subPath }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.volumeMounts.container }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
env:
|
||||||
|
{{- if or .Values.ollamaUrls .Values.ollama.enabled }}
|
||||||
|
- name: "OLLAMA_BASE_URLS"
|
||||||
|
value: {{ include "ollamaBaseUrls" . | quote }}
|
||||||
|
{{- else }}
|
||||||
|
- name: "ENABLE_OLLAMA_API"
|
||||||
|
value: "False"
|
||||||
|
{{- end }}
|
||||||
|
- name: "OPENAI_API_BASE_URL"
|
||||||
|
{{- if .Values.pipelines.enabled }}
|
||||||
|
value: {{ include "pipelines.serviceEndpoint" . }}
|
||||||
|
{{- else if .Values.openaiBaseApiUrl }}
|
||||||
|
value: {{ .Values.openaiBaseApiUrl | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.extraEnvVars }}
|
||||||
|
{{- toYaml .Values.extraEnvVars | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tika.enabled }}
|
||||||
|
- name: "CONTENT_EXTRACTION_ENGINE"
|
||||||
|
value: "Tika"
|
||||||
|
- name: "TIKA_SERVER_URL"
|
||||||
|
value: http://{{ .Chart.Name }}-tika:9998
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.websocket.enabled }}
|
||||||
|
- name: "ENABLE_WEBSOCKET_SUPPORT"
|
||||||
|
value: "True"
|
||||||
|
- name: "WEBSOCKET_MANAGER"
|
||||||
|
value: {{ .Values.websocket.manager | default "redis" | quote }}
|
||||||
|
- name: "WEBSOCKET_REDIS_URL"
|
||||||
|
value: {{ .Values.websocket.url | quote }}
|
||||||
|
{{- end }}
|
||||||
|
tty: true
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.topologySpreadConstraints }}
|
||||||
|
topologySpreadConstraints:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
{{- if and .Values.persistence.enabled .Values.persistence.existingClaim }}
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ .Values.persistence.existingClaim }}
|
||||||
|
{{- else if not .Values.persistence.enabled }}
|
||||||
|
- name: data
|
||||||
|
emptyDir: {}
|
||||||
|
{{- else if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ include "open-webui.name" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.volumes }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
357
open-webui/values.schema.json
Normal file
357
open-webui/values.schema.json
Normal file
@ -0,0 +1,357 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"affinity": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"clusterDomain": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"containerSecurityContext": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"copyAppData": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"resources": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extraEnvVars": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extraResources": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"pullPolicy": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imagePullSecrets": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"ingress": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"additionalHosts": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"class": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"existingSecret": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"livenessProbe": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"nameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespaceOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nodeSelector": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"ollama": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"fullnameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ollamaUrls": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"openaiBaseApiUrl": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"persistence": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"accessModes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"existingClaim": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"selector": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"storageClass": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subPath": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pipelines": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"extraEnvVars": {
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"podAnnotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"podLabels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"podSecurityContext": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"readinessProbe": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"redis-cluster": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"auth": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"fullnameOverride": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"replica": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"replicaCount": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replicaCount": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"containerPort": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"loadBalancerClass": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nodePort": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serviceAccount": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"automountServiceAccountToken": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"enable": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"startupProbe": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"strategy": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"tika": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tolerations": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"topologySpreadConstraints": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"volumeMounts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"container": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"initContainer": {
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volumes": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"websocket": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"manager": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"redis": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"pullPolicy": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"containerPort": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"nodePort": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
278
open-webui/values.yaml
Normal file
278
open-webui/values.yaml
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
# yaml-language-server: $schema=./values.schema.json
|
||||||
|
|
||||||
|
nameOverride: ""
|
||||||
|
namespaceOverride: ""
|
||||||
|
|
||||||
|
ollama:
|
||||||
|
# -- Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure
|
||||||
|
enabled: true
|
||||||
|
# -- If enabling embedded Ollama, update fullnameOverride to your desired Ollama name value, or else it will use the default ollama.name value from the Ollama chart
|
||||||
|
fullnameOverride: "open-webui-ollama"
|
||||||
|
# -- Example Ollama configuration with nvidia GPU enabled, automatically downloading a model, and deploying a PVC for model persistence
|
||||||
|
# ollama:
|
||||||
|
# gpu:
|
||||||
|
# enabled: true
|
||||||
|
# type: 'nvidia'
|
||||||
|
# number: 1
|
||||||
|
# models:
|
||||||
|
# - llama3
|
||||||
|
# runtimeClassName: nvidia
|
||||||
|
# persistentVolume:
|
||||||
|
# enabled: true
|
||||||
|
# volumeName: "example-pre-existing-pv-created-by-smb-csi"
|
||||||
|
|
||||||
|
pipelines:
|
||||||
|
# -- Automatically install Pipelines chart to extend Open WebUI functionality using Pipelines: https://github.com/open-webui/pipelines
|
||||||
|
enabled: true
|
||||||
|
# -- This section can be used to pass required environment variables to your pipelines (e.g. Langfuse hostname)
|
||||||
|
extraEnvVars: []
|
||||||
|
|
||||||
|
tika:
|
||||||
|
# -- Automatically install Apache Tika to extend Open WebUI
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# -- A list of Ollama API endpoints. These can be added in lieu of automatically installing the Ollama Helm chart, or in addition to it.
|
||||||
|
ollamaUrls: []
|
||||||
|
|
||||||
|
websocket:
|
||||||
|
# -- Enables websocket support in Open WebUI with env `ENABLE_WEBSOCKET_SUPPORT`
|
||||||
|
enabled: false
|
||||||
|
# -- Specifies the websocket manager to use with env `WEBSOCKET_MANAGER`: redis (default)
|
||||||
|
manager: redis
|
||||||
|
# -- Specifies the URL of the Redis instance for websocket communication. Template with `redis://[:<password>@]<hostname>:<port>/<db>`
|
||||||
|
url: redis://open-webui-redis:6379/0
|
||||||
|
# -- Deploys a redis
|
||||||
|
redis:
|
||||||
|
# -- Enable redis installation
|
||||||
|
enabled: true
|
||||||
|
# -- Redis name
|
||||||
|
name: open-webui-redis
|
||||||
|
# -- Redis labels
|
||||||
|
labels: {}
|
||||||
|
# -- Redis annotations
|
||||||
|
annotations: {}
|
||||||
|
# -- Redis image
|
||||||
|
image:
|
||||||
|
repository: redis
|
||||||
|
tag: 7.4.2-alpine3.21
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# -- Redis command (overrides default)
|
||||||
|
command: []
|
||||||
|
# -- Redis arguments (overrides default)
|
||||||
|
args: []
|
||||||
|
# -- Redis resources
|
||||||
|
resources: {}
|
||||||
|
# -- Redis service
|
||||||
|
service:
|
||||||
|
# -- Redis container/target port
|
||||||
|
containerPort: 6379
|
||||||
|
# -- Redis service type
|
||||||
|
type: ClusterIP
|
||||||
|
# -- Redis service labels
|
||||||
|
labels: {}
|
||||||
|
# -- Redis service annotations
|
||||||
|
annotations: {}
|
||||||
|
# -- Redis service port
|
||||||
|
port: 6379
|
||||||
|
# -- Redis service node port. Valid only when type is `NodePort`
|
||||||
|
nodePort: ""
|
||||||
|
|
||||||
|
# -- Deploys a Redis cluster with subchart 'redis' from bitnami
|
||||||
|
redis-cluster:
|
||||||
|
# -- Enable Redis installation
|
||||||
|
enabled: false
|
||||||
|
# -- Redis cluster name (recommended to be 'open-webui-redis')
|
||||||
|
# - In this case, redis url will be 'redis://open-webui-redis-master:6379/0' or 'redis://[:<password>@]open-webui-redis-master:6379/0'
|
||||||
|
fullnameOverride: open-webui-redis
|
||||||
|
# -- Redis Authentication
|
||||||
|
auth:
|
||||||
|
# -- Enable Redis authentication (disabled by default). For your security, we strongly suggest that you switch to 'auth.enabled=true'
|
||||||
|
enabled: false
|
||||||
|
# -- Replica configuration for the Redis cluster
|
||||||
|
replica:
|
||||||
|
# -- Number of Redis replica instances
|
||||||
|
replicaCount: 3
|
||||||
|
|
||||||
|
# -- Value of cluster domain
|
||||||
|
clusterDomain: cluster.local
|
||||||
|
|
||||||
|
annotations: {}
|
||||||
|
podAnnotations: {}
|
||||||
|
podLabels: {}
|
||||||
|
replicaCount: 1
|
||||||
|
# -- Strategy for updating the workload manager: deployment or statefulset
|
||||||
|
strategy: {}
|
||||||
|
# -- Open WebUI image tags can be found here: https://github.com/open-webui/open-webui
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/open-webui/open-webui
|
||||||
|
tag: ""
|
||||||
|
pullPolicy: "IfNotPresent"
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
enable: true
|
||||||
|
name: ""
|
||||||
|
annotations: {}
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
|
||||||
|
# -- Configure imagePullSecrets to use private registry
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry>
|
||||||
|
imagePullSecrets: []
|
||||||
|
# imagePullSecrets:
|
||||||
|
# - name: myRegistryKeySecretName
|
||||||
|
|
||||||
|
# -- Probe for liveness of the Open WebUI container
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes>
|
||||||
|
livenessProbe: {}
|
||||||
|
# livenessProbe:
|
||||||
|
# httpGet:
|
||||||
|
# path: /health
|
||||||
|
# port: http
|
||||||
|
# failureThreshold: 1
|
||||||
|
# periodSeconds: 10
|
||||||
|
|
||||||
|
# -- Probe for readiness of the Open WebUI container
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes>
|
||||||
|
readinessProbe: {}
|
||||||
|
# readinessProbe:
|
||||||
|
# httpGet:
|
||||||
|
# path: /health/db
|
||||||
|
# port: http
|
||||||
|
# failureThreshold: 1
|
||||||
|
# periodSeconds: 10
|
||||||
|
|
||||||
|
# -- Probe for startup of the Open WebUI container
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes>
|
||||||
|
startupProbe: {}
|
||||||
|
# startupProbe:
|
||||||
|
# httpGet:
|
||||||
|
# path: /health
|
||||||
|
# port: http
|
||||||
|
# initialDelaySeconds: 30
|
||||||
|
# periodSeconds: 5
|
||||||
|
# failureThreshold: 20
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
copyAppData:
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
class: ""
|
||||||
|
# -- Use appropriate annotations for your Ingress controller, e.g., for NGINX:
|
||||||
|
# nginx.ingress.kubernetes.io/rewrite-target: /
|
||||||
|
annotations: {}
|
||||||
|
host: ""
|
||||||
|
additionalHosts: []
|
||||||
|
tls: false
|
||||||
|
existingSecret: ""
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: 2Gi
|
||||||
|
# -- Use existingClaim if you want to re-use an existing Open WebUI PVC instead of creating a new one
|
||||||
|
existingClaim: ""
|
||||||
|
# -- Subdirectory of Open WebUI PVC to mount. Useful if root directory is not empty.
|
||||||
|
subPath: ""
|
||||||
|
# -- If using multiple replicas, you must update accessModes to ReadWriteMany
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClass: ""
|
||||||
|
selector: {}
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
# -- Node labels for pod assignment.
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
# -- Tolerations for pod assignment
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
# -- Affinity for pod assignment
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
# -- Topology Spread Constraints for pod assignment
|
||||||
|
topologySpreadConstraints: []
|
||||||
|
|
||||||
|
# -- Service values to expose Open WebUI pods to cluster
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
annotations: {}
|
||||||
|
port: 80
|
||||||
|
containerPort: 8080
|
||||||
|
nodePort: ""
|
||||||
|
labels: {}
|
||||||
|
loadBalancerClass: ""
|
||||||
|
|
||||||
|
# -- OpenAI base API URL to use. Defaults to the Pipelines service endpoint when Pipelines are enabled, and "https://api.openai.com/v1" if Pipelines are not enabled and this value is blank
|
||||||
|
openaiBaseApiUrl: ""
|
||||||
|
|
||||||
|
# -- Env vars added to the Open WebUI deployment. Most up-to-date environment variables can be found here: https://docs.openwebui.com/getting-started/env-configuration/
|
||||||
|
extraEnvVars:
|
||||||
|
# -- Default API key value for Pipelines. Should be updated in a production deployment, or be changed to the required API key if not using Pipelines
|
||||||
|
- name: OPENAI_API_KEY
|
||||||
|
value: "0p3n-w3bu!"
|
||||||
|
# valueFrom:
|
||||||
|
# secretKeyRef:
|
||||||
|
# name: pipelines-api-key
|
||||||
|
# key: api-key
|
||||||
|
# - name: OPENAI_API_KEY
|
||||||
|
# valueFrom:
|
||||||
|
# secretKeyRef:
|
||||||
|
# name: openai-api-key
|
||||||
|
# key: api-key
|
||||||
|
# - name: OLLAMA_DEBUG
|
||||||
|
# value: "1"
|
||||||
|
|
||||||
|
# -- Configure container volume mounts
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/>
|
||||||
|
volumeMounts:
|
||||||
|
initContainer: []
|
||||||
|
# - name: ""
|
||||||
|
# mountPath: ""
|
||||||
|
container: []
|
||||||
|
# - name: ""
|
||||||
|
# mountPath: ""
|
||||||
|
|
||||||
|
# -- Configure pod volumes
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/>
|
||||||
|
volumes: []
|
||||||
|
# - name: ""
|
||||||
|
# configMap:
|
||||||
|
# name: ""
|
||||||
|
# - name: ""
|
||||||
|
# emptyDir: {}
|
||||||
|
|
||||||
|
# -- Configure pod security context
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-containe>
|
||||||
|
podSecurityContext:
|
||||||
|
{}
|
||||||
|
# fsGroupChangePolicy: Always
|
||||||
|
# sysctls: []
|
||||||
|
# supplementalGroups: []
|
||||||
|
# fsGroup: 1001
|
||||||
|
|
||||||
|
|
||||||
|
# -- Configure container security context
|
||||||
|
# ref: <https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-containe>
|
||||||
|
containerSecurityContext:
|
||||||
|
{}
|
||||||
|
# runAsUser: 1001
|
||||||
|
# runAsGroup: 1001
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# privileged: false
|
||||||
|
# allowPrivilegeEscalation: false
|
||||||
|
# readOnlyRootFilesystem: false
|
||||||
|
# capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
# seccompProfile:
|
||||||
|
# type: "RuntimeDefault"
|
||||||
|
|
||||||
|
# -- Extra resources to deploy with Open WebUI
|
||||||
|
extraResources:
|
||||||
|
[]
|
||||||
|
# - apiVersion: v1
|
||||||
|
# kind: ConfigMap
|
||||||
|
# metadata:
|
||||||
|
# name: example-configmap
|
||||||
|
# data:
|
||||||
|
# example-key: example-value
|
Loading…
Reference in New Issue
Block a user