Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12b14ca9d4 | ||
|
|
ad5b5c6bb1 | ||
|
|
64aa2da745 | ||
|
|
b18c3175aa | ||
|
|
164d31efa7 | ||
|
|
5c129570da | ||
|
|
d9016105ed | ||
|
|
04ab8f9407 | ||
|
|
237f6d5bad | ||
|
|
3e7605d65e | ||
|
|
b582699d21 | ||
|
|
140198f513 | ||
|
|
66dae6b74b | ||
|
|
7b367fb8a1 |
@@ -1,12 +1,22 @@
|
|||||||
# Initial setup
|
# Setup Instructions
|
||||||
```sh
|
|
||||||
# Create namespace
|
## Pre-installation
|
||||||
|
|
||||||
|
1. Create namespaces with
|
||||||
|
```bash
|
||||||
kubectl apply -f bootstrap/namespaces.yaml
|
kubectl apply -f bootstrap/namespaces.yaml
|
||||||
|
```
|
||||||
|
|
||||||
# Install ArgoCD
|
2. Apply Vaultwarden deployment app
|
||||||
|
```bash
|
||||||
|
kubectl apply -f apps/default/vaultwarden.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Configure required secrets in `secrets/` directory, each mapping to an entity in Vaultwarden.
|
||||||
|
|
||||||
|
## ArgoCD Installation
|
||||||
|
```sh
|
||||||
kubectl apply -k bootstrap/argocd-install
|
kubectl apply -k bootstrap/argocd-install
|
||||||
|
|
||||||
# Apply root app
|
|
||||||
kubectl apply -f bootstrap/root-app.yaml
|
kubectl apply -f bootstrap/root-app.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -17,3 +27,19 @@ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.pas
|
|||||||
```
|
```
|
||||||
|
|
||||||
2. Access ArgoCD and login with `admin` / password from above.
|
2. Access ArgoCD and login with `admin` / password from above.
|
||||||
|
|
||||||
|
## External Secrets Operator preparation
|
||||||
|
|
||||||
|
Create this Secret manually. `BW_HOST` must have no trailing slash.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl -n infra create secret generic bitwarden-cli \
|
||||||
|
--from-literal=BW_HOST='[VAULTWARDEN_URL]' \
|
||||||
|
--from-literal=BW_USERNAME='[VAULTWARDEN_EMAIL]' \
|
||||||
|
--from-literal=BW_PASSWORD='[VAULTWARDEN_PASSWORD]'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Apply order
|
||||||
|
1. `kubectl apply -f secrets/`
|
||||||
|
2. `kubectl apply -f apps/metalldb-system/`
|
||||||
|
3. `kubectl apply -f apps/infra/`
|
||||||
@@ -19,11 +19,12 @@ spec:
|
|||||||
targetRevision: 1.12.1
|
targetRevision: 1.12.1
|
||||||
helm:
|
helm:
|
||||||
valuesObject:
|
valuesObject:
|
||||||
|
controller:
|
||||||
|
type: daemonset
|
||||||
|
alloy:
|
||||||
clustering: { enabled: false }
|
clustering: { enabled: false }
|
||||||
mounts:
|
mounts:
|
||||||
varlog: true
|
varlog: true
|
||||||
controller:
|
|
||||||
type: daemonset
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 100m
|
cpu: 100m
|
||||||
|
|||||||
@@ -115,7 +115,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app: affine
|
app: affine
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: affine.haven
|
- host: affine.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -135,7 +135,6 @@ metadata:
|
|||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: cloud.haven
|
- host: cloud.haven
|
||||||
http:
|
http:
|
||||||
@@ -158,7 +157,6 @@ metadata:
|
|||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: cloud.ivanch.me
|
- host: cloud.ivanch.me
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ metadata:
|
|||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: slink.haven
|
- host: slink.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -145,7 +145,6 @@ metadata:
|
|||||||
name: archivebox-ingress
|
name: archivebox-ingress
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: "archive.haven"
|
- host: "archive.haven"
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: changedetection
|
app.kubernetes.io/name: changedetection
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: change.haven
|
- host: change.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -192,7 +192,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: homepage
|
app.kubernetes.io/name: homepage
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: "homepage.haven"
|
- host: "homepage.haven"
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ metadata:
|
|||||||
name: it-tools-ingress
|
name: it-tools-ingress
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: "tools.haven"
|
- host: "tools.haven"
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ metadata:
|
|||||||
name: notepad
|
name: notepad
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: notepad.haven
|
- host: notepad.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: openwebui.haven
|
- host: openwebui.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -137,7 +137,6 @@ metadata:
|
|||||||
name: paperless
|
name: paperless
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: paperless.haven
|
- host: paperless.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -32,13 +32,13 @@ spec:
|
|||||||
- playwright@1.58.0
|
- playwright@1.58.0
|
||||||
- run-server
|
- run-server
|
||||||
- --port
|
- --port
|
||||||
- '3000'
|
- "3000"
|
||||||
- --host
|
- --host
|
||||||
- 0.0.0.0
|
- 0.0.0.0
|
||||||
env:
|
env:
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: America/Sao_Paulo
|
value: America/Sao_Paulo
|
||||||
image: mcr.microsoft.com/playwright:v1.58.0-noble
|
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
name: playwright
|
name: playwright
|
||||||
ports:
|
ports:
|
||||||
@@ -46,7 +46,7 @@ spec:
|
|||||||
protocol: TCP
|
protocol: TCP
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: '4'
|
cpu: "4"
|
||||||
memory: 4Gi
|
memory: 4Gi
|
||||||
requests:
|
requests:
|
||||||
cpu: 500m
|
cpu: 500m
|
||||||
@@ -68,17 +68,17 @@ spec:
|
|||||||
status:
|
status:
|
||||||
availableReplicas: 1
|
availableReplicas: 1
|
||||||
conditions:
|
conditions:
|
||||||
- lastTransitionTime: '2026-05-29T15:54:24Z'
|
- lastTransitionTime: "2026-05-29T15:54:24Z"
|
||||||
lastUpdateTime: '2026-07-22T10:14:35Z'
|
lastUpdateTime: "2026-07-22T10:14:35Z"
|
||||||
message: ReplicaSet "playwright-86c74d7c78" has successfully progressed.
|
message: ReplicaSet "playwright-86c74d7c78" has successfully progressed.
|
||||||
reason: NewReplicaSetAvailable
|
reason: NewReplicaSetAvailable
|
||||||
status: 'True'
|
status: "True"
|
||||||
type: Progressing
|
type: Progressing
|
||||||
- lastTransitionTime: '2026-08-28T06:04:14Z'
|
- lastTransitionTime: "2026-08-28T06:04:14Z"
|
||||||
lastUpdateTime: '2026-08-28T06:04:14Z'
|
lastUpdateTime: "2026-08-28T06:04:14Z"
|
||||||
message: Deployment has minimum availability.
|
message: Deployment has minimum availability.
|
||||||
reason: MinimumReplicasAvailable
|
reason: MinimumReplicasAvailable
|
||||||
status: 'True'
|
status: "True"
|
||||||
type: Available
|
type: Available
|
||||||
observedGeneration: 95
|
observedGeneration: 95
|
||||||
readyReplicas: 1
|
readyReplicas: 1
|
||||||
@@ -113,7 +113,6 @@ metadata:
|
|||||||
name: playwright
|
name: playwright
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: playwright.haven
|
- host: playwright.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -1,132 +0,0 @@
|
|||||||
---
|
|
||||||
# 1) Deployment
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: qbittorrent
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: qbittorrent
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: qbittorrent
|
|
||||||
spec:
|
|
||||||
affinity:
|
|
||||||
nodeAffinity:
|
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
|
||||||
- weight: 100
|
|
||||||
preference:
|
|
||||||
matchExpressions:
|
|
||||||
- key: kubernetes.io/hostname
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- iris
|
|
||||||
containers:
|
|
||||||
- name: qbittorrent
|
|
||||||
image: lscr.io/linuxserver/qbittorrent:5.2.3
|
|
||||||
imagePullPolicy: Always
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 200m
|
|
||||||
memory: 256Mi
|
|
||||||
limits:
|
|
||||||
cpu: 1000m
|
|
||||||
memory: 512Mi
|
|
||||||
ports:
|
|
||||||
- containerPort: 4300
|
|
||||||
name: webui-port
|
|
||||||
- containerPort: 6881
|
|
||||||
name: qbit-tcp
|
|
||||||
protocol: TCP
|
|
||||||
- containerPort: 6881
|
|
||||||
name: qbit-udp
|
|
||||||
protocol: UDP
|
|
||||||
env:
|
|
||||||
- name: PUID
|
|
||||||
value: "1000"
|
|
||||||
- name: PGID
|
|
||||||
value: "1000"
|
|
||||||
- name: TZ
|
|
||||||
value: "Etc/UTC"
|
|
||||||
- name: WEBUI_PORT
|
|
||||||
value: "4300"
|
|
||||||
- name: TORRENTING_PORT
|
|
||||||
value: "6881"
|
|
||||||
volumeMounts:
|
|
||||||
- name: qbittorrent-config
|
|
||||||
mountPath: /config
|
|
||||||
- name: nas-storage
|
|
||||||
mountPath: /nas
|
|
||||||
volumes:
|
|
||||||
- name: qbittorrent-config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: qbittorrent-config
|
|
||||||
- name: nas-storage
|
|
||||||
nfs:
|
|
||||||
server: 192.168.15.99
|
|
||||||
path: /export/Storage
|
|
||||||
---
|
|
||||||
# PVC
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: qbittorrent-config
|
|
||||||
namespace: default
|
|
||||||
annotations:
|
|
||||||
nfs.io/storage-path: "qbittorrent-config"
|
|
||||||
spec:
|
|
||||||
storageClassName: "nfs-client"
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
---
|
|
||||||
# 2) Service
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: qbittorrent
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
type: NodePort
|
|
||||||
selector:
|
|
||||||
app: qbittorrent
|
|
||||||
ports:
|
|
||||||
- port: 4300
|
|
||||||
targetPort: webui-port
|
|
||||||
name: webui
|
|
||||||
- port: 6881
|
|
||||||
targetPort: qbit-tcp
|
|
||||||
name: torrent-tcp
|
|
||||||
protocol: TCP
|
|
||||||
- port: 6881
|
|
||||||
targetPort: qbit-udp
|
|
||||||
name: torrent-udp
|
|
||||||
protocol: UDP
|
|
||||||
---
|
|
||||||
# 4) Ingress (Traefik)
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: qbittorrent
|
|
||||||
namespace: default
|
|
||||||
annotations:
|
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: web
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
|
||||||
- host: qbittorrent.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /
|
|
||||||
pathType: Prefix
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: qbittorrent
|
|
||||||
port:
|
|
||||||
number: 4300
|
|
||||||
@@ -80,7 +80,6 @@ metadata:
|
|||||||
name: searxng
|
name: searxng
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: search.haven
|
- host: search.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app: stirlingpdf
|
app: stirlingpdf
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: stirling.haven
|
- host: stirling.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ metadata:
|
|||||||
name: uptimekuma
|
name: uptimekuma
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: uptimekuma.haven
|
- host: uptimekuma.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ metadata:
|
|||||||
cert-manager.io/cluster-issuer: internal-ca
|
cert-manager.io/cluster-issuer: internal-ca
|
||||||
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- vault.haven
|
- vault.haven
|
||||||
@@ -134,7 +133,6 @@ metadata:
|
|||||||
name: vaultwarden-public
|
name: vaultwarden-public
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: vault.ivanch.me
|
- host: vault.ivanch.me
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -104,7 +104,6 @@ metadata:
|
|||||||
name: adguardsync-ingress
|
name: adguardsync-ingress
|
||||||
namespace: dns
|
namespace: dns
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: adguardsync.haven
|
- host: adguardsync.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ metadata:
|
|||||||
name: adguardhome-ingress
|
name: adguardhome-ingress
|
||||||
namespace: dns
|
namespace: dns
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: adguard.haven
|
- host: adguard.haven
|
||||||
http:
|
http:
|
||||||
@@ -159,7 +158,6 @@ metadata:
|
|||||||
name: adguardhome-install-ingress
|
name: adguardhome-install-ingress
|
||||||
namespace: dns
|
namespace: dns
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: install.adguard.haven
|
- host: install.adguard.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ metadata:
|
|||||||
name: beszel
|
name: beszel
|
||||||
namespace: infra
|
namespace: infra
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: beszel.haven
|
- host: beszel.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ metadata:
|
|||||||
name: code-config
|
name: code-config
|
||||||
namespace: infra
|
namespace: infra
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: code-config.haven
|
- host: code-config.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: csi-driver-nfs
|
||||||
|
namespace: infra
|
||||||
|
spec:
|
||||||
|
repo: https://kubernetes-csi.github.io/csi-driver-nfs
|
||||||
|
chart: csi-driver-nfs
|
||||||
|
version: 4.13.4
|
||||||
|
targetNamespace: infra
|
||||||
|
valuesContent: |-
|
||||||
|
controller:
|
||||||
|
replicas: 1
|
||||||
|
logLevel: 5
|
||||||
|
defaultOnDeletePolicy: retain
|
||||||
|
storageClasses:
|
||||||
|
- name: nfs-client
|
||||||
|
annotations:
|
||||||
|
storageclass.kubernetes.io/is-default-class: "true"
|
||||||
|
parameters:
|
||||||
|
server: nfs-config.haven
|
||||||
|
share: /export/config
|
||||||
|
subDir: ${pvc.metadata.namespace}/${pvc.metadata.name}
|
||||||
|
onDelete: retain
|
||||||
|
reclaimPolicy: Retain
|
||||||
|
volumeBindingMode: Immediate
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: external-secrets
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
repo: https://charts.external-secrets.io
|
||||||
|
chart: external-secrets
|
||||||
|
version: 2.7.0
|
||||||
|
targetNamespace: external-secrets
|
||||||
|
createNamespace: true
|
||||||
@@ -115,7 +115,6 @@ metadata:
|
|||||||
nginx.ingress.kubernetes.io/enable-cors: "true"
|
nginx.ingress.kubernetes.io/enable-cors: "true"
|
||||||
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
|
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: file-nginx.haven
|
- host: file-nginx.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ metadata:
|
|||||||
name: haven-notify
|
name: haven-notify
|
||||||
namespace: infra
|
namespace: infra
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: notify.haven
|
- host: notify.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
apiVersion: helm.cattle.io/v1
|
|
||||||
kind: HelmChart
|
|
||||||
metadata:
|
|
||||||
name: ingress-nginx
|
|
||||||
namespace: kube-system
|
|
||||||
spec:
|
|
||||||
repo: https://kubernetes.github.io/ingress-nginx
|
|
||||||
chart: ingress-nginx
|
|
||||||
version: 4.x.x
|
|
||||||
targetNamespace: ingress-nginx
|
|
||||||
valuesContent: |-
|
|
||||||
controller:
|
|
||||||
replicaCount: 2
|
|
||||||
ingressClassResource:
|
|
||||||
name: nginx
|
|
||||||
enabled: true
|
|
||||||
default: true
|
|
||||||
controllerValue: "k8s.io/ingress-nginx"
|
|
||||||
ingressClass: nginx
|
|
||||||
service:
|
|
||||||
type: LoadBalancer
|
|
||||||
externalTrafficPolicy: Local
|
|
||||||
annotations:
|
|
||||||
metallb.io/ip-allocated-from-pool: default-pool
|
|
||||||
metallb.io/loadBalancerIPs: "192.168.20.204"
|
|
||||||
loadBalancerIP: 192.168.20.204
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 90Mi
|
|
||||||
limits:
|
|
||||||
cpu: 1000m
|
|
||||||
memory: 256Mi
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
repo: https://traefik.github.io/charts
|
||||||
|
chart: traefik
|
||||||
|
version: 41.2.0
|
||||||
|
targetNamespace: traefik
|
||||||
|
createNamespace: true
|
||||||
|
valuesContent: |-
|
||||||
|
deployment:
|
||||||
|
replicas: 2
|
||||||
|
ingressClass:
|
||||||
|
enabled: true
|
||||||
|
isDefaultClass: true
|
||||||
|
name: traefik
|
||||||
|
service:
|
||||||
|
annotations:
|
||||||
|
metallb.io/ip-allocated-from-pool: default-pool
|
||||||
|
metallb.io/loadBalancerIPs: "192.168.20.204"
|
||||||
|
spec:
|
||||||
|
type: LoadBalancer
|
||||||
|
externalTrafficPolicy: Local
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 90Mi
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 256Mi
|
||||||
@@ -113,7 +113,6 @@ metadata:
|
|||||||
name: wg-easy-ingress
|
name: wg-easy-ingress
|
||||||
namespace: infra
|
namespace: infra
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: vpn.haven
|
- host: vpn.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: metallb
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
repo: https://metallb.github.io/metallb
|
||||||
|
chart: metallb
|
||||||
|
version: 0.15.2
|
||||||
|
targetNamespace: metallb-system
|
||||||
@@ -94,7 +94,6 @@ metadata:
|
|||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
name: grafana
|
name: grafana
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: grafana.haven
|
- host: grafana.haven
|
||||||
http:
|
http:
|
||||||
@@ -113,7 +112,6 @@ metadata:
|
|||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
name: grafana-public
|
name: grafana-public
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: grafanah.ivanch.me
|
- host: grafanah.ivanch.me
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: argocd-cm
|
||||||
|
namespace: argocd
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: argocd-cm
|
||||||
|
app.kubernetes.io/part-of: argocd
|
||||||
|
data:
|
||||||
|
accounts.api: apiKey
|
||||||
|
accounts.api.enabled: "true"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: argocd-rbac-cm
|
||||||
|
namespace: argocd
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: argocd-rbac-cm
|
||||||
|
app.kubernetes.io/part-of: argocd
|
||||||
|
data:
|
||||||
|
policy.csv: |
|
||||||
|
g, api, role:readonly
|
||||||
@@ -4,7 +4,6 @@ metadata:
|
|||||||
name: argocd-server
|
name: argocd-server
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
rules:
|
||||||
- host: argocd.haven
|
- host: argocd.haven
|
||||||
http:
|
http:
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ resources:
|
|||||||
|
|
||||||
patches:
|
patches:
|
||||||
- path: server-insecure-patch.yaml
|
- path: server-insecure-patch.yaml
|
||||||
|
- path: argocd-api-user.yaml
|
||||||
|
|||||||
@@ -70,13 +70,6 @@ kind: Namespace
|
|||||||
metadata:
|
metadata:
|
||||||
name: metallb-system
|
name: metallb-system
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: nfs-provisioner
|
|
||||||
labels:
|
|
||||||
name: nfs-provisioner
|
|
||||||
---
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Observability & Monitoring
|
# Observability & Monitoring
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
|
||||||
kind: ExternalSecret
|
|
||||||
metadata: { name: radarr, namespace: media }
|
|
||||||
spec:
|
|
||||||
refreshInterval: 1h
|
|
||||||
target:
|
|
||||||
name: radarr-secret
|
|
||||||
deletionPolicy: Retain
|
|
||||||
template:
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
Radarr__Postgres__User: "{{ .Radarr__Postgres__User }}"
|
|
||||||
Radarr__Postgres__Password: "{{ .Radarr__Postgres__Password }}"
|
|
||||||
Radarr__Postgres__Host: "{{ .Radarr__Postgres__Host }}"
|
|
||||||
Radarr__Postgres__MainDb: "{{ .Radarr__Postgres__MainDb }}"
|
|
||||||
data:
|
|
||||||
- secretKey: Radarr__Postgres__User
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: ab723b65-3ec8-469c-b01d-67a6e3049023,
|
|
||||||
property: username,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-login, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Radarr__Postgres__Password
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: ab723b65-3ec8-469c-b01d-67a6e3049023,
|
|
||||||
property: password,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-login, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Radarr__Postgres__Host
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: ab723b65-3ec8-469c-b01d-67a6e3049023,
|
|
||||||
property: Radarr__Postgres__Host,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Radarr__Postgres__MainDb
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: ab723b65-3ec8-469c-b01d-67a6e3049023,
|
|
||||||
property: Radarr__Postgres__MainDb,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
|
||||||
kind: ExternalSecret
|
|
||||||
metadata: { name: recommender, namespace: media }
|
|
||||||
spec:
|
|
||||||
refreshInterval: 1h
|
|
||||||
target:
|
|
||||||
name: recommender-secrets
|
|
||||||
deletionPolicy: Retain
|
|
||||||
template:
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
OPENAI_API_KEY: "{{ .OPENAI_API_KEY }}"
|
|
||||||
DATABASE_URL: "{{ .DATABASE_URL }}"
|
|
||||||
data:
|
|
||||||
- secretKey: OPENAI_API_KEY
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: 5079ef6f-3d1d-4522-b22c-6dd5f1c19acd,
|
|
||||||
property: OPENAI_API_KEY,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: DATABASE_URL
|
|
||||||
remoteRef:
|
|
||||||
{ key: 5079ef6f-3d1d-4522-b22c-6dd5f1c19acd, property: DATABASE_URL }
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
apiVersion: external-secrets.io/v1
|
|
||||||
kind: ExternalSecret
|
|
||||||
metadata: { name: sonarr, namespace: media }
|
|
||||||
spec:
|
|
||||||
refreshInterval: 1h
|
|
||||||
target:
|
|
||||||
name: sonarr-secret
|
|
||||||
deletionPolicy: Retain
|
|
||||||
template:
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
Sonarr__Postgres__User: "{{ .Sonarr__Postgres__User }}"
|
|
||||||
Sonarr__Postgres__Password: "{{ .Sonarr__Postgres__Password }}"
|
|
||||||
Sonarr__Postgres__Host: "{{ .Sonarr__Postgres__Host }}"
|
|
||||||
Sonarr__Postgres__MainDb: "{{ .Sonarr__Postgres__MainDb }}"
|
|
||||||
data:
|
|
||||||
- secretKey: Sonarr__Postgres__User
|
|
||||||
remoteRef:
|
|
||||||
{ key: 2c5b6d27-971f-4876-b10d-db400dfde7b2, property: username }
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-login, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Sonarr__Postgres__Password
|
|
||||||
remoteRef:
|
|
||||||
{ key: 2c5b6d27-971f-4876-b10d-db400dfde7b2, property: password }
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-login, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Sonarr__Postgres__Host
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: 2c5b6d27-971f-4876-b10d-db400dfde7b2,
|
|
||||||
property: Sonarr__Postgres__Host,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
- secretKey: Sonarr__Postgres__MainDb
|
|
||||||
remoteRef:
|
|
||||||
{
|
|
||||||
key: 2c5b6d27-971f-4876-b10d-db400dfde7b2,
|
|
||||||
property: Sonarr__Postgres__MainDb,
|
|
||||||
}
|
|
||||||
sourceRef:
|
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
|
||||||
Reference in New Issue
Block a user