Files
homelab/cluster/applications/body-wars/deployment.yaml
Hermes Agent service account e6cb187f8e Deploy Body Wars Observability WebUI (Open WebUI → astro-orbiter vLLM)
- Service: Open WebUI latest (ghcr.io/open-webui/open-webui:latest)
- Backend: http://astro-orbiter:8000/v1 (Gemma-4-26B-A4B-it-AWQ)
- Ingress: body-wars.local.mk-labs.cloud (letsencrypt-prod TLS)
- Auth: vLLM API key from 1Password (op://mk-labs/vllm/api-key)
- ArgoCD wave 9 (post-Hindsight observability)
- ExternalSecret syncs credentials before deployment
- Replicas: 1, Resource limits: 1GB memory, 1 CPU
2026-08-31 22:46:06 -05:00

102 lines
2.7 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: open-webui
namespace: body-wars
labels:
app.kubernetes.io/name: open-webui
app.kubernetes.io/part-of: body-wars
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: open-webui
template:
metadata:
labels:
app.kubernetes.io/name: open-webui
app.kubernetes.io/part-of: body-wars
spec:
serviceAccountName: open-webui
containers:
- name: open-webui
image: ghcr.io/open-webui/open-webui:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
env:
# OpenWebUI configuration
- name: WEBUI_SECRET_KEY
valueFrom:
secretKeyRef:
name: body-wars-secret
key: vllm-api-key
optional: false
- name: OAUTH_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: body-wars-secret
key: openwebui-admin-password
optional: false
# Backend configuration for vLLM
- name: OLLAMA_BASE_URLS
value: "http://astro-orbiter:8000"
- name: OPENAI_BASE_URL
value: "http://astro-orbiter:8000/v1"
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: body-wars-secret
key: vllm-api-key
optional: false
- name: OPENAI_MODEL_FALLBACK
value: "Gemma-4-26B-A4B-it-AWQ"
# Allow access from ingress
- name: WEBUI_URL
value: "https://body-wars.local.mk-labs.cloud"
# Observability settings
- name: ENABLE_API_KEY
value: "true"
- name: ENABLE_MODEL_FILTER
value: "false"
# Storage
- name: DATA_DIR
value: "/app/backend/data"
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi
livenessProbe:
httpGet:
path: /api/v1/models
port: http
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /api/v1/models
port: http
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 2
volumeMounts:
- name: data
mountPath: /app/backend/data
volumes:
- name: data
emptyDir:
sizeLimit: 1Gi