Add minio and setup backups
- Fix pgdump backups by adding needed secret - Ensure nested kustomizations grab pgdump and minio
This commit is contained in:
parent
9c840cbaaf
commit
2e57d7f308
13 changed files with 280 additions and 3 deletions
|
@ -1,7 +1,7 @@
|
||||||
apiVersion: secrets.infisical.com/v1alpha1
|
apiVersion: secrets.infisical.com/v1alpha1
|
||||||
kind: InfisicalSecret
|
kind: InfisicalSecret
|
||||||
metadata:
|
metadata:
|
||||||
name: core-postgres-secrets
|
name: core-secrets
|
||||||
namespace: infisical
|
namespace: infisical
|
||||||
labels:
|
labels:
|
||||||
label-to-be-passed-to-managed-secret: homelab
|
label-to-be-passed-to-managed-secret: homelab
|
||||||
|
@ -16,12 +16,12 @@ spec:
|
||||||
secretsScope:
|
secretsScope:
|
||||||
projectSlug: homelab-n-f-yj
|
projectSlug: homelab-n-f-yj
|
||||||
envSlug: prod
|
envSlug: prod
|
||||||
secretsPath: "/core/postgres" # Root is "/"
|
secretsPath: "/core" # Root is "/"
|
||||||
recursive: true # Whether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false
|
recursive: true # Whether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false
|
||||||
credentialsRef:
|
credentialsRef:
|
||||||
secretName: universal-auth-credentials
|
secretName: universal-auth-credentials
|
||||||
secretNamespace: infisical
|
secretNamespace: infisical
|
||||||
managedSecretReference:
|
managedSecretReference:
|
||||||
secretName: postgres-secrets
|
secretName: core-secrets
|
||||||
secretNamespace: core
|
secretNamespace: core
|
||||||
creationPolicy: "Orphan" ## Owner | Orphan
|
creationPolicy: "Orphan" ## Owner | Orphan
|
|
@ -3,7 +3,10 @@ kind: Kustomization
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
|
- core-secrets.yaml
|
||||||
- postgres/
|
- postgres/
|
||||||
- redis/
|
- redis/
|
||||||
- tika/
|
- tika/
|
||||||
- gotenburg/
|
- gotenburg/
|
||||||
|
- pgdump/
|
||||||
|
- minio/
|
||||||
|
|
20
namespaces/core/minio/extras/server-route.yaml
Normal file
20
namespaces/core/minio/extras/server-route.yaml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1
|
||||||
|
kind: HTTPRoute
|
||||||
|
metadata:
|
||||||
|
name: server-route
|
||||||
|
spec:
|
||||||
|
parentRefs:
|
||||||
|
- name: homelab-gateway
|
||||||
|
sectionName: minio
|
||||||
|
kind: Gateway
|
||||||
|
namespace: homelab
|
||||||
|
hostnames:
|
||||||
|
- minio.leechpepin.com
|
||||||
|
rules:
|
||||||
|
- matches:
|
||||||
|
- path:
|
||||||
|
type: PathPrefix
|
||||||
|
value: /
|
||||||
|
backendRefs:
|
||||||
|
- name: minio-server-svc
|
||||||
|
port: 9000
|
11
namespaces/core/minio/extras/server-svc.yaml
Normal file
11
namespaces/core/minio/extras/server-svc.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: server-svc
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 9000
|
||||||
|
name: minio
|
||||||
|
targetPort: minio
|
||||||
|
protocol: TCP
|
139
namespaces/core/minio/kustomization.yaml
Normal file
139
namespaces/core/minio/kustomization.yaml
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
transformers:
|
||||||
|
- |-
|
||||||
|
apiVersion: builtin
|
||||||
|
kind: NamespaceTransformer
|
||||||
|
metadata:
|
||||||
|
name: notImportantHere
|
||||||
|
namespace: core
|
||||||
|
unsetOnly: true
|
||||||
|
|
||||||
|
namePrefix: minio-
|
||||||
|
resources:
|
||||||
|
- ../../../kustomize/statefulset/
|
||||||
|
- extras/server-svc.yaml
|
||||||
|
- extras/server-route.yaml
|
||||||
|
|
||||||
|
labels:
|
||||||
|
- includeSelectors: true
|
||||||
|
pairs:
|
||||||
|
app.kubernetes.io/appName: minio
|
||||||
|
- pairs:
|
||||||
|
app.kubernetes.io/appNamespace: core
|
||||||
|
|
||||||
|
patches:
|
||||||
|
- path: patches/statefulset.yaml
|
||||||
|
target:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: ss
|
||||||
|
|
||||||
|
replacements:
|
||||||
|
- source:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: ss
|
||||||
|
fieldPath: metadata.labels.[app.kubernetes.io/appNamespace]
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: InfisicalSecret
|
||||||
|
fieldPaths:
|
||||||
|
- spec.managedSecretReference.secretNamespace
|
||||||
|
- select:
|
||||||
|
kind: InfisicalSecret
|
||||||
|
options:
|
||||||
|
delimiter: "/"
|
||||||
|
index: 1
|
||||||
|
fieldPaths:
|
||||||
|
- spec.authentication.universalAuth.secretsScope.secretsPath
|
||||||
|
- source:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: ss
|
||||||
|
fieldPath: metadata.labels.[app.kubernetes.io/appName]
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: StatefulSet
|
||||||
|
options:
|
||||||
|
delimiter: "-"
|
||||||
|
index: 0
|
||||||
|
fieldPaths:
|
||||||
|
- spec.volumeClaimTemplates.0.metadata.annotations.name
|
||||||
|
- spec.volumeClaimTemplates.0.metadata.name
|
||||||
|
- spec.serviceName
|
||||||
|
- select:
|
||||||
|
kind: InfisicalSecret
|
||||||
|
options:
|
||||||
|
delimiter: "-"
|
||||||
|
index: 0
|
||||||
|
fieldPaths:
|
||||||
|
- spec.managedSecretReference.secretName
|
||||||
|
- select:
|
||||||
|
kind: InfisicalSecret
|
||||||
|
options:
|
||||||
|
delimiter: "/"
|
||||||
|
index: 2
|
||||||
|
fieldPaths:
|
||||||
|
- spec.authentication.universalAuth.secretsScope.secretsPath
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: https
|
||||||
|
options:
|
||||||
|
create: true
|
||||||
|
delimiter: "."
|
||||||
|
index: 0
|
||||||
|
fieldPaths:
|
||||||
|
- spec.hostnames.0
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: http
|
||||||
|
options:
|
||||||
|
create: true
|
||||||
|
delimiter: "."
|
||||||
|
index: 0
|
||||||
|
fieldPaths:
|
||||||
|
- spec.hostnames.0
|
||||||
|
- source:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: ss
|
||||||
|
fieldPath: spec.template.spec.containers.0.ports.0.name
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Service
|
||||||
|
name: svc
|
||||||
|
fieldPaths:
|
||||||
|
- spec.ports.0.name
|
||||||
|
- spec.ports.0.targetPort
|
||||||
|
- source:
|
||||||
|
kind: Service
|
||||||
|
name: svc
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: http
|
||||||
|
fieldPaths:
|
||||||
|
- spec.rules.0.backendRefs.0.name
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: https
|
||||||
|
fieldPaths:
|
||||||
|
- spec.rules.0.backendRefs.0.name
|
||||||
|
- source:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: ss
|
||||||
|
fieldPath: spec.template.spec.containers.0.ports.0.containerPort
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Service
|
||||||
|
name: svc
|
||||||
|
fieldPaths:
|
||||||
|
- spec.ports.0.port
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: http
|
||||||
|
fieldPaths:
|
||||||
|
- spec.rules.0.backendRefs.0.port
|
||||||
|
- select:
|
||||||
|
kind: HTTPRoute
|
||||||
|
name: https
|
||||||
|
fieldPaths:
|
||||||
|
- spec.rules.0.backendRefs.0.port
|
41
namespaces/core/minio/patches/statefulset.yaml
Normal file
41
namespaces/core/minio/patches/statefulset.yaml
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: app
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
restartPolicy: Always
|
||||||
|
containers:
|
||||||
|
- name: minio
|
||||||
|
image: quay.io/minio/minio:latest
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- -c
|
||||||
|
args:
|
||||||
|
- minio server /data --console-address ":80"
|
||||||
|
env:
|
||||||
|
- name: MINIO_ROOT_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: minio-secrets
|
||||||
|
key: ROOT_PASSWORD
|
||||||
|
optional: false
|
||||||
|
- name: MINIO_ROOT_USER
|
||||||
|
value: minio
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: minio-data
|
||||||
|
subPath: "data"
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
name: console
|
||||||
|
- containerPort: 9000
|
||||||
|
protocol: TCP
|
||||||
|
name: minio
|
||||||
|
volumes:
|
||||||
|
- name: minio-data
|
||||||
|
hostPath:
|
||||||
|
path: /data/minio
|
||||||
|
type: DirectoryOrCreate
|
|
@ -71,3 +71,17 @@ spec:
|
||||||
name: forgejo-ssh
|
name: forgejo-ssh
|
||||||
port: 2222
|
port: 2222
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
- allowedRoutes:
|
||||||
|
namespaces:
|
||||||
|
from: Selector
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
homelab-access: "true"
|
||||||
|
name: minio
|
||||||
|
port: 9000
|
||||||
|
protocol: HTTPS
|
||||||
|
tls:
|
||||||
|
mode: Terminate
|
||||||
|
certificateRefs:
|
||||||
|
- kind: Secret
|
||||||
|
name: wildcard-leechpepin-tls
|
||||||
|
|
13
namespaces/longhorn/longhorn/extras/longhorn-backupjob.yaml
Normal file
13
namespaces/longhorn/longhorn/extras/longhorn-backupjob.yaml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
apiVersion: longhorn.io/v1beta1
|
||||||
|
kind: RecurringJob
|
||||||
|
metadata:
|
||||||
|
name: daily-backup
|
||||||
|
spec:
|
||||||
|
cron: "0 23 * * *" # Daily at 11pm
|
||||||
|
task: "backup"
|
||||||
|
groups:
|
||||||
|
- default
|
||||||
|
retain: 3 # Keep last 7 backups
|
||||||
|
concurrency: 2
|
||||||
|
labels:
|
||||||
|
type: scheduled-backup
|
|
@ -10,3 +10,4 @@ parameters:
|
||||||
dataLocality: "best-effort"
|
dataLocality: "best-effort"
|
||||||
diskSelector: "private"
|
diskSelector: "private"
|
||||||
nodeSelector: "private"
|
nodeSelector: "private"
|
||||||
|
# recurringJobSelector: '[{"name":"backup-all-volumes","isGroup":true}]'
|
||||||
|
|
|
@ -9,3 +9,4 @@ parameters:
|
||||||
numberOfReplicas: "2"
|
numberOfReplicas: "2"
|
||||||
dataLocality: "best-effort"
|
dataLocality: "best-effort"
|
||||||
diskSelector: "public"
|
diskSelector: "public"
|
||||||
|
# recurringJobSelector: '[{"name":"backup-all-volumes","isGroup":true}]'
|
||||||
|
|
27
namespaces/longhorn/longhorn/extras/longhorn-secret.yaml
Normal file
27
namespaces/longhorn/longhorn/extras/longhorn-secret.yaml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
apiVersion: secrets.infisical.com/v1alpha1
|
||||||
|
kind: InfisicalSecret
|
||||||
|
metadata:
|
||||||
|
name: longhorn-minio-secrets
|
||||||
|
namespace: infisical
|
||||||
|
labels:
|
||||||
|
label-to-be-passed-to-managed-secret: homelab
|
||||||
|
annotations:
|
||||||
|
example.com/annotation-to-be-passed-to-managed-secret: "homelab"
|
||||||
|
spec:
|
||||||
|
hostAPI: https://app.infisical.com/api
|
||||||
|
resyncInterval: 10
|
||||||
|
authentication:
|
||||||
|
# Universal Auth
|
||||||
|
universalAuth:
|
||||||
|
secretsScope:
|
||||||
|
projectSlug: homelab-n-f-yj
|
||||||
|
envSlug: prod
|
||||||
|
secretsPath: "/longhorn/longhorn" # Root is "/"
|
||||||
|
recursive: true # Whether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false
|
||||||
|
credentialsRef:
|
||||||
|
secretName: universal-auth-credentials
|
||||||
|
secretNamespace: infisical
|
||||||
|
managedSecretReference:
|
||||||
|
secretName: longhorn-minio-secrets
|
||||||
|
secretNamespace: longhorn
|
||||||
|
creationPolicy: "Orphan" ## Owner | Orphan
|
|
@ -15,6 +15,8 @@ resources:
|
||||||
- ../../../kustomize/helmchart
|
- ../../../kustomize/helmchart
|
||||||
- extras/longhorn-public-storageclass.yaml
|
- extras/longhorn-public-storageclass.yaml
|
||||||
- extras/longhorn-private-storageclass.yaml
|
- extras/longhorn-private-storageclass.yaml
|
||||||
|
- extras/longhorn-secret.yaml
|
||||||
|
- extras/longhorn-backupjob.yaml
|
||||||
|
|
||||||
patches:
|
patches:
|
||||||
- path: patches/chart.yaml
|
- path: patches/chart.yaml
|
||||||
|
|
|
@ -34,6 +34,11 @@ spec:
|
||||||
default: true
|
default: true
|
||||||
port: 2222
|
port: 2222
|
||||||
exposedPort: 2222
|
exposedPort: 2222
|
||||||
|
minio:
|
||||||
|
expose:
|
||||||
|
default: true
|
||||||
|
port: 9000
|
||||||
|
exposedPort: 9000
|
||||||
service:
|
service:
|
||||||
annotations:
|
annotations:
|
||||||
svccontroller.k3s.cattle.io/tolerations: |
|
svccontroller.k3s.cattle.io/tolerations: |
|
||||||
|
|
Loading…
Add table
Reference in a new issue