Compare commits
3
Commits
main
..
5e2cd61330
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e2cd61330 | ||
|
|
72d93f7e92 | ||
|
|
d1d8eabe40 |
@@ -1,3 +1,3 @@
|
|||||||
ansible-core==2.21.4
|
ansible-core==2.21.3
|
||||||
proxmoxer==2.3.0
|
proxmoxer==2.3.0
|
||||||
requests==2.34.2
|
requests==2.34.2
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ collections:
|
|||||||
- name: community.proxmox
|
- name: community.proxmox
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
- name: community.general
|
- name: community.general
|
||||||
version: "13.4.0"
|
version: "13.2.0"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ spec:
|
|||||||
project: default
|
project: default
|
||||||
destination:
|
destination:
|
||||||
server: https://kubernetes.default.svc
|
server: https://kubernetes.default.svc
|
||||||
namespace: monitoring
|
namespace: alloy
|
||||||
syncPolicy:
|
syncPolicy:
|
||||||
automated: { prune: true, selfHeal: true }
|
automated: { prune: true, selfHeal: true }
|
||||||
syncOptions: [CreateNamespace=true, ServerSideApply=true]
|
syncOptions: [CreateNamespace=true, ServerSideApply=true]
|
||||||
@@ -20,7 +20,8 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: affine
|
- name: affine
|
||||||
image: ghcr.io/toeverything/affine:0.27.4
|
image: ghcr.io/toeverything/affine:stable
|
||||||
|
imagePullPolicy: Always
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
"sh",
|
"sh",
|
||||||
@@ -99,6 +100,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: affine-config
|
name: affine-config
|
||||||
namespace: cloud
|
namespace: cloud
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "affine-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ spec:
|
|||||||
containers:
|
containers:
|
||||||
- name: cloudreve
|
- name: cloudreve
|
||||||
image: cloudreve/cloudreve:v4
|
image: cloudreve/cloudreve:v4
|
||||||
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5212
|
- containerPort: 5212
|
||||||
name: http
|
name: http
|
||||||
@@ -51,6 +52,11 @@ spec:
|
|||||||
value: "disable"
|
value: "disable"
|
||||||
- name: CR_CONF_Redis.Server
|
- name: CR_CONF_Redis.Server
|
||||||
value: ""
|
value: ""
|
||||||
|
- name: CR_CONF_Redis.Password
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: cloudreve-secret
|
||||||
|
key: REDIS_PASSWORD
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: cloudreve-data
|
- name: cloudreve-data
|
||||||
mountPath: /cloudreve/data
|
mountPath: /cloudreve/data
|
||||||
@@ -107,6 +113,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: cloudreve-data
|
name: cloudreve-data
|
||||||
namespace: cloud
|
namespace: cloud
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "cloudreve-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: slink-data
|
name: slink-data
|
||||||
namespace: cloud
|
namespace: cloud
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "slink-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: renovate
|
- name: renovate
|
||||||
image: renovate/renovate:44.103.7
|
image: renovate/renovate:44.39.3
|
||||||
args:
|
args:
|
||||||
- ivanch/haven
|
- ivanch/haven
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -129,6 +129,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: archivebox-data
|
name: archivebox-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "archivebox-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -120,6 +120,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: changedetection-config
|
name: changedetection-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "changedetection-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -157,6 +157,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: homepage-config
|
name: homepage-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "homepage-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: notepad-data
|
name: notepad-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "notepad-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: openwebui-data
|
name: openwebui-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "openwebui-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: paperless-data
|
name: paperless-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "paperless-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ spec:
|
|||||||
env:
|
env:
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: America/Sao_Paulo
|
value: America/Sao_Paulo
|
||||||
image: mcr.microsoft.com/playwright:v1.63.0-noble
|
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||||
|
imagePullPolicy: Always
|
||||||
name: playwright
|
name: playwright
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: searxng-config
|
name: searxng-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "searxng-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: stirlingpdf-config
|
name: stirlingpdf-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "stirlingpdf-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ spec:
|
|||||||
containers:
|
containers:
|
||||||
- name: uptimekuma
|
- name: uptimekuma
|
||||||
image: louislam/uptime-kuma:2
|
image: louislam/uptime-kuma:2
|
||||||
|
imagePullPolicy: Always
|
||||||
env:
|
env:
|
||||||
- name: PUID
|
- name: PUID
|
||||||
value: "1000"
|
value: "1000"
|
||||||
@@ -75,6 +76,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: uptimekuma-config
|
name: uptimekuma-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "uptimekuma-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: vaultwarden
|
- name: vaultwarden
|
||||||
image: vaultwarden/server:1.37.3
|
image: vaultwarden/server:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
env:
|
env:
|
||||||
- name: DOMAIN
|
- name: DOMAIN
|
||||||
value: "https://vault.haven"
|
value: "https://vault.haven"
|
||||||
@@ -89,6 +90,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: vaultwarden-data
|
name: vaultwarden-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "vaultwarden-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: gitea-runner-amd64-pvc
|
name: gitea-runner-amd64-pvc
|
||||||
namespace: dev
|
namespace: dev
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "gitea-runner-amd64-pvc"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
@@ -55,6 +57,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: gitea-runner-arm64-pvc
|
name: gitea-runner-arm64-pvc
|
||||||
namespace: dev
|
namespace: dev
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "gitea-runner-arm64-pvc"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: adguardsync-pvc
|
name: adguardsync-pvc
|
||||||
namespace: dns
|
namespace: dns
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "adguardsync-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
@@ -30,7 +32,8 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: adguardsync
|
- name: adguardsync
|
||||||
image: ghcr.io/bakito/adguardhome-sync:v0.9.3
|
image: ghcr.io/bakito/adguardhome-sync:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8080
|
- containerPort: 8080
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
|||||||
+4
-11
@@ -3,6 +3,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: adguardhome-pvc
|
name: adguardhome-pvc
|
||||||
namespace: dns
|
namespace: dns
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "adguardhome-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
@@ -28,19 +30,10 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
app: adguardhome
|
app: adguardhome
|
||||||
spec:
|
spec:
|
||||||
affinity:
|
|
||||||
nodeAffinity:
|
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
|
||||||
- weight: 100
|
|
||||||
preference:
|
|
||||||
matchExpressions:
|
|
||||||
- key: kubernetes.io/arch
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- arm64
|
|
||||||
containers:
|
containers:
|
||||||
- name: adguardhome
|
- name: adguardhome
|
||||||
image: adguard/adguardhome:v0.107.79
|
image: adguard/adguardhome:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 53
|
- containerPort: 53
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ spec:
|
|||||||
secretKeyRef:
|
secretKeyRef:
|
||||||
name: beszel-key
|
name: beszel-key
|
||||||
key: SECRET-KEY
|
key: SECRET-KEY
|
||||||
image: henrygd/beszel-agent:0.20.0
|
image: henrygd/beszel-agent:0.19.0
|
||||||
|
imagePullPolicy: Always
|
||||||
name: beszel-agent
|
name: beszel-agent
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 45876
|
- containerPort: 45876
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ spec:
|
|||||||
- amd64
|
- amd64
|
||||||
containers:
|
containers:
|
||||||
- name: beszel
|
- name: beszel
|
||||||
image: ghcr.io/henrygd/beszel/beszel:0.20.0
|
image: ghcr.io/henrygd/beszel/beszel:0.19.0
|
||||||
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8090
|
- containerPort: 8090
|
||||||
name: beszel-port
|
name: beszel-port
|
||||||
@@ -65,6 +66,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: beszel-config
|
name: beszel-config
|
||||||
namespace: infra
|
namespace: infra
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "beszel-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -1,44 +1,3 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: bitwarden-cli-ca
|
|
||||||
namespace: infra
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: bitwarden-cli
|
|
||||||
data:
|
|
||||||
# Public CA certificate used by the internal-ca ClusterIssuer. Keep this in
|
|
||||||
# sync if the issuer CA is rotated.
|
|
||||||
haven-ca.crt: |
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBzCCAu+gAwIBAgIUGFrjEo+WOxJpMnJqU/RQ881kWI8wDQYJKoZIhvcNAQEL
|
|
||||||
BQAwEzERMA8GA1UEAwwISGF2ZW4gQ0EwHhcNMjUwOTA3MTUxNTE3WhcNMzUwOTA1
|
|
||||||
MTUxNTE3WjATMREwDwYDVQQDDAhIYXZlbiBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
|
||||||
ggIPADCCAgoCggIBAK+8DxQfCYdRfGnJoEu0CiSuw64lnUFryvzy3GPkfGEEzc3f
|
|
||||||
ZiH6pUUIpQnrbVc1wdq3ojEOveGyLIqWxkljz8gEaMDJwB7udOxfbgv0QFI4cFKs
|
|
||||||
QzB+g3VVf74mYHvqfGB1suxmdVJ8YxcW3rQl7XD94PLxfoZuQ8IKKjskaQnYXUGH
|
|
||||||
wi6YBmIjpxr23lvT5cTbd5YgTFYVXDzM8nWtmnd2Wa9WkNZtKaHQKIeiNEpUPV0+
|
|
||||||
KSHVQC7vdmGmbUZXWpK2jmLFWfYaI0vXUal0CyMv1QidTd5LsDCI4Y+dx4mSBLuu
|
|
||||||
ip5V4Wm1DxttyaKUZM2vhzHEsDSVHz/xqx9nJeoJJuP+OirQVETD3FcN5PNVkWXu
|
|
||||||
EHQAqUciBh1CMJKKT74SE5oTT1/Eni9N2uYlvXsOs3ne6TTjZYxcL6VU+aqyYvvF
|
|
||||||
oMo3DX2a5nZvht4E1BtCd4I/RlnOw5QBAvWbFJqpbo/DTAGo/WBgv7jXCGail+uQ
|
|
||||||
r7iLoKFnhGq0WB9d2UUg6qDRD11I1nZANkv4t3Z2HFbG4XxdpttPm7JjxlcC3gGa
|
|
||||||
AfE3rChmAQPWPLSn6msOcfA+l5OD9SoSYU9nHy81T2q06Kfg/VWDdz7Wvi+WNZ20
|
|
||||||
gcfZPUZQsLlgZeyjmoA27D7ayO5uxjTWCi35kIgKcDDutyHctPRQs5zlTD35AgMB
|
|
||||||
AAGjUzBRMB0GA1UdDgQWBBSqABoe6cCk5vMc3LfnZfhiMbJ+kjAfBgNVHSMEGDAW
|
|
||||||
gBSqABoe6cCk5vMc3LfnZfhiMbJ+kjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
|
|
||||||
DQEBCwUAA4ICAQAWAqQgFYEH14J2pwKptLb/K2C2oT9XLVnArQ5PKOzyWWhfZXsr
|
|
||||||
3YB707XJ7ju12n5gBgjCK4R66IG/iYNfHdBfhb9M1BVJ3T035RH8d6lhlZbxC02s
|
|
||||||
ZIMrQxDVFRrWm7gxcQiMILfPl2hJmsLf9XIUTBzPWFj9E+wExXrDYdiZXU+a/9qP
|
|
||||||
JvLKZA7T2lSBu+XtccySVLHXoxZ/A/c7Gp8XYJ2srZ2tXGN+j1dXiSMWHD/fpdxs
|
|
||||||
3GDKFnOOz2NTjHhYvBR94sOx3UkA3Pz+ufcHFBWWh23iGOPDDjh0vqAKItz2G0Kb
|
|
||||||
9B99XVnHWHamaZ2tV40x7lVn1mo9ImFVtxW2XDQ/NkRB9PuT2ryGE67Ey/Zfoq5M
|
|
||||||
0gZXIMtuMS25dTB8gQ8PKlXluIf4EbaDXhFk5xFHz5NP0E5Um4SxJP8H30/+UUPd
|
|
||||||
bu/TMcNiiAgxaTLBbE3nw/L7bYfH+5KuTLlp17H0UEtSI1GosgGYooov+Zbj4ZF8
|
|
||||||
Ko108LKAFDGe8/uQVeuo00CrEqXwVRtCCkv+LBcCJDicoyqWbp4GCBp+IVN0nxWX
|
|
||||||
xIRYVtQZCmA3hSH3rwt0/2dBxkcta4YkHZUEZ+EXaFl3z1tcbErOhBvupBvnBuZP
|
|
||||||
Rp2yvEJuuY6M1j+CZrfCm7qMipXTGPQ11Q7hf6jJ0xzxjTkV9TyV1ptPPQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -60,7 +19,7 @@ spec:
|
|||||||
kubernetes.io/arch: amd64
|
kubernetes.io/arch: amd64
|
||||||
containers:
|
containers:
|
||||||
- name: bitwarden-cli
|
- name: bitwarden-cli
|
||||||
image: ghcr.io/charlesthomas/bitwarden-cli:2026.8.0 # 2026.9.0 requires Vaultwarden's unimplemented user-key-ID backfill API
|
image: ghcr.io/charlesthomas/bitwarden-cli:2026.7.0
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
# Override the baked entrypoint so --disable-origin-protection is
|
# Override the baked entrypoint so --disable-origin-protection is
|
||||||
# actually passed (it was commented out in the image's entrypoint.sh,
|
# actually passed (it was commented out in the image's entrypoint.sh,
|
||||||
@@ -104,14 +63,11 @@ spec:
|
|||||||
echo 'Running `bw serve` on port 8087'
|
echo 'Running `bw serve` on port 8087'
|
||||||
bw serve --hostname 0.0.0.0 --disable-origin-protection
|
bw serve --hostname 0.0.0.0 --disable-origin-protection
|
||||||
env:
|
env:
|
||||||
# Bitwarden CLI is Node-based and needs the internal issuer CA to
|
|
||||||
# verify the HTTPS certificate for vault.haven.
|
|
||||||
- name: NODE_EXTRA_CA_CERTS
|
|
||||||
value: /etc/ssl/certs/haven-ca.crt
|
|
||||||
# Use the in-cluster ingress. The public endpoint currently
|
|
||||||
# returns 502 from inside the cluster.
|
|
||||||
- name: BW_HOST
|
- name: BW_HOST
|
||||||
value: https://vault.haven
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: bitwarden-cli
|
||||||
|
key: BW_HOST
|
||||||
- name: BW_USER
|
- name: BW_USER
|
||||||
valueFrom:
|
valueFrom:
|
||||||
secretKeyRef:
|
secretKeyRef:
|
||||||
@@ -122,11 +78,6 @@ spec:
|
|||||||
secretKeyRef:
|
secretKeyRef:
|
||||||
name: bitwarden-cli
|
name: bitwarden-cli
|
||||||
key: BW_PASSWORD
|
key: BW_PASSWORD
|
||||||
volumeMounts:
|
|
||||||
- name: haven-ca
|
|
||||||
mountPath: /etc/ssl/certs/haven-ca.crt
|
|
||||||
subPath: haven-ca.crt
|
|
||||||
readOnly: true
|
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
containerPort: 8087
|
containerPort: 8087
|
||||||
@@ -153,10 +104,6 @@ spec:
|
|||||||
requests:
|
requests:
|
||||||
cpu: 50m
|
cpu: 50m
|
||||||
memory: 128Mi
|
memory: 128Mi
|
||||||
volumes:
|
|
||||||
- name: haven-ca
|
|
||||||
configMap:
|
|
||||||
name: bitwarden-cli-ca
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: code-config
|
name: code-config
|
||||||
namespace: infra
|
namespace: infra
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "code-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ spec:
|
|||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: file-nginx
|
app: file-nginx
|
||||||
annotations:
|
|
||||||
checksum/file-nginx-conf: "4235705a54e5003a340f1a4e164c3e3239fd4327d9aa9ecf0c640a3655def3c9"
|
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: nginx
|
- name: nginx
|
||||||
@@ -85,19 +83,11 @@ data:
|
|||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
root /usr/share/nginx/data/file-nginx;
|
root /usr/share/nginx/data/file-nginx;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
autoindex on;
|
autoindex on;
|
||||||
autoindex_exact_size off;
|
|
||||||
autoindex_localtime on;
|
|
||||||
|
|
||||||
location = /index.html {
|
|
||||||
# The legacy static page is now the live directory browser.
|
|
||||||
return 302 /;
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
# Bypass the static welcome page so every directory is browsable.
|
|
||||||
index __directory_listing__;
|
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-41
@@ -3,6 +3,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: wg-easy-pvc
|
name: wg-easy-pvc
|
||||||
namespace: infra
|
namespace: infra
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "wg-easy-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
@@ -18,10 +20,7 @@ metadata:
|
|||||||
namespace: infra
|
namespace: infra
|
||||||
spec:
|
spec:
|
||||||
strategy:
|
strategy:
|
||||||
type: RollingUpdate
|
type: Recreate
|
||||||
rollingUpdate:
|
|
||||||
maxSurge: 1
|
|
||||||
maxUnavailable: 0
|
|
||||||
replicas: 1
|
replicas: 1
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
@@ -39,11 +38,12 @@ spec:
|
|||||||
- key: kubernetes.io/hostname
|
- key: kubernetes.io/hostname
|
||||||
operator: In
|
operator: In
|
||||||
values:
|
values:
|
||||||
- polaris
|
- nexus
|
||||||
weight: 100
|
weight: 100
|
||||||
containers:
|
containers:
|
||||||
- name: wg-easy
|
- name: wg-easy
|
||||||
image: ghcr.io/wg-easy/wg-easy:15.4.0
|
image: ghcr.io/wg-easy/wg-easy:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 51820
|
- containerPort: 51820
|
||||||
protocol: UDP
|
protocol: UDP
|
||||||
@@ -54,11 +54,15 @@ spec:
|
|||||||
env:
|
env:
|
||||||
- name: LANG
|
- name: LANG
|
||||||
value: en
|
value: en
|
||||||
|
- name: WG_HOST
|
||||||
|
value: vpn.ivanch.me
|
||||||
- name: WG_MTU
|
- name: WG_MTU
|
||||||
value: "1420"
|
value: "1420"
|
||||||
- name: UI_TRAFFIC_STATS
|
- name: UI_TRAFFIC_STATS
|
||||||
value: "true"
|
value: "true"
|
||||||
- name: INSECURE
|
- name: UI_CHART_TYPE
|
||||||
|
value: "0"
|
||||||
|
- name: WG_ENABLE_ONE_TIME_LINKS
|
||||||
value: "true"
|
value: "true"
|
||||||
- name: UI_ENABLE_SORT_CLIENTS
|
- name: UI_ENABLE_SORT_CLIENTS
|
||||||
value: "true"
|
value: "true"
|
||||||
@@ -74,37 +78,14 @@ spec:
|
|||||||
limits:
|
limits:
|
||||||
cpu: 2000m
|
cpu: 2000m
|
||||||
memory: 1Gi
|
memory: 1Gi
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: 51821
|
|
||||||
initialDelaySeconds: 15
|
|
||||||
periodSeconds: 30
|
|
||||||
timeoutSeconds: 5
|
|
||||||
failureThreshold: 3
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: 51821
|
|
||||||
initialDelaySeconds: 5
|
|
||||||
periodSeconds: 10
|
|
||||||
timeoutSeconds: 3
|
|
||||||
failureThreshold: 2
|
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: wg-easy-volume
|
- name: wg-easy-volume
|
||||||
mountPath: /etc/wireguard
|
mountPath: /etc/wireguard
|
||||||
- name: kernel-modules
|
|
||||||
mountPath: /lib/modules
|
|
||||||
readOnly: true
|
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
volumes:
|
volumes:
|
||||||
- name: wg-easy-volume
|
- name: wg-easy-volume
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: wg-easy-pvc
|
claimName: wg-easy-pvc
|
||||||
- name: kernel-modules
|
|
||||||
hostPath:
|
|
||||||
path: /lib/modules
|
|
||||||
type: Directory
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
@@ -143,14 +124,3 @@ spec:
|
|||||||
name: wg-easy-svc
|
name: wg-easy-svc
|
||||||
port:
|
port:
|
||||||
number: 51821
|
number: 51821
|
||||||
---
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: wg-easy-pdb
|
|
||||||
namespace: infra
|
|
||||||
spec:
|
|
||||||
minAvailable: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: wg-easy
|
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ kind: PersistentVolumeClaim
|
|||||||
metadata:
|
metadata:
|
||||||
name: grafana-pvc
|
name: grafana-pvc
|
||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "grafana-data"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ spec:
|
|||||||
kubernetes.io/os: linux
|
kubernetes.io/os: linux
|
||||||
containers:
|
containers:
|
||||||
- name: kube-state-metrics
|
- name: kube-state-metrics
|
||||||
image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.20.0
|
image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.19.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
args:
|
args:
|
||||||
- --resources=cronjobs,daemonsets,deployments,jobs,nodes,persistentvolumeclaims,pods,replicasets,statefulsets
|
- --resources=cronjobs,daemonsets,deployments,jobs,nodes,persistentvolumeclaims,pods,replicasets,statefulsets
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ metadata:
|
|||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: loki
|
app: loki
|
||||||
@@ -38,9 +36,8 @@ spec:
|
|||||||
configMap:
|
configMap:
|
||||||
name: loki-config
|
name: loki-config
|
||||||
- name: loki-storage
|
- name: loki-storage
|
||||||
nfs:
|
emptyDir:
|
||||||
server: nexus.haven
|
medium: Memory
|
||||||
path: /export/sandbox/loki
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -82,12 +79,7 @@ data:
|
|||||||
|
|
||||||
limits_config:
|
limits_config:
|
||||||
allow_structured_metadata: true
|
allow_structured_metadata: true
|
||||||
retention_period: 72h
|
retention_period: 0
|
||||||
max_query_lookback: 72h
|
|
||||||
# Global per-tenant cap: <= 0.1 MB/s sustained keeps this sandbox disk bounded.
|
|
||||||
ingestion_rate_strategy: global
|
|
||||||
ingestion_rate_mb: 0.1
|
|
||||||
ingestion_burst_size_mb: 0.5
|
|
||||||
|
|
||||||
ingester:
|
ingester:
|
||||||
lifecycler:
|
lifecycler:
|
||||||
@@ -100,12 +92,7 @@ data:
|
|||||||
chunk_target_size: 1536000
|
chunk_target_size: 1536000
|
||||||
|
|
||||||
compactor:
|
compactor:
|
||||||
working_directory: /tmp/loki/compactor
|
retention_enabled: false
|
||||||
compaction_interval: 10m
|
|
||||||
retention_enabled: true
|
|
||||||
retention_delete_delay: 2h
|
|
||||||
retention_delete_worker_count: 10
|
|
||||||
delete_request_store: filesystem
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ metadata:
|
|||||||
app: prometheus
|
app: prometheus
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: prometheus
|
app: prometheus
|
||||||
@@ -24,9 +22,7 @@ spec:
|
|||||||
args:
|
args:
|
||||||
- "--config.file=/etc/prometheus/prometheus.yml"
|
- "--config.file=/etc/prometheus/prometheus.yml"
|
||||||
- "--storage.tsdb.path=/prometheus"
|
- "--storage.tsdb.path=/prometheus"
|
||||||
- "--storage.tsdb.retention.time=2d"
|
- "--storage.tsdb.retention.time=1d"
|
||||||
# Keep a generous buffer on the 117 GiB sandbox filesystem; WAL may exceed this briefly.
|
|
||||||
- "--storage.tsdb.retention.size=8GB"
|
|
||||||
- "--web.enable-lifecycle"
|
- "--web.enable-lifecycle"
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 9090
|
- containerPort: 9090
|
||||||
@@ -48,15 +44,16 @@ spec:
|
|||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: prometheus-pvc
|
claimName: prometheus-pvc
|
||||||
- name: prometheus-storage
|
- name: prometheus-storage
|
||||||
nfs:
|
persistentVolumeClaim:
|
||||||
server: nexus.haven
|
claimName: prometheus-storage-pvc
|
||||||
path: /export/sandbox/prometheus
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: prometheus-pvc
|
name: prometheus-pvc
|
||||||
namespace: monitoring
|
namespace: monitoring
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "prometheus-config"
|
||||||
spec:
|
spec:
|
||||||
storageClassName: "nfs-client"
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ metadata:
|
|||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: ingress-nginx
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
|
app.kubernetes.io/name: ingress-nginx
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: metallb-system
|
name: metallb-system
|
||||||
---
|
---
|
||||||
@@ -67,6 +75,11 @@ metadata:
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: alloy
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: monitoring
|
name: monitoring
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Haven project context
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
`haven` is the public GitOps specification repository for the Haven Kubernetes cluster. Argo CD continuously reconciles the manifests on `main` into the cluster.
|
||||||
|
|
||||||
|
## Repository organization
|
||||||
|
|
||||||
|
- `apps/<namespace>/*.yaml` — one application or infrastructure specification per file. The directory name selects its target namespace through the root ApplicationSet.
|
||||||
|
- `apps/root/applicationset.yaml` — discovers `apps/*/*.yaml` and creates Argo CD Applications that automatically prune and self-heal.
|
||||||
|
- `bootstrap/` — cluster bootstrap manifests such as namespaces, Argo CD configuration, and address pools.
|
||||||
|
- `secrets/` — Kubernetes secret specifications referenced by applications.
|
||||||
|
- `.gitea/workflows/trigger-renovate.yaml` — manually triggered Gitea Actions workflow that creates an immediate one-off Job from the live `cronjobs/renovate` CronJob.
|
||||||
|
|
||||||
|
## Build and deploy
|
||||||
|
|
||||||
|
- Commit manifest changes to `main`; the root ApplicationSet reconciles them automatically.
|
||||||
|
- The `Trigger Renovate` Gitea workflow is manual-only (`workflow_dispatch`). It downloads `kubectl`, writes `${{ secrets.KUBE_CONFIG }}` to an ephemeral kubeconfig, verifies the live CronJob, then creates a uniquely named Job in the `cronjobs` namespace from `cronjob/renovate`.
|
||||||
|
- The kubeconfig is supplied at execution time as the repository or organization `KUBE_CONFIG` secret. No credentials are stored in this repository.
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- Keep Kubernetes manifest and workflow YAML LF-terminated; `.gitattributes` enforces this for `.yaml` and `.yml` files.
|
||||||
|
- Do not commit plaintext credentials. Kubernetes resources should continue to reference the existing secret mechanisms.
|
||||||
|
- A manual Renovate dispatch starts an additional run; the weekly CronJob schedule remains unchanged.
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
"prHourlyLimit": 0,
|
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
"managerFilePatterns": [
|
"managerFilePatterns": [
|
||||||
"/\\.yaml$/"
|
"/\\.yaml$/"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ spec:
|
|||||||
DB_USER: "{{ .DB_USER }}"
|
DB_USER: "{{ .DB_USER }}"
|
||||||
DB_PASSWORD: "{{ .DB_PASSWORD }}"
|
DB_PASSWORD: "{{ .DB_PASSWORD }}"
|
||||||
DB_NAME: "{{ .DB_NAME }}"
|
DB_NAME: "{{ .DB_NAME }}"
|
||||||
|
REDIS_PASSWORD: "{{ .REDIS_PASSWORD }}"
|
||||||
data:
|
data:
|
||||||
- secretKey: DB_USER
|
- secretKey: DB_USER
|
||||||
remoteRef:
|
remoteRef:
|
||||||
@@ -28,3 +29,8 @@ spec:
|
|||||||
{ key: 8c25cac9-e9e8-4970-bdf4-31f9aee19276, property: DB_NAME }
|
{ key: 8c25cac9-e9e8-4970-bdf4-31f9aee19276, property: DB_NAME }
|
||||||
sourceRef:
|
sourceRef:
|
||||||
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
||||||
|
- secretKey: REDIS_PASSWORD
|
||||||
|
remoteRef:
|
||||||
|
{ key: 8c25cac9-e9e8-4970-bdf4-31f9aee19276, property: REDIS_PASSWORD }
|
||||||
|
sourceRef:
|
||||||
|
{ storeRef: { name: bitwarden-fields, kind: ClusterSecretStore } }
|
||||||
|
|||||||
Reference in New Issue
Block a user