Hop til hovedindhold

Kubernetes

Libre WebUI leveres med et Helm-diagram i helm/libre-webui.

Work på Kubernetes

Work kører direkte på Kubernetes uden Docker-daemon, CLI eller socket. Aktivér det ved installationen:

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

Det skifter backend til WORK_RUNTIME_BACKEND=kubernetes og opretter:

  • et særskilt sandkassenamespace (work.namespace, standard libre-webui-work) med én Pod pr. kørende sandkasse og én PersistentVolumeClaim pr. opgavearbejdsområde (work.workspaceSize, standard 5Gi, en reel diskkvote pr. opgave; en navngiven Work-politik kan angive en anden størrelse);
  • en namespaceafgrænset Role og RoleBinding, der giver backendens ServiceAccount præcis pods (get/list/create/delete), pods/exec (get/create) og persistentvolumeclaims (get/list/create/delete) i namespacet—ingen secrets eller clusteromfang. Tilladelsen erstatter Docker-socketen fuldstændigt: API-serveren, ikke programmet, håndhæver, at sandkassespecifikationen ikke kan montere værtsstier;
  • NetworkPolicy, der som standard afviser al sandkassetrafik, kun tillader ingress fra backend på forhåndsvisningsporten og giver netværksaktiverede sandkasser egress til internettet bortset fra work.networkPolicy.blockedEgressCidrs (private intervaller, CGNAT-intervallet, som nogle administrerede clusters bruger til pod- og tjeneste-CIDR, samt cloud-metadataområdet—kontrollér, at clusterets CIDR er dækket). Sandkassens DNS tillades kun til kube-system; clusters med nodelokal DNS kræver egen undtagelse.

Sandkasser kører som ikke-root med skrivebeskyttet rodfilsystem, alle capabilities fjernet, seccomp RuntimeDefault og uden ServiceAccount-token. Filer, kommandoer, git og interaktive terminaler bruger exec-underressourcen gennem API-serveren. Forhåndsvisning serveres fra sandkassens Pod-IP gennem den signerede same-origin-proxy, hvilket kræver backend i clusteret. Arbejdsområder med værtsmapper understøttes ikke.

To operatørbemærkninger: NetworkPolicy kræver en CNI, der implementerer den (Calico, Cilium, nyere kind-udgivelser og de fleste administrerede clusters gør). Kontrollér før sandkasseisolering betragtes som aktiv; CI's end-to-end-suite rapporterer, om clusteret håndhæver den. Montér aldrig en nodes containerruntime-socket i WebUI-podden; Kubernetes-backend findes for at gøre det unødvendigt.

Installér

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

Standarddiagrammet udruller Libre WebUI med vedvarende lager og medfølgende Ollama. Overgangen 0.14.1 er fastgjort til en verificeret multiarkitektur-image-digest; senere diagrammer bruger den matchende semantiske appVersion-image. Angiv kun image.tag eller image.digest, når en anden image bevidst ønskes. En ikke-tom image.tag har forrang.

Standardprofilen solo accepterer replicaCount: 0 til bevidst pause eller replicaCount: 1 til normal drift. Større værdier og HorizontalPodAutoscaler afvises, fordi SQLite, lokale filer og proceslokal koordinering ikke er sikre bag flere pods. En udgivelse med nul replikaer klargør kontrolplansressourcer, men serverer ingen Libre WebUI-trafik.

Konfigurér den fulde profil team til flere replikaer. Den bruger PostgreSQL/PGVector, S3-kompatibelt bloblager, Redis og en separat vedvarende worker; diagrammet afviser en delvis blanding af delte og lokale backend. Start med en beskyttet values-fil:

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 skal matche posten legacy præcist, og nøglekortet skal også indeholde STORAGE_ENCRYPTION_ACTIVE_KEY_ID. secrets.jwtSecret skal være én stabil værdi med høj entropi, som deles af alle program- og worker-pods; diagrammet afviser teamtilstand uden den, så sessioner aldrig afhænger af podlokalt materiale. Behold verificeret TLS til administreret PostgreSQL, og tilføj ikke driverparametre i databaseUrl. Poolgrænser gælder hver proces, så reservér mindst (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX forbindelser plus margin. Installér med den beskyttede values-fil:

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

Commit ikke filen, og send ikke produktionshemmeligheder gennem --set. Gem den i et beskyttet flow for krypterede values. Skalér modeludbydere og Work-sandkassepods uafhængigt. Med work.enabled=true får den eksterne team-worker samme runtime-image, StorageClass og work.env-grænser som programpods samt samme opløste Ollama-endpoint, tidsgrænser og automatisk antagne maksimale kontekst, fordi udbyderkald kører der. Et aktivt teamprogram kræver mindst én ekstern worker, og diagrammet afviser nul workers. Sæt både replicaCount og worker.replicaCount til nul for fuld pause. Kun programantal nul er en bevidst worker-eksklusiv drænings-/gendannelsestilstand uden webtrafik, men med fortsat købehandling.

Teamopgraderinger og skemakompatibilitet

Libre kræver nøjagtig skemaversion, ikke blandede versioner eller databaseopgraderinger uden afbrydelse. Program- og worker-Deployment bruger Recreate, som forhindrer overlap i hvert Deployment, men Kubernetes koordinerer dem ikke som én grænse. Stop ny ingress før opgradering, afslut eller annullér aktive vedvarende og Work-job, skalér begge gamle Deployment til nul, tag en verificeret teamsikkerhedskopi, og bekræft, at alle gamle pods er afsluttet. Opgradér derefter med POSTGRES_MIGRATION_MODE=apply; én ny proces holder PostgreSQLs rådgivende lederlås, mens resten venter og validerer samme migreringsbog. Gendan den tidligere verificerede kopi til rene PostgreSQL-/S3-mål ved rollback; peg aldrig en ældre binær mod et skema, den ikke præcist understøtter. Forvent en bevidst tjenesteafbrydelse.

Lokal adgang

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

Åbn http://localhost:8080.

Ekstern Ollama

Brug en eksisterende Ollama-endpoint:

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

Hemmeligheder

Angiv en stabil JWT-hemmelighed og krypteringsnøgle til produktion. Diagrammet opretter som standard <release>-libre-webui-secrets fra ikke-tomme secrets.*-værdier:

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)"

