Ga naar hoofdinhoud

Kubernetes

Het Helm-chart staat in helm/libre-webui.

Work op Kubernetes

Native, zonder Dockerdaemon, CLI of socket:

helm install libre-webui ./helm/libre-webui --set work.enabled=true

Stelt WORK_RUNTIME_BACKEND=kubernetes in en maakt:

  • namespace work.namespace (standaard libre-webui-work) met Pod per actieve sandbox en PVC per taak (work.workspaceSize, standaard 5Gi, echte quota; policy kan andere grootte kiezen);
  • Role/RoleBinding met alleen pods (get/list/create/delete), pods/exec (get/create), persistentvolumeclaims (get/list/create/delete), geen secrets/clusterrechten. API-server verhindert hostmounts;
  • NetworkPolicies die standaard alles weigeren, alleen backendpreview toestaan en uitgaand internet geven behalve work.networkPolicy.blockedEgressCidrs (privé, CGNAT en metadata; verifieer CIDRs). DNS alleen naar kube-system; node-local DNS vereist uitzondering.

Niet-root, read-only rootfs, alle capabilities weg, seccomp RuntimeDefault, geen ServiceAccount-token. Bestanden, commando's, git en terminals via exec; preview via Pod-IP en ondertekende proxy, backend in cluster. Hostmappen niet ondersteund.

NetworkPolicy vereist CNI zoals Calico/Cilium. Verifieer handhaving. Monteer nooit nodesocket.

Installatie

helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui

Standaard persistente opslag en Ollama. Overgang 0.14.1 is op geverifieerde multiarchdigest vastgezet; latere charts gebruiken appVersion. Stel image.tag/image.digest alleen bewust in; tag wint.

solo accepteert replicaCount: 0 of replicaCount: 1; groter en HPA worden geweigerd wegens SQLite/lokale toestand.

Voor meerdere replica's gebruik compleet team met PostgreSQL/PGVector, S3, Redis en worker:

replicaCount: 3

env:
LIBRE_PLATFORM_MODE: team
DATABASE_BACKEND: postgres
DATABASE_SSL_MODE: verify-full
POSTGRES_MIGRATION_MODE: apply
POSTGRES_POOL_MAX: 10
POSTGRES_CONNECT_TIMEOUT_MS: 5000
POSTGRES_IDLE_TIMEOUT_MS: 30000
POSTGRES_STATEMENT_TIMEOUT_MS: 30000
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS: 60000
OLLAMA_TIMEOUT: 300000
OLLAMA_LONG_OPERATION_TIMEOUT: 900000
OLLAMA_MAX_CONTEXT: 32768
BLOB_STORE_BACKEND: s3
VECTOR_STORE_BACKEND: pgvector
COORDINATION_BACKEND: redis
JOB_WORKER_MODE: external
STORAGE_ENCRYPTION_ACTIVE_KEY_ID: active
S3_BUCKET: libre-blobs
S3_REGION: us-east-1
S3_BLOB_PREFIX: libre/blobs

worker:
replicaCount: 1

secrets:
databaseUrl: postgresql://libre:replace-me@postgres.example/libre
redisUrl: rediss://redis.example:6379/0
jwtSecret: '<one-stable-high-entropy-secret-for-every-replica>'
encryptionKey: '<legacy-64-character-lowercase-hex-key>'
storageEncryptionKeys: '{"legacy":"<legacy-64-character-lowercase-hex-key>","active":"<active-64-character-lowercase-hex-key>"}'
s3AccessKeyId: replace-me
s3SecretAccessKey: replace-me

secrets.encryptionKey moet gelijk zijn aan legacy, kaart bevat STORAGE_ENCRYPTION_ACTIVE_KEY_ID, secrets.jwtSecret stabiel en gedeeld. Houd PostgreSQL TLS geverifieerd en voeg geen driverparameters aan databaseUrl toe. Reserveer (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX verbindingen plus marge.

helm upgrade --install libre-webui \
oci://ghcr.io/libre-webui/charts/libre-webui \
--values /absolute/path/to/libre-team-values.yaml

Commit het bestand niet en gebruik geen productiegeheimen via --set. Met work.enabled=true krijgt worker dezelfde image, StorageClass, work.env, Ollama en timeouts. Positieve replicaCount vereist worker; zet replicaCount en worker.replicaCount op nul voor volledige pauze. Alleen app nul is worker-only drain.

Team-upgrades en schema

Exact schema, geen mixed of zero-downtime. App/worker gebruiken Recreate, maar Kubernetes coördineert niet samen. Stop ingang, rond werk af, schaal beide nul, maak geverifieerde back-up, controleer beëindiging; upgrade dan met POSTGRES_MIGRATION_MODE=apply. Eén proces houdt advisory lock. Rollback herstelt naar schone PostgreSQL/S3; verwacht onderbreking.

Lokale toegang

kubectl port-forward svc/libre-webui 8080:8080

Open http://localhost:8080.

Externe Ollama

helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui \
--set ollama.bundled.enabled=false \
--set ollama.external.enabled=true \
--set ollama.external.url=http://my-ollama:11434

Geheimen

Standaard maakt het chart <release>-libre-webui-secrets uit niet-lege secrets.*:

helm upgrade --install libre-webui \
oci://ghcr.io/libre-webui/charts/libre-webui \
--set-string secrets.jwtSecret="$(openssl rand -hex 64)" \
--set-string secrets.encryptionKey="$(openssl rand -hex 32)"
secrets:
existingSecret: libre-webui-runtime

Met secrets.existingSecret gebruikt het chart een bestaand Secret; stel secrets.existingSecret stabiel in. Maak vooraf met jwt-secret, encryption-key; team ook database-url, redis-url, storage-encryption-keys. Optioneel session-secret, s3-access-key-id, s3-secret-access-key, s3-session-token. GitHub/Hugging Face lezen *-client-id en *-client-secret bij secrets.githubClientId of secrets.huggingfaceClientId. Ontbrekende sleutel verhindert start.

Gebruik external-secrets of versleutelde values; --set kan zichtbaar en bewaard zijn.

NetworkPolicies

Stel networkPolicy.enabled=true in:

networkPolicy:
enabled: true

App accepteert alleen HTTP-poort, worker geen ingang. Uitgang blijft nodig. Dit staat los van work.networkPolicy.enabled; beide vereisen CNI.

Persistentie

Houd data- en Ollama-PVC persistent; back-up met sleutel. Work-PVCs zijn apart en vereisen database + PVCs samen.

Ingress

helm upgrade libre-webui \
oci://ghcr.io/libre-webui/charts/libre-webui \
--reuse-values \
--set env.TRUST_PROXY=1 \
--set-string env.CORS_ORIGIN=https://your-domain.example

TRUST_PROXY is exact hopgetal. Standaard 0; gebruik juiste 116, nooit true. Verkeerd aantal groepeert clients of vertrouwt clientinput.

Chart stelt BASE_URL/OAuth-callback niet bloot; breid uit met exacte publieke domein.

Resources

Plan Ollama-Pod op voldoende geheugen/GPU. Bestaande inferentieservice is vaak eenvoudiger extern.

Gerelateerde documenten