Import manifests reverse-engineered from live cluster

Captured 2026-07-26 from rpi-master (k3s v1.30.3) and cleaned of runtime
fields. Six apps as per-app kustomizations: vaultwarden, searxng,
home-assistant, nginx, pihole(+unbound), unified-streaming.

Intentional divergences from live state:
- pihole WEBPASSWORD and USP_LICENSE_KEY moved from inline plaintext env
  to secretKeyRef (secrets gitignored; templates in secret.example.yaml)
- HA ingress defaultBackend fixed (pointed at nonexistent service)
- unifiedstreaming-svc kept as ClusterIP (LoadBalancer could never bind
  port 80 behind svclb-traefik)

Validated against the live cluster with kubectl apply --dry-run=server:
no immutable-field conflicts; one-time kubectl replace procedure for the
two env->secretKeyRef migrations documented in README.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jasonwitty
2026-07-26 02:13:56 -07:00
parent ec9b422f87
commit 8afac39d03
40 changed files with 1179 additions and 1 deletions
+78
View File
@@ -0,0 +1,78 @@
# Helm release searxng-1723974683 (chart searxng-1.0.0) in the *default*
# namespace — the release is still recorded in the cluster, so if you ever
# `helm upgrade` it, helm and this manifest will fight. Prefer retiring the
# helm release (helm delete --no-hooks would delete resources; instead just
# treat this repo as the source of truth and never run helm against it).
# Names keep the timestamped release suffix because selectors are immutable.
# NOTE (faithful to live state): TZ value "America/Los Angeles" is missing the
# underscore — an invalid tzdata name, so searxng falls back to UTC. Kept as-is;
# fix to America/Los_Angeles when convenient.
apiVersion: apps/v1
kind: Deployment
metadata:
name: searxng-1723974683
namespace: default
labels:
app.kubernetes.io/instance: searxng-1723974683
app.kubernetes.io/name: searxng
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app.kubernetes.io/instance: searxng-1723974683
app.kubernetes.io/name: searxng
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
metadata:
labels:
app.kubernetes.io/instance: searxng-1723974683
app.kubernetes.io/name: searxng
spec:
containers:
- name: searxng-1723974683
image: searxng/searxng:latest
imagePullPolicy: Always
env:
- name: AUTOCOMPLETE
value: google
- name: BASE_URL
value: http://searxng.wittyoneoff.com/
- name: INSTANCE_NAME
value: witty-one-off-searxng
- name: TZ
value: America/Los Angeles
ports:
- name: http
containerPort: 8080
protocol: TCP
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 5
livenessProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 3
periodSeconds: 10
readinessProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 3
periodSeconds: 10
volumeMounts:
- name: searxng-config
mountPath: /etc/searxng/settings.yml
subPath: settings.yml
volumes:
- name: searxng-config
secret:
secretName: searxng-1723974683-config
+33
View File
@@ -0,0 +1,33 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: searxng-ingress
namespace: default
spec:
ingressClassName: traefik
defaultBackend:
service:
name: searxng-1723974683
port:
number: 8080
rules:
- host: searxng.wittyoneoff.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: searxng-1723974683
port:
number: 8080
- host: origin-searxng.wittyoneoff.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: searxng-1723974683
port:
number: 8080
+8
View File
@@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# secret.example.yaml is intentionally NOT listed — copy it to secret.yaml
# (gitignored) and apply manually once per cluster.
resources:
- deployment.yaml
- service.yaml
- ingress.yaml
+14
View File
@@ -0,0 +1,14 @@
# Copy to secret.yaml (gitignored), set a real secret_key, and apply once:
# kubectl apply -f secret.yaml
# The secret already exists in the cluster; this file only documents its shape.
apiVersion: v1
kind: Secret
metadata:
name: searxng-1723974683-config
namespace: default
type: Opaque
stringData:
settings.yml: |
server:
secret_key: CHANGE-ME
use_default_settings: true
+18
View File
@@ -0,0 +1,18 @@
apiVersion: v1
kind: Service
metadata:
name: searxng-1723974683
namespace: default
labels:
app.kubernetes.io/instance: searxng-1723974683
app.kubernetes.io/name: searxng
spec:
type: ClusterIP
selector:
app.kubernetes.io/instance: searxng-1723974683
app.kubernetes.io/name: searxng
ports:
- name: http
port: 8080
targetPort: http
protocol: TCP