k8s/ manifest added
Some checks failed
Docker Build Workflow / Lint Dockerfile (push) Failing after 4s
Docker Build Workflow / Build and Push Docker Image (push) Successful in 40s

This commit is contained in:
2026-04-11 22:24:49 +02:00
parent 6d19f77edf
commit f39704ed87
8 changed files with 193 additions and 7 deletions

23
k8s/configmap/config.yaml Normal file
View File

@@ -0,0 +1,23 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: rclone-config
namespace: rook-ceph-s3-backup
data:
rclone.conf: |
[ceph]
type = s3
provider = Ceph
access_key_id = CHANGE_ME
secret_access_key = CHANGE_ME
endpoint = http://rook-ceph-rgw-s3.rook-ceph.svc:80
acl = private
[rustfs]
type = s3
provider = Other
access_key_id = CHANGE_ME
secret_access_key = CHANGE_ME
acl = private
region = other-v2-signature
endpoint = https://rustfs.example.org

38
k8s/configmap/script.yaml Normal file
View File

@@ -0,0 +1,38 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: rclone-sync-script
namespace: rook-ceph-s3-backup
data:
rclone-sync-script.sh: |
#!/usr/bin/env sh
set -eu
SRC_REMOTE="ceph:"
DST_REMOTE="rustfs:ceph-s3-backup" #
BUCKETS=$(kubectl get ObjectBucketClaim -A \
-o jsonpath='{range .items[*]}{.spec.bucketName}{"\n"}{end}' \
| sort -u)
if [ -z "$BUCKETS" ]; then
echo "No buckets found"
exit 0
fi
echo "$BUCKETS" | while IFS= read -r bucket; do
[ -z "$bucket" ] && continue
echo "Syncing: $bucket"
rclone sync \
"${SRC_REMOTE}${bucket}" \
"${DST_REMOTE}/${bucket}" \
--transfers 4 \
--checkers 8 \
--log-level INFO
done
echo "Done"

51
k8s/cronjob.yaml Normal file
View File

@@ -0,0 +1,51 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: rook-ceph-s3-backup-daily
namespace: rook-ceph-s3-backup
spec:
schedule: '15 8 * * *'
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
backoffLimit: 1
template:
metadata:
labels:
app: rclone-tools
spec:
restartPolicy: Never
serviceAccountName: rook-ceph-s3-backup
containers:
- name: rclone
image: gitea.sikorski.cloud/rogersik/ceph-s3-backup:latest
imagePullPolicy: IfNotPresent
env:
- name: HOME
value: /root
command:
- sh
- -c
- |
set -euo pipefail
# Execute sync script
/usr/local/bin/rclone-sync-script.sh
volumeMounts:
- name: rclone-sync-script
mountPath: /usr/local/bin/rclone-sync-script.sh
subPath: rclone-sync-script.sh
readOnly: true
- name: rclone-config
mountPath: /root/.config/rclone/rclone.conf
subPath: rclone.conf
volumes:
- name: rclone-sync-script
configMap:
name: rclone-sync-script
defaultMode: 0755
- name: rclone-config
configMap:
name: rclone-config

47
k8s/deployment.yaml Normal file
View File

@@ -0,0 +1,47 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rclone-tools
namespace: rook-ceph-s3-backup
annotations:
reloader.stakater.com/auto: 'true'
spec:
replicas: 1
selector:
matchLabels:
app: rclone-tools
template:
metadata:
labels:
app: rclone-tools
spec:
serviceAccountName: rook-ceph-s3-backup
containers:
- name: rclone
image: gitea.sikorski.cloud/rogersik/ceph-s3-backup:latest
imagePullPolicy: IfNotPresent
env:
- name: HOME
value: /root
command:
- sh
- -c
- |
sleep infinity
volumeMounts:
- name: rclone-sync-script
mountPath: /usr/local/bin/rclone-sync-script.sh
subPath: rclone-sync-script.sh
readOnly: true
- name: rclone-config
mountPath: /root/.config/rclone/rclone.conf
subPath: rclone.conf
volumes:
- name: rclone-sync-script
configMap:
name: rclone-sync-script
defaultMode: 0755
- name: rclone-config
configMap:
name: rclone-config

View File

@@ -0,0 +1,9 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: rook-ceph-s3-backup
rules:
- apiGroups: ['objectbucket.io']
resources: ['objectbucketclaims']
verbs: ['get', 'list', 'watch']

View File

@@ -0,0 +1,13 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: rook-ceph-s3-backup
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: rook-ceph-s3-backup
subjects:
- kind: ServiceAccount
name: rook-ceph-s3-backup
namespace: rook-ceph-s3-backup

View File

@@ -0,0 +1,6 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: rook-ceph-s3-backup
namespace: rook-ceph-s3-backup