Auto-Upgrade services with keel. Clean up kompose junk. Break out pvcs from deployments

This commit is contained in:
Astra Logical 2026-07-21 11:21:26 -04:00
parent e3d1bcde17
commit 40edb4cf47
59 changed files with 437 additions and 522 deletions

72
keel/keel.yaml Normal file
View file

@ -0,0 +1,72 @@
apiVersion: v1
kind: Namespace
metadata:
name: keel
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: keel
namespace: keel
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: keel
rules:
- apiGroups: ["", "apps", "batch", "extensions"]
resources:
- namespaces
- deployments
- daemonsets
- statefulsets
- cronjobs
- pods
- replicationcontrollers
verbs: ["get", "list", "watch", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: keel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: keel
subjects:
- kind: ServiceAccount
name: keel
namespace: keel
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: keel
namespace: keel
labels:
app: keel
spec:
replicas: 1
selector:
matchLabels:
app: keel
template:
metadata:
labels:
app: keel
spec:
serviceAccountName: keel
containers:
- name: keel
image: keelhq/keel:latest
imagePullPolicy: Always
env:
- name: POLL
value: "true"
- name: SCHEDULER_FREQUENCY
value: "1h"
- name: AUTO_UPDATE_EVERYTHING
value: "false"
ports:
- containerPort: 9300
name: keel

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-abs.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: audiobookshelf
name: audiobookshelf name: audiobookshelf
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: audiobookshelf app: audiobookshelf
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-abs.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: audiobookshelf app: audiobookshelf
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-abs.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: audiobookshelf
name: audiobookshelf name: audiobookshelf
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: audiobookshelf app: audiobookshelf

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: bazarr-anime
name: bazarr-anime name: bazarr-anime
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: bazarr-anime app: bazarr-anime
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: bazarr-anime app: bazarr-anime
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: bazarr-anime
name: bazarr-anime name: bazarr-anime
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: bazarr-anime app: bazarr-anime

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: bazarr
name: bazarr name: bazarr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: bazarr app: bazarr
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: bazarr app: bazarr
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: bazarr
name: bazarr name: bazarr
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: bazarr app: bazarr

Binary file not shown.

View file

@ -1,23 +1,22 @@
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels:
io.kompose.service: calibre-web
name: calibre-web name: calibre-web
annotations: annotations:
reloader.stakater.com/auto: "true" keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: calibre-web app: calibre-web
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
labels: labels:
io.kompose.service: calibre-web app: calibre-web
spec: spec:
containers: containers:
- name: calibre-web - name: calibre-web

View file

@ -1,8 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
labels:
io.kompose.service: calibre-web
name: calibre-web name: calibre-web
spec: spec:
type: ClusterIP type: ClusterIP
@ -11,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: calibre-web app: calibre-web

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: deluge
name: deluge name: deluge
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: deluge app: deluge
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: deluge app: deluge
spec: spec:
containers: containers:
- env: - env:
@ -61,18 +57,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deluge-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 20Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deluge-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 20Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: deluge
name: deluge name: deluge
spec: spec:
type: ClusterIP type: ClusterIP
@ -24,4 +19,4 @@ spec:
port: 82 port: 82
targetPort: daemon targetPort: daemon
selector: selector:
io.kompose.service: deluge app: deluge

View file

@ -1,10 +1,11 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels:
app: droppedneedle
name: droppedneedle name: droppedneedle
namespace: default annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:

View file

@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: droppedneedle-secret
namespace: default
spec:
refreshInterval: "1h"
secretStoreRef:
name: vault-external-secrets-store
kind: ClusterSecretStore
target:
name: droppedneedle-secret
creationPolicy: Owner
data:
- secretKey: SERVICE_USER
remoteRef:
key: dropped-needle
property: service-user
- secretKey: SERVICE_PASS
remoteRef:
key: dropped-needle
property: service-password

View file

@ -0,0 +1,66 @@
# Note: This service changed name from musicseerr to droppedneedle
# PVC names are immutable, so just keeping the old names
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: musicseerr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 3Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: musicseerr-cache-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 3Gi
---
# For use by the transcoding service
apiVersion: v1
kind: PersistentVolume
metadata:
name: droppedneedle-transcode-pv
spec:
capacity:
storage: 3Ti
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-raid
local:
path: /mnt/raid/yarr/media/music
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- robin
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: droppedneedle-transcode-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-raid
resources:
requests:
storage: 3Ti

View file

@ -6,27 +6,34 @@ metadata:
data: data:
transcode.sh: | transcode.sh: |
#!/bin/bash #!/bin/bash
WATCH_DIR="/yarr/media/music" WATCH_DIR="/music"
echo "Starting transcoder watch on $WATCH_DIR..." echo "Starting transcoder watch on $WATCH_DIR..."
# Listen for files moved into the directory (atomic renames) and direct writes
inotifywait -m -r -e moved_to,close_write --format '%w%f' "$WATCH_DIR" | while read FILE inotifywait -m -r -e moved_to,close_write --format '%w%f' "$WATCH_DIR" | while read FILE
do do
# Case-insensitive check for .flac extension
if [[ "${FILE,,}" == *.flac ]]; then if [[ "${FILE,,}" == *.flac ]]; then
echo "Detected new FLAC via import: $FILE" echo "Detected new FLAC via import: $FILE"
OPUS_FILE="${FILE%.*}.opus" OPUS_FILE="${FILE%.*}.opus"
# Transcode (preserves tags natively in newer ffmpeg versions)
ffmpeg -y -i "$FILE" -acodec libopus -ac 2 -ab 160k "$OPUS_FILE" ffmpeg -y -i "$FILE" -acodec libopus -ac 2 -ab 160k "$OPUS_FILE"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "Transcode successful. Removing original FLAC..." echo "Transcode successful. Removing original FLAC..."
rm "$FILE" rm "$FILE"
echo "Triggering DroppedNeedle library scan..." echo "Triggering authenticated DroppedNeedle library scan..."
# Calls the DroppedNeedle service using internal Kubernetes DNS # 1. Authenticate and save the session cookie to a temporary jar
curl -X POST http://droppedneedle.default.svc.cluster.local:8688/api/v1/library/scan/start curl -s -X POST http://droppedneedle.default.svc.cluster.local:80/api/v1/auth/login \
-H "Content-Type: application/json" \
-d "{\"username\": \"$SERVICE_USER\", \"password\": \"$SERVICE_PASS\"}" \
-c /tmp/dn_cookies.txt
# 2. Trigger the scan using the saved session cookie
curl -s -X POST http://droppedneedle.default.svc.cluster.local:80/api/v1/library/scan/start \
-b /tmp/dn_cookies.txt
# 3. Clean up the cookie jar
rm /tmp/dn_cookies.txt
else else
echo "Error: FFmpeg transcode failed for $FILE" echo "Error: FFmpeg transcode failed for $FILE"
fi fi
@ -36,10 +43,11 @@ data:
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels:
app: droppedneedle-transcoder
name: droppedneedle-transcoder name: droppedneedle-transcoder
namespace: default annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -50,23 +58,27 @@ spec:
labels: labels:
app: droppedneedle-transcoder app: droppedneedle-transcoder
spec: spec:
nodeSelector:
kubernetes.io/hostname: robin
containers: containers:
- name: transcoder - name: transcoder
image: alpine:latest image: alpine:latest
command: ["/bin/sh", "-c"] command: ["/bin/sh", "-c"]
args: args:
- "apk add --no-cache bash inotify-tools ffmpeg curl && bash /scripts/transcode.sh" - "apk add --no-cache bash inotify-tools ffmpeg curl && bash /scripts/transcode.sh"
envFrom:
- secretRef:
name: droppedneedle-secret
volumeMounts: volumeMounts:
- mountPath: /yarr - mountPath: /music
name: yarr name: yarr
- mountPath: /scripts - mountPath: /scripts
name: script-volume name: script-volume
restartPolicy: Always restartPolicy: Always
volumes: volumes:
- name: yarr - name: yarr
nfs: persistentVolumeClaim:
server: robin.home.nest claimName: droppedneedle-transcode-pvc
path: /yarr
- name: script-volume - name: script-volume
configMap: configMap:
name: droppedneedle-transcoder-script name: droppedneedle-transcoder-script

View file

@ -1,24 +1,20 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: flaresolverr
name: flaresolverr name: flaresolverr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: flaresolverr app: flaresolverr
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: flaresolverr app: flaresolverr
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: flaresolverr
name: flaresolverr name: flaresolverr
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: flaresolverr targetPort: flaresolverr
selector: selector:
io.kompose.service: flaresolverr app: flaresolverr

View file

@ -2,6 +2,10 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: foundry-vtt name: foundry-vtt
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -41,18 +45,3 @@ spec:
- name: foundry-vtt-volume - name: foundry-vtt-volume
persistentVolumeClaim: persistentVolumeClaim:
claimName: foundry-vtt-data-pvc claimName: foundry-vtt-data-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: foundry-vtt-data-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 10Gi

View file

@ -6,7 +6,6 @@ metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.middlewares: security-auth-foundryvtt@kubernetescrd
spec: spec:
ingressClassName: traefik ingressClassName: traefik
tls: tls:
@ -24,29 +23,3 @@ spec:
name: foundry-vtt name: foundry-vtt
port: port:
name: http-web name: http-web
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: foundry-auth-ingress
namespace: security # MOVED TO SECURITY NAMESPACE
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
ingressClassName: traefik
tls:
- hosts:
- foundry.mynest.love
secretName: foundry-vtt-tls
rules:
- host: foundry.mynest.love
http:
paths:
- path: /oauth2
pathType: Prefix
backend:
service:
name: oauth2-proxy-foundryvtt
port:
number: 4180

View file

@ -1,86 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: foundryvtt-proxy-foundryvtt
namespace: security
spec:
replicas: 1
selector:
matchLabels:
app: oauth2-proxy-foundryvtt
template:
metadata:
labels:
app: oauth2-proxy-foundryvtt
spec:
containers:
- name: oauth2-proxy
image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
envFrom:
- secretRef:
name: foundry-oauth-secrets
args:
- "--provider=oidc"
- "--oidc-issuer-url=https://sso.mynest.love/realms/nest"
- "--oidc-groups-claim=groups"
- "--redirect-url=https://foundry.mynest.love/oauth2/callback"
- "--email-domain=*"
- "--allowed-group=foundryvtt"
- "--skip-provider-button=true"
- "--cookie-secure=true"
- "--cookie-domain=foundry.mynest.love"
- "--http-address=0.0.0.0:4180"
- "--reverse-proxy=true"
- "--upstream=static://200"
- "--whitelist-domain=foundry.mynest.love"
ports:
- containerPort: 4180
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: foundry-oauth-secrets
namespace: security
spec:
refreshInterval: "1h"
secretStoreRef:
name: vault-external-secrets-store
kind: ClusterSecretStore
target:
name: foundry-oauth-secrets
creationPolicy: Owner
data:
- secretKey: OAUTH2_PROXY_CLIENT_ID
remoteRef:
key: oauth2-proxy/foundryvtt
property: client-id
- secretKey: OAUTH2_PROXY_CLIENT_SECRET
remoteRef:
key: oauth2-proxy/foundryvtt
property: client-secret
- secretKey: OAUTH2_PROXY_COOKIE_SECRET
remoteRef:
key: oauth2-proxy/foundryvtt
property: cookie-secret
---
apiVersion: v1
kind: Service
metadata:
name: oauth2-proxy-foundryvtt
namespace: security
spec:
ports:
- port: 4180
targetPort: 4180
selector:
app: oauth2-proxy-foundryvtt
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: auth-foundryvtt
namespace: security
spec:
forwardAuth:
address: "http://oauth2-proxy-foundryvtt.security.svc.cluster.local:4180"
trustForwardHeader: true

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: foundry-vtt-data-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 10Gi

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-jellyfin.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: jellyfin
name: jellyfin name: jellyfin
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: jellyfin app: jellyfin
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-jellyfin.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: jellyfin app: jellyfin
spec: spec:
containers: containers:
- env: - env:
@ -53,33 +49,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/media path: /yarr/media
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 3Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-cache-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 3Gi

View file

@ -1,9 +1,7 @@
# Note: This service changed name from musicseerr to droppedneedle
# PVC names are immutable, so just keeping the old names
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: musicseerr-config-pvc name: jellyfin-config-pvc
labels: labels:
recurring-job.longhorn.io/source: "enabled" recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled" recurring-job-group.longhorn.io/app-config-group: "enabled"
@ -18,7 +16,7 @@ spec:
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: musicseerr-cache-pvc name: jellyfin-cache-pvc
labels: labels:
recurring-job.longhorn.io/source: "enabled" recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled" recurring-job-group.longhorn.io/app-config-group: "enabled"

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-jellyfin.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: jellyfin
name: jellyfin name: jellyfin
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: jellyfin app: jellyfin

View file

@ -5,7 +5,7 @@ metadata:
namespace: security namespace: security
labels: labels:
recurring-job.longhorn.io/source: "enabled" recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/critical-data: "enabled" recurring-job-group.longhorn.io/app-config-group: "enabled"
spec: spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
storageClassName: "longhorn" storageClassName: "longhorn"

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: prowlarr
name: prowlarr name: prowlarr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: prowlarr app: prowlarr
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: prowlarr app: prowlarr
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: prowlarr
name: prowlarr name: prowlarr
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: prowlarr app: prowlarr

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: radarr-anime
name: radarr-anime name: radarr-anime
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: radarr-anime app: radarr-anime
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: radarr-anime app: radarr-anime
spec: spec:
containers: containers:
- env: - env:
@ -56,18 +52,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-anime-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-anime-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: radarr-anime
name: radarr-anime name: radarr-anime
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: radarr-anime app: radarr-anime

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: radarr
name: radarr name: radarr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: radarr app: radarr
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: radarr app: radarr
spec: spec:
containers: containers:
- env: - env:
@ -56,18 +52,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: radarr
name: radarr name: radarr
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: radarr app: radarr

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sabnzbd
name: sabnzbd name: sabnzbd
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: sabnzbd app: sabnzbd
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: sabnzbd app: sabnzbd
spec: spec:
containers: containers:
- env: - env:
@ -50,18 +46,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sabnzbd-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 50Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sabnzbd-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 50Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sabnzbd
name: sabnzbd name: sabnzbd
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: sabnzbd app: sabnzbd

View file

@ -1,9 +1,11 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels:
app: seerr
name: seerr name: seerr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:

View file

@ -2,9 +2,10 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: shelfmark name: shelfmark
namespace: default
annotations: annotations:
reloader.stakater.com/auto: "true" keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
strategy: strategy:

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: slskd
name: slskd name: slskd
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: slskd app: slskd
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: slskd app: slskd
spec: spec:
containers: containers:
- env: - env:

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: slskd
name: slskd name: slskd
spec: spec:
type: ClusterIP type: ClusterIP
@ -17,4 +12,4 @@ spec:
port: 81 port: 81
targetPort: slskd-listen targetPort: slskd-listen
selector: selector:
io.kompose.service: slskd app: slskd

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sonarr-anime
name: sonarr-anime name: sonarr-anime
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: sonarr-anime app: sonarr-anime
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: sonarr-anime app: sonarr-anime
spec: spec:
containers: containers:
- env: - env:
@ -56,18 +52,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-anime-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 200Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-anime-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 200Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sonarr-anime
name: sonarr-anime name: sonarr-anime
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: sonarr-anime app: sonarr-anime

View file

@ -1,26 +1,22 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sonarr
name: sonarr name: sonarr
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: sonarr app: sonarr
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: sonarr app: sonarr
spec: spec:
containers: containers:
- env: - env:
@ -56,18 +52,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/downloads path: /yarr/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 150Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose-yarr.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: sonarr
name: sonarr name: sonarr
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
io.kompose.service: sonarr app: sonarr

View file

@ -2,6 +2,10 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: tdarr-server name: tdarr-server
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -62,6 +66,10 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: tdarr-node-cpu name: tdarr-node-cpu
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
replicas: 1 replicas: 1
selector: selector:

View file

@ -2,6 +2,9 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: tdarr-config-pvc name: tdarr-config-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
@ -14,6 +17,9 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: tdarr-cache-rwx name: tdarr-cache-rwx
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec: spec:
accessModes: accessModes:
- ReadWriteMany - ReadWriteMany
@ -26,6 +32,9 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: tdarr-db-pvc name: tdarr-db-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View file

@ -1,25 +1,21 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: vaultwarden
name: vaultwarden name: vaultwarden
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec: spec:
selector: selector:
matchLabels: matchLabels:
io.kompose.service: vaultwarden app: vaultwarden
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose.yaml
kompose.version: 1.38.0 (HEAD)
labels: labels:
io.kompose.service: vaultwarden app: vaultwarden
spec: spec:
containers: containers:
- env: - env:
@ -44,18 +40,3 @@ spec:
- name: vaultwarden-volume - name: vaultwarden-volume
persistentVolumeClaim: persistentVolumeClaim:
claimName: vaultwarden-data-pvc claimName: vaultwarden-data-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vaultwarden-data-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 40Mi

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vaultwarden-data-pvc
labels:
recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled"
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 40Mi

View file

@ -1,11 +1,6 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations:
kompose.cmd: kompose convert -f compose.yaml
kompose.version: 1.38.0 (HEAD)
labels:
io.kompose.service: vaultwarden
name: vaultwarden name: vaultwarden
spec: spec:
type: ClusterIP type: ClusterIP
@ -14,4 +9,4 @@ spec:
port: 80 port: 80
targetPort: http targetPort: http
selector: selector:
io.kompose.service: vaultwarden app: vaultwarden