10 Commits

Author SHA1 Message Date
Michael Thomson
b2b1e08df3 privileged gitea 2026-04-27 22:20:22 -04:00
Michael Thomson
d5d250ae7d immich cluster to 3 instances 2026-04-27 22:13:54 -04:00
Michael Thomson
5c761ae5bb remove old apps 2026-04-27 22:03:32 -04:00
Michael Thomson
34047818c6 media and ha privileged 2026-04-27 20:28:29 -04:00
Michael Thomson
c2ece48a6f metallb ignore exclude label 2026-04-27 14:30:54 -04:00
Michael Thomson
4d6785e303 privileged metallb 2026-04-27 13:11:14 -04:00
Flux
15bbca8109 Add Flux v2.8.3 component manifests 2026-04-27 12:52:08 -04:00
Michael Thomson
6eeec8287d privileged longhorn namespace 2026-04-27 11:37:39 -04:00
Michael Thomson
5e44afce21 remove collabora from nextcloud release 2026-04-14 08:21:48 -04:00
Michael Thomson
fef8ae55a3 update nextcloud 2026-04-13 22:15:39 -04:00
44 changed files with 223 additions and 4640 deletions

View File

@@ -1,34 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: baikal
namespace: baikal
spec:
selector:
matchLabels:
app: baikal
template:
metadata:
labels:
app: baikal
spec:
containers:
- name: baikal
image: ckulka/baikal:nginx
ports:
- containerPort: 80
name: http
protocol: TCP
volumeMounts:
- mountPath: /var/www/baikal/config
name: config
- mountPath: /var/www/baikal/Specific
name: data
restartPolicy: Always
volumes:
- name: config
persistentVolumeClaim:
claimName: config
- name: data
persistentVolumeClaim:
claimName: data

View File

@@ -1,27 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: baikal
namespace: baikal
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
external-dns.alpha.kubernetes.io/target: michaelthomson.ddns.net
external-dns.alpha.kubernetes.io/cloudflare-proxied: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
rules:
- host: baikal.michaelthomson.dev
http:
paths:
- pathType: ImplementationSpecific
path: /
backend:
service:
name: baikal
port:
name: http
tls:
- hosts:
- baikal.michaelthomson.dev
secretName: baikal-tls

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: config
namespace: baikal
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
namespace: baikal
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: baikal
namespace: baikal
spec:
selector:
app: baikal
ports:
- name: http
port: 80
targetPort: http

View File

@@ -8,7 +8,7 @@ metadata:
cnpg.io/skipEmptyWalArchiveCheck: enabled
spec:
imageName: ghcr.io/tensorchord/cloudnative-vectorchord:17-0.3.0
instances: 2
instances: 3
postgresql:
shared_preload_libraries:

View File

@@ -1,50 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: minecraft
namespace: minecraft
spec:
chart:
spec:
chart: minecraft
version: 5.x
sourceRef:
kind: HelmRepository
name: minecraft
interval: 15m
releaseName: minecraft
values:
serviceAnnotations:
metallb.io/loadBalancerIPs: 192.168.18.201
minecraftServer:
# This must be overridden, since we can't accept this for the user.
eula: true
# One of: LATEST, SNAPSHOT, or a specific version (ie: "1.7.9").
version: "LATEST"
## The type of Minecraft server to run, check for related settings below
## Common types: "VANILLA", "FABRIC", "FORGE", "SPIGOT", "BUKKIT", "PAPER",
## "FTBA", "SPONGEVANILLA", "AUTO_CURSEFORGE"
## ref: https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms
type: "VANILLA"
# One of: peaceful, easy, normal, and hard
difficulty: normal
# A comma-separated list of player names to whitelist.
whitelist: DrDeww,lolobinbolo
# A comma-separated list of player names who should be admins.
ops: DrDeww
# A server icon URL for server listings. Auto-scaled and transcoded.
icon:
# Message of the Day
motd: "Welcome to Michael's Minecraft Server"
worldSaveName: world
# If you adjust this, you may need to adjust resources.requests above to match.
memory: 1024M
serviceType: LoadBalancer
persistence:
dataDir:
enabled: true
Size: 8Gi
accessModes:
- ReadWriteOnce

View File

@@ -1,9 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: minecraft
namespace: minecraft
spec:
interval: 15m
url: https://itzg.github.io/minecraft-server-charts/

