fun to experiment but not needed

This commit is contained in:
Jun-te Kim 2026-03-03 22:28:00 +00:00
parent feb8002c41
commit c59967b779
6 changed files with 121 additions and 12 deletions

View file

@ -0,0 +1,49 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: open-webui
namespace: default
labels:
app: open-webui
spec:
replicas: 1
selector:
matchLabels:
app: open-webui
template:
metadata:
labels:
app: open-webui
spec:
nodeSelector:
kubernetes.io/hostname: mist
containers:
- name: open-webui
image: ghcr.io/open-webui/open-webui:main
ports:
- name: http
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: "https://ollama.juntekim.com"
- name: ENABLE_SIGNUP
value: "true"
- name: DEFAULT_MODELS
value: ""
- name: DEFAULT_USER_ROLE
value: "user"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
volumeMounts:
- name: open-webui-data
mountPath: /app/backend/data
volumes:
- name: open-webui-data
persistentVolumeClaim:
claimName: open-webui-data-pvc

View file

@ -0,0 +1,19 @@
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: open-webui
namespace: default
spec:
entryPoints:
- websecure
routes:
- match: Host(`chatgpt.juntekim.com`)
kind: Rule
services:
- name: open-webui
port: 80
tls:
certResolver: myresolver
domains:
- main: chatgpt.juntekim.com

View file

@ -0,0 +1,22 @@
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: open-webui-data-pv
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-path
local:
path: /home/kimjunte/open-ai
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- mist

View file

@ -0,0 +1,13 @@
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: open-webui-data-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: local-path

View file

@ -0,0 +1,15 @@
---
apiVersion: v1
kind: Service
metadata:
name: open-webui
namespace: default
spec:
type: ClusterIP
ports:
- protocol: TCP
name: http
port: 80
targetPort: 8080
selector:
app: open-webui

View file

@ -14,6 +14,8 @@ spec:
app: traefik app: traefik
spec: spec:
serviceAccountName: traefik-ingress-controller serviceAccountName: traefik-ingress-controller
nodeSelector:
kubernetes.io/hostname: mist
volumes: volumes:
- name: acme - name: acme
persistentVolumeClaim: persistentVolumeClaim:
@ -36,24 +38,13 @@ spec:
- "--api.insecure=true" - "--api.insecure=true"
- "--entrypoints.web.address=:80" - "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443" - "--entrypoints.websecure.address=:443"
# Redirect HTTP → HTTPS
- "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
# Providers
- "--providers.kubernetescrd=true" - "--providers.kubernetescrd=true"
- "--providers.kubernetescrd.allowCrossNamespace=true" - "--providers.kubernetescrd.allowCrossNamespace=true"
# TLS + ACME
- "--certificatesresolvers.myresolver.acme.email=junte.kim@mealcraft.com" - "--certificatesresolvers.myresolver.acme.email=junte.kim@mealcraft.com"
- "--certificatesresolvers.myresolver.acme.storage=/acme/acme.json" - "--certificatesresolvers.myresolver.acme.storage=/acme/acme.json"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=route53" - "--certificatesresolvers.myresolver.acme.dnschallenge.provider=route53"
# STAGING (uncomment for first-time)
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
env: env:
- name: AWS_REGION - name: AWS_REGION
valueFrom: valueFrom:
@ -69,4 +60,4 @@ spec:
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: aws-secrets name: aws-secrets
key: AWS_SECRET_ACCESS_KEY key: AWS_SECRET_ACCESS_KEY