Compare commits
216 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 206d7db243 | |||
| 2e659f25f7 | |||
| ee6b842d84 | |||
| 99c9017828 | |||
| 2b333cae6d | |||
| eea9df13a3 | |||
| 9f86feeda3 | |||
| f1d33eb361 | |||
| afb6e51af1 | |||
| 239eccd6de | |||
| 5e31230893 | |||
| afb527a78a | |||
| 260582c2b1 | |||
| a7328576c9 | |||
| 3fc29ffe21 | |||
| a2baeae50c | |||
| 9bb53b1c3d | |||
| 1f9ebcb16a | |||
| b4ea55d509 | |||
| 5bc62cae9f | |||
| 02a195233a | |||
| 017fbd8959 | |||
| 12c7400a5f | |||
| 6d76314845 | |||
| 052f2009ec | |||
| b5d7329058 | |||
| 9176edf792 | |||
| b79f1dd5c9 | |||
| b5e5a89250 | |||
| 5fb6ea94f7 | |||
| faa6fbf85c | |||
| 039a627570 | |||
| 3140614f33 | |||
| 84aab731b6 | |||
| d2eacb963e | |||
| 307458b5e8 | |||
| db26e61aff | |||
| e27c223916 | |||
| e6b8278268 | |||
| 927e05117f | |||
| e2065209ab | |||
| a32ed1357b | |||
| 6faff51c5a | |||
| 0dbbbb4939 | |||
| b301404466 | |||
| 5530389cee | |||
| 9bec08d436 | |||
| 07dad5df3c | |||
| 5a670f58ae | |||
| 376daefc9f | |||
| 156df65656 | |||
| 9c9ddab80d | |||
| 24449699eb | |||
| 93ee00cfad | |||
| 8a45a906f5 | |||
| 349a951607 | |||
| ad4aa44ae8 | |||
| e03e66b7ac | |||
| d030ea8629 | |||
| f968b77da4 | |||
| 95b6d62075 | |||
| 9e5f6f637b | |||
| eb19f1f7bc | |||
| e82110871f | |||
| ad50b521b5 | |||
| 9c6ae5bba6 | |||
| 12d8ee0414 | |||
| ebb12d26af | |||
| c07a019b1a | |||
| 1c883cf071 | |||
| ca5e3f4638 | |||
| f59bc33039 | |||
| 8a6d17c366 | |||
| d552a2b03a | |||
| f489715864 | |||
| 2a90fa8c53 | |||
| efb5abae5e | |||
| 72194bf59f | |||
| 7402e16cf4 | |||
| 6f560c8c68 | |||
| e29c00cae0 | |||
| 81481bf274 | |||
| e88ee7c408 | |||
| 47368da4e3 | |||
| a4db5a303d | |||
| 294fe564da | |||
| e39182ecbf | |||
| f881ff31dc | |||
| dddd39e385 | |||
| bf88086a3d | |||
| df571132b7 | |||
| c4684fb0cf | |||
| 7217c9c9bf | |||
| 406b643aaf | |||
| 5cbb25af84 | |||
| efd3ccf0da | |||
| 742cdf485f | |||
| 28f608f0a1 | |||
| 6eaa4ea56f | |||
| bdff8fa7f1 | |||
| 5fd18fd952 | |||
| 8ceed3a660 | |||
| 088854fb98 | |||
| 5b3cd9145a | |||
| 0b4614f03b | |||
| 4803fb2acc | |||
| 1652b56287 | |||
| 9031a97bf9 | |||
| c645233fe4 | |||
| 256db3f6ad | |||
| 149d883b8a | |||
| 0049a65d61 | |||
| 20fa2bc6fb | |||
| 3da23d5a39 | |||
| 861999433a | |||
| c605efa2d9 | |||
| 48ba9f258c | |||
| e9e929f103 | |||
| 781496c02f | |||
| b9ea102375 | |||
| 241a4f4241 | |||
| fe3ae675c8 | |||
| df4ea9ec06 | |||
| ed1becbf5f | |||
| 608e6776ce | |||
| da1315ce87 | |||
| ad014ea92e | |||
| 3cec68fdae | |||
| 0a87cf8a50 | |||
| fb670a1e64 | |||
| d7f4545de5 | |||
| b825855497 | |||
| 935906c256 | |||
| 1dae3e4618 | |||
| ab6adebfb5 | |||
| d763511a8a | |||
| e35f4d22f9 | |||
| 7829189b3a | |||
| 104fcf5eca | |||
| 58980c72ee | |||
| 4e58b30418 | |||
| 0045292277 | |||
| da5faa78f9 | |||
| 9bc3d2fe60 | |||
| 65cfcf17ce | |||
| e27aef4304 | |||
| 080a189397 | |||
| 75b5ca4f0e | |||
| 96fe445998 | |||
| c7bdc4a4ac | |||
| 910aae7b46 | |||
| 2a92c5a371 | |||
| 01eb2ad04d | |||
| c5eb76601e | |||
| 9cc349466a | |||
| 1a8d36eeb7 | |||
| d35f234c14 | |||
| a2eddee64e | |||
| 5aa3e9361c | |||
| cc8e6a8703 | |||
| 82848e37d6 | |||
| b3dbc88e04 | |||
| 440d7bae96 | |||
| af493fb726 | |||
| 4d8e974632 | |||
| ee32969622 | |||
| 0f18dec449 | |||
| 48885e73b5 | |||
| e032650eab | |||
| 295168bbde | |||
| d518b7866f | |||
| 06405cc08f | |||
| ecb9edb3c8 | |||
| 9dc53835d3 | |||
| 418e32e4eb | |||
| 21c7856bbd | |||
| 501913ad5f | |||
| 14f2e6bd99 | |||
| 53e8a505bd | |||
| 2d8cc39df2 | |||
| 9b9c164312 | |||
| 0f9575042c | |||
| 7088256cf4 | |||
| faa45e87da | |||
| 142911c8d2 | |||
| aef5f9b702 | |||
| 16e2b4e9b2 | |||
| b3527c2b16 | |||
| 5fe154d80d | |||
| b0042e5510 | |||
| cb1b83907b | |||
| 116a118b0b | |||
| 1a274c625b | |||
| f8f180566e | |||
| 8ed5a211ba | |||
| f69fc01fd1 | |||
| 94fbc325d4 | |||
| d7114b159e | |||
| a185abe525 | |||
| 2a66adfd69 | |||
| 4684bc1fca | |||
| 839045b831 | |||
| ce984792cc | |||
| 0f88fa4953 | |||
| 8c088c2008 | |||
| ec8369cfc9 | |||
| 39f87dfcdd | |||
| 4d928cac0b | |||
| 82fa0b71ab | |||
| f8d61d0f1c | |||
| 51718a46dc | |||
| 5b8af9c537 | |||
| 462eebad61 | |||
| 81fc72b3eb | |||
| b5f7f2bd50 | |||
| 4ff6f4de76 |
@@ -0,0 +1,58 @@
|
||||
name: Validate Manifests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install kubeconform
|
||||
run: |
|
||||
curl -sL https://github.com/yannh/kubeconform/releases/download/v0.6.7/kubeconform-linux-amd64.tar.gz \
|
||||
| tar xz -C /usr/local/bin
|
||||
chmod +x /usr/local/bin/kubeconform
|
||||
|
||||
- name: Schema validation (kubeconform)
|
||||
run: |
|
||||
find . -name '*.yaml' -o -name '*.yml' \
|
||||
| grep -v '\.gitea/' \
|
||||
| sort \
|
||||
| xargs kubeconform \
|
||||
-strict \
|
||||
-ignore-missing-schemas \
|
||||
-kubernetes-version 1.30.0 \
|
||||
-summary
|
||||
|
||||
- name: Install kubectl
|
||||
run: |
|
||||
K8S_VER=$(curl -sL https://dl.k8s.io/release/stable.txt)
|
||||
curl -sLO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/amd64/kubectl"
|
||||
chmod +x kubectl && mv kubectl /usr/local/bin/kubectl
|
||||
|
||||
- name: Server-side dry-run (CRD existence check)
|
||||
env:
|
||||
KUBECONFIG_DATA: ${{ secrets.KUBECONFIG }}
|
||||
run: |
|
||||
echo "$KUBECONFIG_DATA" | base64 -d > /tmp/kube.yaml
|
||||
# Apply all YAML files in sorted order — server-side dry-run rejects
|
||||
# any apiVersion/Kind whose CRD is not installed in the cluster.
|
||||
find . -name '*.yaml' -o -name '*.yml' \
|
||||
| grep -v '\.gitea/' \
|
||||
| sort \
|
||||
| xargs -I{} kubectl apply \
|
||||
--dry-run=server \
|
||||
--kubeconfig /tmp/kube.yaml \
|
||||
-f {} 2>&1 \
|
||||
| tee /tmp/dryrun.log
|
||||
rm -f /tmp/kube.yaml
|
||||
# Fail if any "no kind is registered" or "no matches for kind" errors
|
||||
if grep -qE "no kind is registered|no matches for kind|unknown field" /tmp/dryrun.log; then
|
||||
echo "❌ Dry-run found unknown resources or fields — manifests reference CRDs not installed in the cluster"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ All manifests passed server-side dry-run"
|
||||
@@ -0,0 +1,46 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: bazarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: bazarr
|
||||
spec:
|
||||
containers:
|
||||
- name: bazarr
|
||||
image: ghcr.io/linuxserver/bazarr:develop
|
||||
ports:
|
||||
- containerPort: 6767
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: bazarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- bazarr.khalisio.com
|
||||
secretName: bazarr-tls
|
||||
rules:
|
||||
- host: bazarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: bazarr
|
||||
port:
|
||||
number: 6767
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: bazarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 2Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: bazarr
|
||||
ports:
|
||||
- port: 6767
|
||||
targetPort: 6767
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,49 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: emby
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: emby
|
||||
spec:
|
||||
containers:
|
||||
- name: emby
|
||||
image: ghcr.io/linuxserver/emby:latest
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8096
|
||||
- name: https
|
||||
containerPort: 8920
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 1Gi
|
||||
limits:
|
||||
cpu: 4000m
|
||||
memory: 4Gi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: emby-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- emby.khalisio.com
|
||||
secretName: emby-tls
|
||||
rules:
|
||||
- host: emby.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: emby
|
||||
port:
|
||||
number: 8096
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: emby-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: media-data
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Gi
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: emby
|
||||
ports:
|
||||
- name: http
|
||||
port: 8096
|
||||
targetPort: 8096
|
||||
protocol: TCP
|
||||
- name: https
|
||||
port: 8920
|
||||
targetPort: 8920
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,29 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: excalidraw
|
||||
namespace: apps
|
||||
labels:
|
||||
app: excalidraw
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: excalidraw
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: excalidraw
|
||||
spec:
|
||||
containers:
|
||||
- name: excalidraw
|
||||
image: excalidraw/excalidraw:latest
|
||||
ports:
|
||||
- containerPort: 80
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: excalidraw
|
||||
namespace: apps
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- excalidraw.khalisio.com
|
||||
secretName: excalidraw-tls
|
||||
rules:
|
||||
- host: excalidraw.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: excalidraw
|
||||
port:
|
||||
number: 80
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: excalidraw
|
||||
namespace: apps
|
||||
spec:
|
||||
selector:
|
||||
app: excalidraw
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 80
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,46 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: lidarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: lidarr
|
||||
spec:
|
||||
containers:
|
||||
- name: lidarr
|
||||
image: ghcr.io/linuxserver/lidarr:develop
|
||||
ports:
|
||||
- containerPort: 8686
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 1Gi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: lidarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- lidarr.khalisio.com
|
||||
secretName: lidarr-tls
|
||||
rules:
|
||||
- host: lidarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: lidarr
|
||||
port:
|
||||
number: 8686
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: lidarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: lidarr
|
||||
ports:
|
||||
- port: 8686
|
||||
targetPort: 8686
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: bazarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: bazarr
|
||||
spec:
|
||||
containers:
|
||||
- name: bazarr
|
||||
image: lscr.io/linuxserver/bazarr:latest
|
||||
ports:
|
||||
- containerPort: 6767
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
- name: podcasts
|
||||
mountPath: /podcasts
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: bazarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
- name: podcasts
|
||||
persistentVolumeClaim:
|
||||
claimName: bazarr-podcasts
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- bazarr.khalisio.com
|
||||
secretName: bazarr-tls
|
||||
rules:
|
||||
- host: bazarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: bazarr
|
||||
port:
|
||||
number: 6767
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: bazarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: bazarr
|
||||
ports:
|
||||
- port: 6767
|
||||
targetPort: 6767
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,40 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: emby
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: emby
|
||||
spec:
|
||||
containers:
|
||||
- name: emby
|
||||
image: lscr.io/linuxserver/emby:latest
|
||||
ports:
|
||||
- containerPort: 8096
|
||||
- containerPort: 8920
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: emby-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- emby.khalisio.com
|
||||
secretName: emby-tls
|
||||
rules:
|
||||
- host: emby.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: emby
|
||||
port:
|
||||
number: 8096
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: emby
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: emby
|
||||
ports:
|
||||
- port: 8096
|
||||
targetPort: 8096
|
||||
protocol: TCP
|
||||
- port: 8920
|
||||
targetPort: 8920
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: lidarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: lidarr
|
||||
spec:
|
||||
containers:
|
||||
- name: lidarr
|
||||
image: lscr.io/linuxserver/lidarr:latest
|
||||
ports:
|
||||
- containerPort: 8686
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
- name: downloads
|
||||
mountPath: /downloads
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: lidarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
- name: downloads
|
||||
persistentVolumeClaim:
|
||||
claimName: lidarr-downloads
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- lidarr.khalisio.com
|
||||
secretName: lidarr-tls
|
||||
rules:
|
||||
- host: lidarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: lidarr
|
||||
port:
|
||||
number: 8686
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: lidarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: lidarr
|
||||
ports:
|
||||
- port: 8686
|
||||
targetPort: 8686
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: media-data
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 500Gi
|
||||
storageClassName: longhorn
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: media
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: orion
|
||||
@@ -0,0 +1,34 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: prowlarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: prowlarr
|
||||
spec:
|
||||
containers:
|
||||
- name: prowlarr
|
||||
image: lscr.io/linuxserver/prowlarr:latest
|
||||
ports:
|
||||
- containerPort: 9696
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: prowlarr-config
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- prowlarr.khalisio.com
|
||||
secretName: prowlarr-tls
|
||||
rules:
|
||||
- host: prowlarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: prowlarr
|
||||
port:
|
||||
number: 9696
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: prowlarr
|
||||
ports:
|
||||
- port: 9696
|
||||
targetPort: 9696
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: radarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: radarr
|
||||
spec:
|
||||
containers:
|
||||
- name: radarr
|
||||
image: lscr.io/linuxserver/radarr:latest
|
||||
ports:
|
||||
- containerPort: 7878
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
- name: downloads
|
||||
mountPath: /downloads
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: radarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
- name: downloads
|
||||
persistentVolumeClaim:
|
||||
claimName: radarr-downloads
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- radarr.khalisio.com
|
||||
secretName: radarr-tls
|
||||
rules:
|
||||
- host: radarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: radarr
|
||||
port:
|
||||
number: 7878
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: radarr
|
||||
ports:
|
||||
- port: 7878
|
||||
targetPort: 7878
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: readarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: readarr
|
||||
spec:
|
||||
containers:
|
||||
- name: readarr
|
||||
image: lscr.io/linuxserver/readarr:develop
|
||||
ports:
|
||||
- containerPort: 8787
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: books
|
||||
mountPath: /books
|
||||
- name: downloads
|
||||
mountPath: /downloads
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: readarr-config
|
||||
- name: books
|
||||
persistentVolumeClaim:
|
||||
claimName: readarr-books
|
||||
- name: downloads
|
||||
persistentVolumeClaim:
|
||||
claimName: readarr-downloads
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- readarr.khalisio.com
|
||||
secretName: readarr-tls
|
||||
rules:
|
||||
- host: readarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: readarr
|
||||
port:
|
||||
number: 8787
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: readarr
|
||||
ports:
|
||||
- port: 8787
|
||||
targetPort: 8787
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: sonarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: sonarr
|
||||
spec:
|
||||
containers:
|
||||
- name: sonarr
|
||||
image: lscr.io/linuxserver/sonarr:develop
|
||||
ports:
|
||||
- containerPort: 8989
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: "America/New_York"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
- name: downloads
|
||||
mountPath: /downloads
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: sonarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
- name: downloads
|
||||
persistentVolumeClaim:
|
||||
claimName: sonarr-downloads
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- sonarr.khalisio.com
|
||||
secretName: sonarr-tls
|
||||
rules:
|
||||
- host: sonarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: sonarr
|
||||
port:
|
||||
number: 8989
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: sonarr
|
||||
ports:
|
||||
- port: 8989
|
||||
targetPort: 8989
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: media
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: orion
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: apps
|
||||
labels:
|
||||
name: apps
|
||||
@@ -0,0 +1,41 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: prowlarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: prowlarr
|
||||
spec:
|
||||
containers:
|
||||
- name: prowlarr
|
||||
image: ghcr.io/linuxserver/prowlarr:develop
|
||||
ports:
|
||||
- containerPort: 9696
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: prowlarr-config
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- prowlarr.khalisio.com
|
||||
secretName: prowlarr-tls
|
||||
rules:
|
||||
- host: prowlarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: prowlarr
|
||||
port:
|
||||
number: 9696
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: prowlarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 2Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: prowlarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: prowlarr
|
||||
ports:
|
||||
- port: 9696
|
||||
targetPort: 9696
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,46 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: radarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: radarr
|
||||
spec:
|
||||
containers:
|
||||
- name: radarr
|
||||
image: ghcr.io/linuxserver/radarr:develop
|
||||
ports:
|
||||
- containerPort: 7878
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 1Gi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: radarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- radarr.khalisio.com
|
||||
secretName: radarr-tls
|
||||
rules:
|
||||
- host: radarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: radarr
|
||||
port:
|
||||
number: 7878
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: radarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: radarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: radarr
|
||||
ports:
|
||||
- port: 7878
|
||||
targetPort: 7878
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,46 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: readarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: readarr
|
||||
spec:
|
||||
containers:
|
||||
- name: readarr
|
||||
image: ghcr.io/linuxserver/readarr:develop
|
||||
ports:
|
||||
- containerPort: 8787
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: readarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- readarr.khalisio.com
|
||||
secretName: readarr-tls
|
||||
rules:
|
||||
- host: readarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: readarr
|
||||
port:
|
||||
number: 8787
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: readarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 2Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: readarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: readarr
|
||||
ports:
|
||||
- port: 8787
|
||||
targetPort: 8787
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,46 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: sonarr
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: sonarr
|
||||
spec:
|
||||
containers:
|
||||
- name: sonarr
|
||||
image: ghcr.io/linuxserver/sonarr:develop
|
||||
ports:
|
||||
- containerPort: 8989
|
||||
env:
|
||||
- name: PUID
|
||||
value: "1000"
|
||||
- name: PGID
|
||||
value: "1000"
|
||||
- name: TZ
|
||||
value: UTC
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /config
|
||||
- name: media
|
||||
mountPath: /media
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 1Gi
|
||||
volumes:
|
||||
- name: config
|
||||
persistentVolumeClaim:
|
||||
claimName: sonarr-config
|
||||
- name: media
|
||||
persistentVolumeClaim:
|
||||
claimName: media-data
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
tls:
|
||||
- hosts:
|
||||
- sonarr.khalisio.com
|
||||
secretName: sonarr-tls
|
||||
rules:
|
||||
- host: sonarr.khalisio.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: sonarr
|
||||
port:
|
||||
number: 8989
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: sonarr-config
|
||||
namespace: media
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: longhorn
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sonarr
|
||||
namespace: media
|
||||
spec:
|
||||
selector:
|
||||
app: sonarr
|
||||
ports:
|
||||
- port: 8989
|
||||
targetPort: 8989
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: tailscale-auth
|
||||
namespace: tailscale
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: orion-vault
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: tailscale-auth
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: TS_AUTH_KEY
|
||||
remoteRef:
|
||||
key: Talos Cluster/tailscale
|
||||
property: TS_AUTH_KEY
|
||||
@@ -2,5 +2,3 @@ apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: tailscale
|
||||
labels:
|
||||
app.kubernetes.io/name: tailscale
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets", "configmaps", "services", "pods", "endpoints"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||
- apiGroups: ["apps"]
|
||||
resources: ["deployments", "statefulsets", "daemonsets"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||
- apiGroups: ["tailscale.com"]
|
||||
resources: ["*"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: tailscale-operator
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: tailscale-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
serviceAccountName: tailscale-operator
|
||||
containers:
|
||||
- name: operator
|
||||
image: ghcr.io/tailscale/k8s-operator:v1.78.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: CLIENT_ID_FILE
|
||||
value: /etc/tailscale/oauth/client-id
|
||||
- name: CLIENT_SECRET_FILE
|
||||
value: /etc/tailscale/oauth/client-secret
|
||||
volumeMounts:
|
||||
- name: oauth-secret
|
||||
mountPath: /etc/tailscale/oauth
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: oauth-secret
|
||||
secret:
|
||||
secretName: tailscale-operator-secret
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: tailscale-operator-secret
|
||||
namespace: tailscale
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: orion-vault
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: tailscale-operator-secret
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: client-id
|
||||
remoteRef:
|
||||
key: tailscale/operator
|
||||
property: CLIENT_ID_FILE
|
||||
- secretKey: client-secret
|
||||
remoteRef:
|
||||
key: tailscale/operator
|
||||
property: CLIENT_SECRET_FILE
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
@@ -1,34 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app.kubernetes.io/name: tailscale-operator
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: tailscale-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: tailscale-operator
|
||||
spec:
|
||||
serviceAccountName: tailscale-operator
|
||||
containers:
|
||||
- name: operator
|
||||
image: ghcr.io/tailscale/kubernetes-operator:v1.70.1
|
||||
env:
|
||||
- name: TS_AUTH_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: tailscale-auth
|
||||
key: TS_AUTH_KEY
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
@@ -1,36 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
rules:
|
||||
- apiGroups: ["apps"]
|
||||
resources: ["deployments", "statefulsets", "daemonsets"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "endpoints"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["policy.tailscale.com"]
|
||||
resources: ["tailnets", "tailscales"]
|
||||
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
||||
- apiGroups: ["policy.tailscale.com"]
|
||||
resources: ["tailnets/status", "tailscales/status"]
|
||||
verbs: ["get", "update", "patch"]
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: tailscale-operator
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
@@ -1,9 +0,0 @@
|
||||
apiVersion: policy.tailscale.com/v1alpha1
|
||||
kind: Tailnet
|
||||
metadata:
|
||||
name: default
|
||||
namespace: tailscale
|
||||
spec:
|
||||
tagAuths:
|
||||
- tag: k8s-tailscale-operator
|
||||
approved: true
|
||||
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: tailscale-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
serviceAccountName: tailscale-operator
|
||||
containers:
|
||||
- name: operator
|
||||
image: ghcr.io/tailscale/k8s-operator:v1.78.3
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: CLIENT_ID_FILE
|
||||
value: /etc/tailscale/operator/client-id
|
||||
- name: CLIENT_SECRET_FILE
|
||||
value: /etc/tailscale/operator/client-secret
|
||||
volumeMounts:
|
||||
- name: operator-secret
|
||||
mountPath: /etc/tailscale/operator
|
||||
readOnly: true
|
||||
resources: {}
|
||||
volumes:
|
||||
- name: operator-secret
|
||||
secret:
|
||||
secretName: tailscale-operator-secret
|
||||
@@ -0,0 +1,42 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: tailscale-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
serviceAccountName: tailscale-operator
|
||||
containers:
|
||||
- name: operator
|
||||
image: ghcr.io/tailscale/k8s-operator:v1.78.3
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: TS_CLIENT_ID_FILE
|
||||
value: /etc/tailscale/oauth/client-id
|
||||
- name: TS_CLIENT_SECRET_FILE
|
||||
value: /etc/tailscale/oauth/client-secret
|
||||
volumeMounts:
|
||||
- name: oauth-secret
|
||||
mountPath: /etc/tailscale/oauth
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: oauth-secret
|
||||
secret:
|
||||
secretName: tailscale-operator-secret
|
||||
@@ -0,0 +1,42 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tailscale-operator
|
||||
namespace: tailscale
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: tailscale-operator
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: tailscale-operator
|
||||
spec:
|
||||
serviceAccountName: tailscale-operator
|
||||
containers:
|
||||
- name: operator
|
||||
image: ghcr.io/tailscale/k8s-operator:v1.78.3
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: TS_CLIENT_ID_FILE
|
||||
value: /etc/tailscale/oauth/client-id
|
||||
- name: TS_CLIENT_SECRET_FILE
|
||||
value: /etc/tailscale/oauth/client-secret
|
||||
volumeMounts:
|
||||
- name: oauth-secret
|
||||
mountPath: /etc/tailscale/oauth
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: oauth-secret
|
||||
secret:
|
||||
secretName: tailscale-operator-secret
|
||||
@@ -1 +0,0 @@
|
||||
hello: world
|
||||
Reference in New Issue
Block a user