View File

@@ -7,7 +7,7 @@ spec:
chart:
spec:
chart: nextcloud
version: 8.x
version: 9.x
sourceRef:
kind: HelmRepository
name: nextcloud
@@ -126,47 +126,6 @@ spec:
global:
storageClass: longhorn
collabora:
enabled: true
# image:
# tag: 24.04.11.1.1
collabora:
extra_params: --o:ssl.enable=false --o:ssl.termination=true
existingSecret:
enabled: true
secretName: "collabora-secret"
usernameKey: "username"
passwordKey: "password"
# securityContext:
# runAsNonRoot: true
# privileged: true
# capabilities:
# add:
# - SYS_ADMIN
# - MKNOD
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
external-dns.alpha.kubernetes.io/target: michaelthomson.ddns.net
external-dns.alpha.kubernetes.io/cloudflare-proxied: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
hosts:
- host: collabora.michaelthomson.dev
paths:
- path: /
pathType: ImplementationSpecific
tls:
- hosts:
- collabora.michaelthomson.dev
secretName: collabora-tls
cronjob:
enabled: true

View File

@@ -1,47 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: ntfy
namespace: ntfy
labels:
app: ntfy
spec:
revisionHistoryLimit: 1
replicas: 1
selector:
matchLabels:
app: ntfy
template:
metadata:
labels:
app: ntfy
spec:
containers:
- name: ntfy
image: binwiederhier/ntfy:v1.28.0
args: ["serve"]
env:
- name: TZ
value: America/Toronto
- name: NTFY_DEBUG
value: "false"
- name: NTFY_LOG_LEVEL
value: INFO
- name: NTFY_BASE_URL
value: https://ntfy.michaelthomson.dev
ports:
- containerPort: 80
name: http
volumeMounts:
- mountPath: /etc/ntfy
subPath: server.yml
name: config-volume
- mountPath: /var/cache/ntfy
name: cache-volume
volumes:
- name: config-volume
configMap:
name: server-config
- name: cache-volume
persistentVolumeClaim:
claimName: pvc

View File

@@ -1,27 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ntfy
namespace: ntfy
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
external-dns.alpha.kubernetes.io/target: michaelthomson.ddns.net
external-dns.alpha.kubernetes.io/cloudflare-proxied: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
rules:
- host: ntfy.michaelthomson.dev
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: service
port:
name: http
tls:
- hosts:
- ntfy.michaelthomson.dev
secretName: ntfy-tls

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
namespace: ntfy
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 1Gi

View File

@@ -1,9 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: server-config
namespace: ntfy
data:
server.yml: |
cache-file: "/var/cache/ntfy/cache.db"
attachment-cache-dir: "/var/cache/ntfy/attachments"

View File

@@ -1,14 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: service
namespace: ntfy
spec:
type: ClusterIP
selector:
app: ntfy
ports:
- name: http
protocol: TCP
port: 80
targetPort: http

View File

@@ -1,56 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: ollama
namespace: ollama
spec:
chart:
spec:
chart: ollama
version: 1.x
sourceRef:
kind: HelmRepository
name: otwld
interval: 15m
releaseName: ollama
values:
runtimeClassName: nvidia
ollama:
gpu:
# -- Enable GPU integration
enabled: true
# -- GPU type: 'nvidia' or 'amd'
type: 'nvidia'
# -- Specify the number of GPU to 1
number: 1
nvidiaResource: "nvidia.com/gpu-all"
# -- List of models to pull at container startup
models:
create:
- name: qwen3.5:9b-ctx32768
template: |
FROM qwen3.5:9b
PARAMETER num_ctx 32768
run:
- qwen3.5:9b-ctx32768
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
hosts:
- host: ollama.michaelthomson.dev
paths:
- path: /
pathType: Prefix
path: /
tls:
- secretName: ollama-tls
hosts:
- ollama.michaelthomson.dev

View File

@@ -1,8 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: otwld
namespace: ollama
spec:
interval: 15m
url: https://helm.otwld.com/

View File

@@ -1,27 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: open-webui
namespace: open-webui
spec:
chart:
spec:
chart: open-webui
version: 12.x
sourceRef:
kind: HelmRepository
name: open-webui
interval: 15m
releaseName: open-webui
values:
ollama:
enabled: false
ingress:
enabled: true
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
host: "chat.michaelthomson.dev" # update to your real domain
tls: true
existingSecret: open-webui-tls

