diff --git a/kubernetes/common/apps/volsync-system/kustomization.yaml b/kubernetes/common/apps/volsync-system/kustomization.yaml new file mode 100644 index 0000000..77b6b56 --- /dev/null +++ b/kubernetes/common/apps/volsync-system/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ./namespace.yaml +- ./snapshot-controller/ks.yaml +- ./volsync/ks.yaml \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/namespace.yaml b/kubernetes/common/apps/volsync-system/namespace.yaml new file mode 100644 index 0000000..b619e7a --- /dev/null +++ b/kubernetes/common/apps/volsync-system/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: volsync-system \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-release.yaml b/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-release.yaml new file mode 100644 index 0000000..3ddeabe --- /dev/null +++ b/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-release.yaml @@ -0,0 +1,28 @@ +# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/helm.toolkit.fluxcd.io/helmrelease_v2.json +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: snapshot-controller + namespace: volsync-system +spec: + interval: 30m + timeout: 15m + chart: + spec: + chart: snapshot-controller + version: 3.0.6 + sourceRef: + kind: HelmRepository + name: piraeus + namespace: flux-system + install: + remediation: + retries: 3 + upgrade: + cleanupOnFail: true + remediation: + strategy: rollback + retries: 3 + values: + webhook: + enabled: false \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-repo.yaml b/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-repo.yaml new file mode 100644 index 0000000..91c9108 --- /dev/null +++ b/kubernetes/common/apps/volsync-system/snapshot-controller/app/helm-repo.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: piraeus + namespace: flux-system +spec: + interval: 1m + url: https://piraeus.io/helm-charts/ \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/snapshot-controller/app/kustomization.yaml b/kubernetes/common/apps/volsync-system/snapshot-controller/app/kustomization.yaml new file mode 100644 index 0000000..7ae893a --- /dev/null +++ b/kubernetes/common/apps/volsync-system/snapshot-controller/app/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ./helm-repo.yaml +- ./helm-release.yaml \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/snapshot-controller/ks.yaml b/kubernetes/common/apps/volsync-system/snapshot-controller/ks.yaml new file mode 100644 index 0000000..2baedde --- /dev/null +++ b/kubernetes/common/apps/volsync-system/snapshot-controller/ks.yaml @@ -0,0 +1,19 @@ +# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: volsync + namespace: flux-system +spec: + timeout: 5m + interval: 10m + #targetNamespace: volsync-system + path: ./kubernetes/common/apps/volsync-system/snapshot-controller/app + prune: true + sourceRef: + kind: GitRepository + name: home-cluster + decryption: + provider: sops + secretRef: + name: sops-gpg \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/volsync/app/helm-release.yaml b/kubernetes/common/apps/volsync-system/volsync/app/helm-release.yaml new file mode 100644 index 0000000..87cdc24 --- /dev/null +++ b/kubernetes/common/apps/volsync-system/volsync/app/helm-release.yaml @@ -0,0 +1,19 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: volsync + namespace: volsync-system +spec: + interval: 5m + chart: + spec: + chart: volsync + version: 0.10.0 + sourceRef: + kind: HelmRepository + name: backube + namespace: flux-system + values: + manageCRDs: true + metrics: + disableAuth: true \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/volsync/app/helm-repo.yaml b/kubernetes/common/apps/volsync-system/volsync/app/helm-repo.yaml new file mode 100644 index 0000000..1cae498 --- /dev/null +++ b/kubernetes/common/apps/volsync-system/volsync/app/helm-repo.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: backube + namespace: flux-system +spec: + interval: 1m + url: https://backube.github.io/helm-charts/ \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/volsync/app/kustomization.yaml b/kubernetes/common/apps/volsync-system/volsync/app/kustomization.yaml new file mode 100644 index 0000000..7ae893a --- /dev/null +++ b/kubernetes/common/apps/volsync-system/volsync/app/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ./helm-repo.yaml +- ./helm-release.yaml \ No newline at end of file diff --git a/kubernetes/common/apps/volsync-system/volsync/ks.yaml b/kubernetes/common/apps/volsync-system/volsync/ks.yaml new file mode 100644 index 0000000..8c5e38f --- /dev/null +++ b/kubernetes/common/apps/volsync-system/volsync/ks.yaml @@ -0,0 +1,19 @@ +# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: volsync + namespace: flux-system +spec: + timeout: 5m + interval: 10m + #targetNamespace: volsync-system + path: ./kubernetes/common/apps/volsync-system/volsync/app + prune: true + sourceRef: + kind: GitRepository + name: home-cluster + decryption: + provider: sops + secretRef: + name: sops-gpg \ No newline at end of file diff --git a/kubernetes/common/templates/volsync/b2.yaml b/kubernetes/common/templates/volsync/b2.yaml new file mode 100644 index 0000000..201b3c8 --- /dev/null +++ b/kubernetes/common/templates/volsync/b2.yaml @@ -0,0 +1,25 @@ +# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/volsync.backube/replicationsource_v1alpha1.json +apiVersion: volsync.backube/v1alpha1 +kind: ReplicationSource +metadata: + name: "${APP}-b2" +spec: + sourcePVC: "${APP}" + trigger: + schedule: "0 0 * * *" + restic: + copyMethod: "${VOLSYNC_COPYMETHOD:-Snapshot}" + pruneIntervalDays: 7 + repository: "${APP}-volsync-r2-secret" + volumeSnapshotClassName: "${VOLSYNC_SNAPSHOTCLASS:-longhorn}" + cacheCapacity: "${VOLSYNC_CACHE_CAPACITY:-4Gi}" + cacheStorageClassName: "${VOLSYNC_CACHE_SNAPSHOTCLASS:-mainpool-hostpath}" + cacheAccessModes: ["${VOLSYNC_CACHE_ACCESSMODES:-ReadWriteOnce}"] + storageClassName: "${VOLSYNC_STORAGECLASS:-mainpool-hostpath}" + accessModes: ["${VOLSYNC_ACCESSMODES:-ReadWriteOnce}"] + moverSecurityContext: + runAsUser: 10000 + runAsGroup: 10000 + fsGroup: 10000 + retain: + daily: 7 \ No newline at end of file diff --git a/kubernetes/common/templates/volsync/kustomization.yaml b/kubernetes/common/templates/volsync/kustomization.yaml new file mode 100644 index 0000000..02f9db4 --- /dev/null +++ b/kubernetes/common/templates/volsync/kustomization.yaml @@ -0,0 +1,6 @@ +# yaml-language-server: $schema=https://json.schemastore.org/kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ./pvc.yaml +- ./b2.yaml \ No newline at end of file diff --git a/kubernetes/common/templates/volsync/pvc.yaml b/kubernetes/common/templates/volsync/pvc.yaml new file mode 100644 index 0000000..2a93aa4 --- /dev/null +++ b/kubernetes/common/templates/volsync/pvc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: "${APP}" +spec: + accessModes: ["${VOLSYNC_ACCESSMODES:-ReadWriteOnce}"] + dataSourceRef: + kind: ReplicationDestination + apiGroup: volsync.backube + name: "${APP}-b2" + resources: + requests: + storage: "${VOLSYNC_CAPACITY}" + storageClassName: "${VOLSYNC_STORAGECLASS:-longhorn}" \ No newline at end of file