feat: benji

This commit is contained in:
auricom
2021-08-20 14:01:01 +02:00
parent 6f3ed7691f
commit 19298ad623
41 changed files with 293 additions and 32 deletions

View File

@@ -5,7 +5,7 @@ metadata:
name: bookstack-config name: bookstack-config
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
@@ -20,7 +20,7 @@ metadata:
name: bookstack-db name: bookstack-db
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: freshrss-config name: freshrss-config
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: homer-config name: homer-config
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: pgadmin-config name: pgadmin-config
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: postgresql-kube name: postgresql-kube
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: recipes-files name: recipes-files
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: resilio-sync-config name: resilio-sync-config
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: vaultwarden-data name: vaultwarden-data
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: vikunja-files name: vikunja-files
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: wallabag-images name: wallabag-images
namespace: data namespace: data
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: gitea-config name: gitea-config
namespace: development namespace: development
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: frigate-config name: frigate-config
namespace: home-automation namespace: home-automation
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: hass-config name: hass-config
namespace: home-automation namespace: home-automation
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: zigbee2mqtt-config name: zigbee2mqtt-config
namespace: home-automation namespace: home-automation
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: zwavejs2mqtt-config name: zwavejs2mqtt-config
namespace: home-automation namespace: home-automation
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -8,4 +8,5 @@ resources:
- media - media
- monitoring - monitoring
- networking - networking
- rook-system
- secret-reflector - secret-reflector

View File

@@ -5,7 +5,7 @@ metadata:
name: bazarr-config name: bazarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: flood-config name: flood-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: jellyfin-config name: jellyfin-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: lidarr-config name: lidarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: lychee-files name: lychee-files
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: navidrome-config name: navidrome-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: prowlarr-config name: prowlarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: pyload-config name: pyload-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: qbittorrent-config name: qbittorrent-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: radarr-config name: radarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: readarr-config name: readarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: sabnzbd-config name: sabnzbd-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: sonarr-config name: sonarr-config
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: tdarr-data name: tdarr-data
namespace: media namespace: media
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: uptime-kuma-config name: uptime-kuma-config
namespace: monitoring namespace: monitoring
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -5,7 +5,7 @@ metadata:
name: unifi-config name: unifi-config
namespace: networking namespace: networking
labels: labels:
kasten-io-snapshots: "enable" benji-backup.me/instance: "benji-k8s"
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -0,0 +1,13 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: benji-ceph-etc
namespace: rook-ceph
data:
ceph.conf: |
[global]
mon_host = rook-ceph-mon-b.rook-ceph.svc.cluster.local:6789,rook-ceph-mon-c.rook-ceph.svc.cluster.local:6789,rook-ceph-mon-d.rook-ceph.svc.cluster.local:6789
[client.admin]
keyring = /etc/ceph/keyring

View File

@@ -0,0 +1,105 @@
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: benji
namespace: rook-ceph
spec:
releaseName: benji
interval: 5m
chart:
spec:
chart: ./charts/benji-k8s
version: 0.2.0
sourceRef:
kind: GitRepository
name: benji-charts
namespace: flux-system
interval: 5m
values:
timeZone: Europe/Paris
benji:
configuration:
configurationVersion: '1'
databaseEngine: postgresql://benji:secret@benji-postgresql-headless:5432/benji
defaultStorage: storage-1
storages:
- name: storage-1
storageId: 1
module: file
configuration:
path: /mnt/storage/backups/benji
ios:
- module: rbdaio
name: replicapool
configuration:
simultaneousReads: 3
simultaneousWrites: 3
cephConfigFile: /etc/ceph/ceph.conf
clientIdentifier: admin
newImageFeatures:
- RBD_FEATURE_LAYERING
- RBD_FEATURE_EXCLUSIVE_LOCK
- RBD_FEATURE_STRIPINGV2
- RBD_FEATURE_OBJECT_MAP
- RBD_FEATURE_FAST_DIFF
- RBD_FEATURE_DEEP_FLATTEN
cronJob:
activeDeadlineSeconds: null
startingDeadlineSeconds: null
crontab:
- name: backup-data
schedule: "00 22 * * *"
command:
- benji-backup-pvc
- --selector
- 'benji-backup.me/instance=benji-k8s'
- name: benji-enforce
schedule: "30 22 * * *"
command:
- benji-command
- enforce
- days14
- 'labels["benji-backup.me/instance"] == "benji-k8s"'
- name: cleanup
schedule: "00 23 * * *"
command:
- benji-command
- cleanup
volumes:
- name: ceph-etc
configMap:
name: benji-ceph-etc
defaultMode: 0444
- name: ceph-keyring
secret:
secretName: rook-ceph-admin-keyring
defaultMode: 0444
- name: nfs-backups-benji
persistentVolumeClaim:
claimName: nfs-backups-benji
volumeMounts:
- name: ceph-etc
mountPath: /etc/ceph/ceph.conf
subPath: ceph.conf
readOnly: true
- name: ceph-keyring
mountPath: /etc/ceph/keyring
subPath: keyring
readOnly: true
- name: nfs-backups-benji
mountPath: /mnt/storage/backups/benji
fsfreeze:
enabled: true
postgresql:
enabled: true
postgresqlUsername: benji
postgresqlDatabase: benji
postgresqlPassword: secret
pushgateway:
image:
registry: docker.io
repository: prom/pushgateway
tag: v1.4.1
pullPolicy: IfNotPresent
nameOverride: pushgateway