View File

@@ -1,8 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: open-webui
namespace: open-webui
spec:
interval: 15m
url: https://helm.openwebui.com/

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: wg-easy-config
namespace: wg-easy
data:
LANG: "en"
WG_HOST: "wireguard.michaelthomson.dev"
WG_PORT: "30000"
UI_TRAFFIC_STATS: "true"
UI_CHART_TYPE: "1"
ENABLE_PROMETHEUS_METRICS: "true"

View File

@@ -1,48 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: wg-easy
namespace: wg-easy
spec:
selector:
matchLabels:
app: wg-easy
template:
metadata:
labels:
app: wg-easy
spec:
# securityContext:
# sysctls:
# - name: net.ipv4.ip_forward
# value: "1"
# - name: net.ipv4.conf.all.src_valid_mark
# value: "1"
containers:
- name: wg-easy
image: ghcr.io/wg-easy/wg-easy
imagePullPolicy: Always
envFrom:
- configMapRef:
name: wg-easy-config
optional: false
ports:
- containerPort: 30000
name: wg
protocol: UDP
- containerPort: 51821
name: http
protocol: TCP
securityContext:
capabilities:
add:
- NET_ADMIN
- SYS_MODULE
volumeMounts:
- name: config
mountPath: /etc/wireguard
restartPolicy: Always
volumes:
- name: config
persistentVolumeClaim:
claimName: wg-easy-config

View File

@@ -1,27 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wg-easy
namespace: wg-easy
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
external-dns.alpha.kubernetes.io/target: michaelthomson.ddns.net
external-dns.alpha.kubernetes.io/cloudflare-proxied: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
rules:
- host: wireguard.michaelthomson.dev
http:
paths:
- pathType: ImplementationSpecific
path: /
backend:
service:
name: wg-easy
port:
name: http
tls:
- hosts:
- wireguard.michaelthomson.dev
secretName: wg-easy-tls

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wg-easy-config
namespace: wg-easy
spec:
resources:
requests:
storage: 1Gi
storageClassName: longhorn
accessModes:
- ReadWriteOnce

View File

@@ -1,16 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: wg-easy-dns
namespace: wg-easy
annotations:
metallb.io/loadBalancerIPs: 192.168.18.245
spec:
type: LoadBalancer
selector:
app: wg-easy
ports:
- name: wg
port: 30000
targetPort: wg
protocol: UDP

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: wg-easy
namespace: wg-easy
spec:
selector:
app: wg-easy
ports:
- port: 80
targetPort: http
name: http

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: baikal
namespace: flux-system
spec:
interval: 15m
path: ./apps/baikal
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: minecraft
namespace: flux-system
spec:
interval: 15m
path: ./apps/minecraft
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ntfy
namespace: flux-system
spec:
interval: 15m
path: ./apps/ntfy
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ollama
namespace: flux-system
spec:
interval: 1m
path: ./apps/ollama
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: open-webui
namespace: flux-system
spec:
interval: 1m
path: ./apps/open-webui
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

View File

@@ -1,19 +0,0 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: wg-easy
namespace: flux-system
spec:
interval: 15m
path: ./apps/wg-easy
prune: true # remove any elements later removed from the above path
wait: true
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
dependsOn:
- name: infra-configs

File diff suppressed because it is too large Load Diff

View File

@@ -14,3 +14,5 @@ spec:
interval: 15m
releaseName: metallb
values:
speaker:
ignoreExcludeLB: true

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: baikal

View File

@@ -2,3 +2,7 @@ apiVersion: v1
kind: Namespace
metadata:
name: gitea
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged

View File

@@ -2,3 +2,7 @@ apiVersion: v1
kind: Namespace
metadata:
name: homeassistant
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged

View File

@@ -2,3 +2,7 @@ apiVersion: v1
kind: Namespace
metadata:
name: longhorn-system
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged

View File

@@ -2,3 +2,7 @@ apiVersion: v1
kind: Namespace
metadata:
name: media
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged

View File

@@ -2,3 +2,7 @@ apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: minecraft

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: ntfy

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: ollama

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: open-webui

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: sealed-secrets

View File

@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: wg-easy