Angiv secrets.existingSecret til en operatøradministreret Secret. Diagrammet gengiver da ingen Secret, og både program- og worker-pods refererer det navngivne objekt:

secrets:
existingSecret: libre-webui-runtime

Opret Secret før installation. Den skal indeholde jwt-secret og encryption-key; teamtilstand kræver også database-url, redis-url og storage-encryption-keys. Valgfrie nøgler er session-secret, s3-access-key-id, s3-secret-access-key og s3-session-token. GitHub og Hugging Face OAuth kan læse *-client-id-/*-client-secret-par fra den navngivne Secret, når secrets.githubClientId eller secrets.huggingfaceClientId aktiverer integrationen. Diagrammet validerer eller kopierer bevidst ikke værdierne; en manglende obligatorisk nøgle hindrer Pod-start.

Foretræk secrets.existingSecret med en external-secrets-controller til produktionsautomatisering, eller lever stabile værdier gennem et krypteret Helm-values-flow. Kommandolinjeværdier med --set kan afsløres gennem procesinspektion og bevares i Helm-metadata. Tilføj udbyderoplysninger gennem en bevidst diagramudvidelse eller konfigurér pr. bruger i WebUI.

NetworkPolicy for program og worker

Angiv networkPolicy.enabled=true for at gengive ingresspolitikker til programmet og, i teamtilstand, den eksterne vedvarende worker:

networkPolicy:
enabled: true

Programmet accepterer kun ingress på sin HTTP-containerport. Workeren accepterer ingen ingress. Politikkerne begrænser ikke egress: processerne skal stadig nå konfigurerede PostgreSQL-, Redis-, S3-, Ollama-, værktøjs- og modeludbyderendpoints, og operatøren bestemmer tjenesternes placering.

Indstillingen er separat fra work.networkPolicy.enabled, som styrer standardafvisende politikker i Work-sandkassens namespace og aktiveres som standard med Work. Begge kræver en CNI, der faktisk håndhæver Kubernetes NetworkPolicy; gengivne objekter alene beviser ikke netværksisolering.

Persistens

Behold Libre WebUI's data-PVC og Ollamas model-PVC på vedvarende lager. Sikkerhedskopiér datavolumen og krypteringsnøglen sammen.

Work-arbejdsområder findes i egne PVC'er i sandkassenamespacet, ikke i Libre WebUI's data-PVC. Fuld Work-gendannelse kræver databasen (opgaveejerskab, ressourcenavne, kørsler) og PVC'erne; sikkerhedskopiér dem sammen under samme politik.

Ingress

Konfigurér ingress med HTTPS, og angiv browserens nøjagtige origin gennem diagrammet til offentlig adgang:

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 er et præcist antal hop, ikke en boolean. Sikker standard er 0, som ignorerer videresendte klientadresser. Brug kun 1, når én ingressproxy forbinder direkte; tæl alle betroede load balancere og proxyskridt i en længere fast kæde, og hold tjenesten utilgængelig uden for kæden. Et for lavt antal grupperer klienter under proxyadressen og kan opbruge fælles logingrænser; et for højt kan stole på en klientangivet adresse. Diagrammet accepterer kun 016, aldrig ubegrænset true, og sender værdien kun til HTTP-programpods.

Det aktuelle diagram eksponerer ikke BASE_URL eller OAuth-callback-URL-værdier. Udrulninger med OAuth skal udvide diagrammet eller patche Deployment for at angive variablerne, og callback-URL'erne skal matche det offentlige domæne.

Ressourceplanlægning

Planlæg den lokale Ollama-pod på noder med tilstrækkelig hukommelse og GPU-kapacitet til modellerne. Hvis clusteret allerede har en dedikeret Ollama- eller inferenstjeneste, er ekstern Ollama normalt enklere.

Relateret dokumentation