View File

@@ -0,0 +1,9 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- configmap.yaml
- volume.yaml
- helm-release.yaml
- podmonitor.yaml
- pgbackups.yaml

View File

@@ -0,0 +1,60 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pgbackups
namespace: rook-ceph
labels:
app.kubernetes.io/instance: pgbackups
app.kubernetes.io/name: pgbackups
spec:
selector:
matchLabels:
app.kubernetes.io/instance: pgbackups
app.kubernetes.io/name: pgbackups
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/instance: pgbackups
app.kubernetes.io/name: pgbackups
spec:
imagePullSecrets:
- name: regcred
containers:
- name: pgbackups
#image: prodrigestivill/postgres-backup-local:13
image: registry.${SECRET_CLUSTER_DOMAIN}/homelab/postgres-backup-local:1.0.0
env:
- name: POSTGRES_HOST
value: benji-postgresql-headless
- name: POSTGRES_DB
value: benji
- name: POSTGRES_USER
value: benji
- name: POSTGRES_PASSWORD
value: secret
- name: POSTGRES_EXTRA_OPTS
value: "-Z9 --schema=public --blobs"
- name: SCHEDULE
value: "@daily"
- name: BACKUP_KEEP_DAYS
value: "14"
- name: HEALTHCHECK_PORT
value: "8080"
- name: POST_BACKUP_HOOK
value: "curl -m 10 --retry 5 http://healthchecks.monitoring.svc.cluster.local:8000/ping/ce94dbce-de51-4823-a54f-a2f960288f4b"
resources:
requests:
cpu: 150m
memory: 256Mi
ports:
- containerPort: 8080
volumeMounts:
- name: nfs-backups-benji
mountPath: /backups
subPath: postgresql
volumes:
- name: nfs-backups-benji
persistentVolumeClaim:
claimName: nfs-backups-benji

View File

@@ -0,0 +1,16 @@
---
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: benji
namespace: rook-ceph
spec:
podMetricsEndpoints:
- interval: 10m
path: /metrics
port: metrics
scrapeTimeout: 2m
selector:
matchLabels:
app: pushgateway
release: benji

View File

@@ -0,0 +1,34 @@
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-backups-benji
spec:
storageClassName: nfs-backups-benji
capacity:
storage: 1Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: ${LOCAL_LAN_TRUENAS}
path: /mnt/storage/backups/benji
mountOptions:
- tcp
- intr
- hard
- noatime
- nodiratime
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-backups-benji
namespace: rook-ceph
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-backups-benji
resources:
requests:
storage: 1Mi

View File

@@ -0,0 +1,5 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- benji

View File

@@ -0,0 +1,17 @@
---
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: benji-charts
namespace: flux-system
spec:
interval: 1h
url: https://github.com/elemental-lf/benji
timeout: 3m
ref:
branch: master
ignore: |
# exclude all
/*
# include charts directory
!/charts/

View File

@@ -4,6 +4,7 @@ kind: Kustomization
resources: resources:
- authelia-charts.yaml - authelia-charts.yaml
- authentik-charts.yaml - authentik-charts.yaml
- benji-charts.yaml
- bitnami-charts.yaml - bitnami-charts.yaml
- cert-manager-webhook-ovh.yaml - cert-manager-webhook-ovh.yaml
- drone-charts.yaml - drone-charts.yaml