feat(velero): Argo app + Helm values for Kopia/Hetzner S3 backups (DEV-572)
- apps/app-velero.yaml: Argo Application, path apps/velero, ns velero, CreateNamespace + ServerSideApply (chart uses long CRDs). - apps/velero/Chart.yaml: pinned vmware-tanzu velero chart 12.1.0 (appVersion 1.18.1). - apps/velero/values.yaml: Kopia uploader, no CSI, node-agent enabled, AWS S3 provider -> https://hel1.your-objectstorage.com, dedicated bucket basicstack-velero (per DEV-570), BSL credential velero-s3-credentials/cloud, Kopia repo password auto-picked from velero-repo-credentials/repository-password. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
parent
f318719c59
commit
b3d98bf902
3 changed files with 133 additions and 0 deletions
21
apps/app-velero.yaml
Normal file
21
apps/app-velero.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: velero
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: git@forgejo.forgejo.svc.cluster.local:basicstack/stack.basicstack.de.git
|
||||||
|
targetRevision: main
|
||||||
|
path: apps/velero
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: velero
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: false
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ServerSideApply=true
|
||||||
11
apps/velero/Chart.yaml
Normal file
11
apps/velero/Chart.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: v2
|
||||||
|
name: velero
|
||||||
|
description: Velero cluster-reconstruction backups for BasicStack (Kopia + Hetzner S3)
|
||||||
|
type: application
|
||||||
|
version: 1.0.0
|
||||||
|
appVersion: "1.18.1"
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- name: velero
|
||||||
|
version: 12.1.0
|
||||||
|
repository: https://vmware-tanzu.github.io/helm-charts
|
||||||
101
apps/velero/values.yaml
Normal file
101
apps/velero/values.yaml
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
velero:
|
||||||
|
# Pinned chart version 12.1.0 (Velero appVersion 1.18.1).
|
||||||
|
# AWS plugin follows Velero minor version: v1.14.x for Velero 1.18.x.
|
||||||
|
image:
|
||||||
|
repository: velero/velero
|
||||||
|
tag: v1.18.1
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# Bring the AWS object-storage plugin in as an initContainer that copies
|
||||||
|
# the binary into /plugins so the Velero server can load it.
|
||||||
|
initContainers:
|
||||||
|
- name: velero-plugin-for-aws
|
||||||
|
image: velero/velero-plugin-for-aws:v1.14.3
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /target
|
||||||
|
name: plugins
|
||||||
|
|
||||||
|
# Kopia file-system backup requires the node-agent daemonset on every
|
||||||
|
# node whose PVC data we back up.
|
||||||
|
deployNodeAgent: true
|
||||||
|
|
||||||
|
# BackupStorageLocation credentials come from the SealedSecret
|
||||||
|
# apps/velero/velero-s3-credentials-sealed.yaml (key: cloud, INI format
|
||||||
|
# with aws_access_key_id / aws_secret_access_key for the dedicated
|
||||||
|
# `velero-prod` Hetzner OS credential from DEV-570).
|
||||||
|
credentials:
|
||||||
|
useSecret: true
|
||||||
|
existingSecret: velero-s3-credentials
|
||||||
|
|
||||||
|
# Kopia backup-repository password (velero-repo-credentials Secret,
|
||||||
|
# key `repository-password`) is auto-discovered by Velero — this is a
|
||||||
|
# hard-coded constant in the Velero server (see pkg/repository/keys),
|
||||||
|
# so no extra wiring is needed. SealedSecret lives at
|
||||||
|
# apps/velero/velero-repo-credentials-sealed.yaml.
|
||||||
|
|
||||||
|
# Turn OFF volume-snapshot CRDs — Hetzner Cloud Volumes have no CSI
|
||||||
|
# snapshot support, so filesystem backup via Kopia is the only path.
|
||||||
|
snapshotsEnabled: false
|
||||||
|
backupsEnabled: true
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
# Kopia uploader (unified repo). This is the Velero server default in
|
||||||
|
# 1.18 but we set it explicitly so any future default change does not
|
||||||
|
# silently rewrite our repos to restic.
|
||||||
|
uploaderType: kopia
|
||||||
|
|
||||||
|
# No CSI feature flag — see snapshotsEnabled comment above.
|
||||||
|
features: ""
|
||||||
|
|
||||||
|
backupStorageLocation:
|
||||||
|
- name: default
|
||||||
|
provider: aws
|
||||||
|
bucket: basicstack-velero
|
||||||
|
default: true
|
||||||
|
credential:
|
||||||
|
name: velero-s3-credentials
|
||||||
|
key: cloud
|
||||||
|
config:
|
||||||
|
# Hetzner Object Storage in Helsinki (hel1). Region is used by
|
||||||
|
# the AWS SDK signer; endpoint overrides the AWS endpoint URL.
|
||||||
|
region: hel1
|
||||||
|
s3ForcePathStyle: "false"
|
||||||
|
s3Url: https://hel1.your-objectstorage.com
|
||||||
|
# publicUrl left unset — this backend is not user-facing.
|
||||||
|
|
||||||
|
# No volumeSnapshotLocation entries — snapshotsEnabled: false above
|
||||||
|
# already suppresses the default snapshot location CRD.
|
||||||
|
|
||||||
|
# Small resource footprint until we know real backup sizing (DEV-573).
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
nodeAgent:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1Gi
|
||||||
|
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Do not install the bundled `velero` CLI kubectl image — we run the
|
||||||
|
# CLI from cp-1.
|
||||||
|
kubectl:
|
||||||
|
image:
|
||||||
|
repository: bitnami/kubectl
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
# No schedules here — those live in DEV-573.
|
||||||
|
schedules: {}
|
||||||
Loading…
Add table
Reference in a new issue