Skip to content

feat(open-webui): migrate to k8s - #1744

Merged
Mafyuh merged 1 commit into
mainfrom
owebui-k8s
May 17, 2026
Merged

feat(open-webui): migrate to k8s#1744
Mafyuh merged 1 commit into
mainfrom
owebui-k8s

Conversation

@Mafyuh

@Mafyuh Mafyuh commented May 17, 2026

Copy link
Copy Markdown
Owner

No description provided.

@github-actions

Copy link
Copy Markdown
--- HelmRelease: default/open-webui ServiceAccount: default/open-webui-sa

+++ HelmRelease: default/open-webui ServiceAccount: default/open-webui-sa

@@ -0,0 +1,13 @@

+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: open-webui-sa
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+automountServiceAccountToken: false
+
--- HelmRelease: default/open-webui PersistentVolumeClaim: default/open-webui

+++ HelmRelease: default/open-webui PersistentVolumeClaim: default/open-webui

@@ -0,0 +1,17 @@

+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: open-webui
+  namespace: default
+  labels:
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+spec:
+  accessModes:
+  - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
+  storageClassName: ceph-block
+
--- HelmRelease: default/open-webui Service: default/open-webui

+++ HelmRelease: default/open-webui Service: default/open-webui

@@ -0,0 +1,22 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: open-webui
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+spec:
+  selector:
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+  type: ClusterIP
+  ports:
+  - protocol: TCP
+    name: http
+    port: 80
+    targetPort: http
+
--- HelmRelease: default/open-webui Service: default/open-webui-redis

+++ HelmRelease: default/open-webui Service: default/open-webui-redis

@@ -0,0 +1,22 @@

+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: open-webui-redis
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui-redis
+spec:
+  selector:
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui-redis
+  type: ClusterIP
+  ports:
+  - protocol: TCP
+    name: http
+    port: 6379
+    targetPort: http
+
--- HelmRelease: default/open-webui Deployment: default/open-webui-redis

+++ HelmRelease: default/open-webui Deployment: default/open-webui-redis

@@ -0,0 +1,33 @@

+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: open-webui-redis
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui-redis
+spec:
+  selector:
+    matchLabels:
+      app.kubernetes.io/instance: open-webui
+      app.kubernetes.io/component: open-webui-redis
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: open-webui
+        app.kubernetes.io/instance: open-webui
+        app.kubernetes.io/component: open-webui-redis
+      annotations: null
+    spec:
+      containers:
+      - name: open-webui-redis
+        image: redis:7.4.2-alpine3.21
+        imagePullPolicy: IfNotPresent
+        ports:
+        - name: http
+          containerPort: 6379
+
--- HelmRelease: default/open-webui Deployment: default/open-webui

+++ HelmRelease: default/open-webui Deployment: default/open-webui

@@ -0,0 +1,98 @@

