homelab/k3s/snikket/snikket.yaml
Samantha Atkins 759ef949bc K3s cluster on Proxmox with WireGuard mesh networking
Replaced Headscale (too buggy in 0.28.x — random node drops) with direct
WireGuard hub-and-spoke + full mesh. 7 Proxmox VMs across 3 hosts form a
K3s v1.34.6 cluster: 3 control-plane/etcd nodes, 4 workers.

Running services: postgres, mariadb, ghost (x3), forgejo, authentik.
All unpinned services use local-path StorageClass. Databases pinned to
pve-worker and adder-worker with local PVs.

Includes VM provisioning scripts (create-debian-template.sh, clone-vm.sh),
K3s manifests for all services, and full deployment docs in k3s/README.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 01:23:13 -04:00

121 lines
2.5 KiB
YAML

# Snikket — XMPP server (Prosody-based)
# Unpinned — scheduler places freely, local-path PVC
# TLS terminated externally by Caddy at venture ingress VPS
# NodePorts: 32381 (web/admin), 32382 (XMPP client), 32383 (XMPP federation), 32384 (file transfer proxy)
#
# Deploy:
# kubectl apply -f snikket.yaml -n <ns>
#
# Caddy must proxy port 80 traffic (invites/admin portal) via NodePort 32381
# XMPP client connections on 32382 must be reachable directly (not HTTP — raw TCP)
# XMPP federation on 32383 must be reachable directly (raw TCP)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: snikket-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: snikket-web
spec:
replicas: 1
selector:
matchLabels:
app: snikket-web
template:
metadata:
labels:
app: snikket-web
spec:
containers:
- name: snikket-web
image: snikket/snikket-server:latest
command: ["web"]
ports:
- containerPort: 80
volumeMounts:
- name: snikket-data
mountPath: /snikket
volumes:
- name: snikket-data
persistentVolumeClaim:
claimName: snikket-pvc
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: snikket-server
spec:
replicas: 1
selector:
matchLabels:
app: snikket-server
template:
metadata:
labels:
app: snikket-server
spec:
containers:
- name: snikket-server
image: snikket/snikket-server:latest
command: ["server"]
ports:
- containerPort: 5222
- containerPort: 5269
- containerPort: 5000
volumeMounts:
- name: snikket-data
mountPath: /snikket
volumes:
- name: snikket-data
persistentVolumeClaim:
claimName: snikket-pvc
---
apiVersion: v1
kind: Service
metadata:
name: snikket-web
spec:
selector:
app: snikket-web
ports:
- port: 80
targetPort: 80
nodePort: 32381
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: snikket
spec:
selector:
app: snikket-server
ports:
- name: xmpp-client
port: 5222
targetPort: 5222
nodePort: 32382
- name: xmpp-federation
port: 5269
targetPort: 5269
nodePort: 32383
- name: file-transfer
port: 5000
targetPort: 5000
nodePort: 32384
type: NodePort