+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: open-webui
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+spec:
+  replicas: 1
+  revisionHistoryLimit: 10
+  selector:
+    matchLabels:
+      app.kubernetes.io/instance: open-webui
+      app.kubernetes.io/component: open-webui
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: open-webui
+        app.kubernetes.io/instance: open-webui
+        app.kubernetes.io/component: open-webui
+    spec:
+      initContainers:
+      - name: copy-app-data
+        image: ghcr.io/open-webui/open-webui:v0.9.5
+        imagePullPolicy: IfNotPresent
+        command:
+        - sh
+        - -c
+        - cp -R -n /app/backend/data/* /tmp/app-data/
+        volumeMounts:
+        - name: data
+          mountPath: /tmp/app-data
+      enableServiceLinks: false
+      automountServiceAccountToken: false
+      serviceAccountName: open-webui-sa
+      containers:
+      - name: open-webui
+        image: ghcr.io/open-webui/open-webui:v0.9.5
+        imagePullPolicy: IfNotPresent
+        ports:
+        - name: http
+          containerPort: 8080
+        volumeMounts:
+        - name: data
+          mountPath: /app/backend/data
+        env:
+        - name: ENABLE_OLLAMA_API
+          value: 'False'
+        - name: OPENAI_API_BASE_URLS
+          value: https://integrate.api.nvidia.com/v1;https://openrouter.ai/api/v1;http://10.20.10.55:8080/v1
+        - name: OPENAI_API_KEYS
+          valueFrom:
+            secretKeyRef:
+              name: open-webui-secrets
+              key: OPENAI_API_KEYS
+        - name: ENABLE_WEBSOCKET_SUPPORT
+          value: 'True'
+        - name: WEBSOCKET_MANAGER
+          value: redis
+        - name: REDIS_URL
+          value: redis://open-webui-redis.default.svc.cluster.local:6379/0
+        - name: WEBSOCKET_REDIS_URL
+          value: redis://open-webui-redis.default.svc.cluster.local:6379/0
+        - name: ENABLE_OAUTH_SIGNUP
+          value: 'True'
+        - name: OAUTH_MERGE_ACCOUNTS_BY_EMAIL
+          value: 'True'
+        - name: OAUTH_CLIENT_ID
+          valueFrom:
+            secretKeyRef:
+              name: open-webui-secrets
+              key: OAUTH_CLIENT_ID
+        - name: OAUTH_CLIENT_SECRET
+          valueFrom:
+            secretKeyRef:
+              name: open-webui-secrets
+              key: OAUTH_CLIENT_SECRET
+        - name: OPENID_PROVIDER_URL
+          value: https://auth.mafyuh.io/application/o/open-webui/.well-known/openid-configuration
+        - name: OAUTH_PROVIDER_NAME
+          value: Authentik
+        - name: OAUTH_SCOPES
+          value: openid email profile
+        - name: ENABLE_LOGIN_FORM
+          value: 'false'
+        - name: OPENID_REDIRECT_URI
+          value: https://chat.mafyuh.dev/oauth/oidc/callback
+        tty: true
+      volumes:
+      - name: data
+        persistentVolumeClaim:
+          claimName: open-webui
+
--- HelmRelease: default/open-webui HTTPRoute: default/open-webui

+++ HelmRelease: default/open-webui HTTPRoute: default/open-webui

@@ -0,0 +1,27 @@

+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: open-webui
+  namespace: default
+  labels:
+    app.kubernetes.io/managed-by: Helm
+    app.kubernetes.io/name: open-webui
+    app.kubernetes.io/instance: open-webui
+    app.kubernetes.io/component: open-webui
+spec:
+  parentRefs:
+  - name: envoy-external
+    namespace: kube-system
+    sectionName: https
+  hostnames:
+  - chat.mafyuh.dev
+  rules:
+  - backendRefs:
+    - name: open-webui
+      port: 80
+    matches:
+    - path:
+        type: PathPrefix
+        value: /
+

@github-actions

Copy link
Copy Markdown
--- kubernetes/apps Kustomization: flux-system/apps Kustomization: default/open-webui

+++ kubernetes/apps Kustomization: flux-system/apps Kustomization: default/open-webui

@@ -0,0 +1,58 @@

+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+  labels:
+    kustomize.toolkit.fluxcd.io/name: apps
+    kustomize.toolkit.fluxcd.io/namespace: flux-system
+  name: open-webui
+  namespace: default
+spec:
+  commonMetadata:
+    labels:
+      app.kubernetes.io/name: open-webui
+  decryption:
+    provider: sops
+  deletionPolicy: WaitForTermination
+  interval: 30m
+  patches:
+  - patch: |-
+      apiVersion: helm.toolkit.fluxcd.io/v2
+      kind: HelmRelease
+      metadata:
+        name: not-used
+      spec:
+        install:
+          crds: CreateReplace
+          strategy:
+            name: RetryOnFailure
+        rollback:
+          cleanupOnFail: true
+          recreate: true
+        upgrade:
+          cleanupOnFail: true
+          crds: CreateReplace
+          strategy:
+            name: RemediateOnFailure
+          remediation:
+            remediateLastFailure: true
+            retries: 2
+    target:
+      group: helm.toolkit.fluxcd.io
+      kind: HelmRelease
+  path: ./kubernetes/apps/default/open-webui/app
+  postBuild:
+    substitute:
+      APP: open-webui
+    substituteFrom:
+    - kind: Secret
+      name: open-webui-secrets
+  prune: true
+  sourceRef:
+    kind: GitRepository
+    name: iac
+    namespace: flux-system
+  targetNamespace: default
+  timeout: 5m
+  wait: false
+
--- kubernetes/apps/default/open-webui/app Kustomization: default/open-webui ExternalSecret: default/open-webui-secrets

+++ kubernetes/apps/default/open-webui/app Kustomization: default/open-webui ExternalSecret: default/open-webui-secrets

@@ -0,0 +1,28 @@

+---
+apiVersion: external-secrets.io/v1
+kind: ExternalSecret
+metadata:
+  labels:
+    app.kubernetes.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/namespace: default
+  name: open-webui-secrets
+  namespace: default
+spec:
+  data:
+  - remoteRef:
+      key: 7bb7c8f6-cff8-4376-9b16-b44d001faec8
+    secretKey: OPENAI_API_KEYS
+  - remoteRef:
+      key: 876c897e-46ba-4e80-aa8c-b3ee018293b6
+    secretKey: OAUTH_CLIENT_ID
+  - remoteRef:
+      key: 070a254e-dcac-45b5-b815-b3ee0180a339
+    secretKey: OAUTH_CLIENT_SECRET
+  - remoteRef:
+      key: 4f53b805-b2d7-45d6-ae5b-b43a0039a86b
+    secretKey: DATABASE_URL
+  secretStoreRef:
+    kind: ClusterSecretStore
+    name: bitwarden-secrets-manager
+
--- kubernetes/apps/default/open-webui/app Kustomization: default/open-webui HelmRelease: default/open-webui

+++ kubernetes/apps/default/open-webui/app Kustomization: default/open-webui HelmRelease: default/open-webui

@@ -0,0 +1,86 @@

+---
+apiVersion: helm.toolkit.fluxcd.io/v2
+kind: HelmRelease
+metadata:
+  labels:
+    app.kubernetes.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/namespace: default
+  name: open-webui
+  namespace: default
+spec:
+  chartRef:
+    kind: OCIRepository
+    name: open-webui
+  install:
+    crds: CreateReplace
+    strategy:
+      name: RetryOnFailure
+  interval: 15m
+  rollback:
+    cleanupOnFail: true
+    recreate: true
+  upgrade:
+    cleanupOnFail: true
+    crds: CreateReplace
+    remediation:
+      remediateLastFailure: true
+      retries: 2
+    strategy:
+      name: RemediateOnFailure
+  values:
+    databaseUrl: null
+    enableOpenaiApi: true
+    extraEnvVars:
+    - name: ENABLE_LOGIN_FORM
+      value: 'false'
+    - name: OPENID_REDIRECT_URI
+      value: https://chat.mafyuh.dev/oauth/oidc/callback
+    image:
+      pullPolicy: IfNotPresent
+      repository: ghcr.io/open-webui/open-webui
+      tag: v0.9.5
+      useSlim: false
+    ollama:
+      enabled: false
+    openaiApiKeysExistingSecret: open-webui-secrets
+    openaiApiKeysExistingSecretKey: OPENAI_API_KEYS
+    openaiBaseApiUrls:
+    - https://integrate.api.nvidia.com/v1
+    - https://openrouter.ai/api/v1
+    - http://10.20.10.55:8080/v1
+    persistence:
+      accessMode:
+      - ReadWriteOnce
+      enabled: true
+      size: 1Gi
+      storageClass: ceph-block
+    pipelines:
+      enabled: false
+    route:
+      enabled: true
+      hostnames:
+      - chat.mafyuh.dev
+      parentRefs:
+      - name: envoy-external
+        namespace: kube-system
+        sectionName: https
+    sso:
+      enableSignup: true
+      enabled: true
+      mergeAccountsByEmail: true
+      oidc:
+        clientExistingSecret: open-webui-secrets
+        clientExistingSecretKey: OAUTH_CLIENT_SECRET
+        clientIdExistingSecretKey: OAUTH_CLIENT_ID
+        enabled: true
+        providerName: Authentik
+        providerUrl: https://auth.mafyuh.io/application/o/open-webui/.well-known/openid-configuration
+        scopes: openid email profile
+    terminals:
+      enabled: false
+    tika:
+      enabled: false
+    workload:
+      kind: Deployment
+
--- kubernetes/apps/default/open-webui/app Kustomization: default/open-webui OCIRepository: default/open-webui

+++ kubernetes/apps/default/open-webui/app Kustomization: default/open-webui OCIRepository: default/open-webui

@@ -0,0 +1,19 @@

+---
+apiVersion: source.toolkit.fluxcd.io/v1
+kind: OCIRepository
+metadata:
+  labels:
+    app.kubernetes.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/name: open-webui
+    kustomize.toolkit.fluxcd.io/namespace: default
+  name: open-webui
+  namespace: default
+spec:
+  interval: 15m
+  layerSelector:
+    mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
+    operation: copy
+  ref:
+    tag: 14.5.0
+  url: oci://ghcr.io/open-webui/helm-charts/open-webui
+

@Mafyuh
Mafyuh merged commit 2ade2ed into main May 17, 2026
5 checks passed
@Mafyuh
Mafyuh deleted the owebui-k8s branch May 17, 2026 03:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant