feat(backup): add backup script and refactor cron job to use it

This commit is contained in:
2025-05-10 19:06:25 +02:00
parent bbc4fef0e8
commit 9e45ff6376
2 changed files with 64 additions and 8 deletions
+32 -8
View File
@@ -29,6 +29,16 @@ resource "kubernetes_config_map" "rclone_config" {
} }
} }
resource "kubernetes_config_map" "backup_script" {
metadata {
name = "${var.app_name}-backup-script"
namespace = var.namespace
}
data = {
"backup.sh" = file("${path.module}/resources/backup.sh")
}
}
resource "kubernetes_cron_job_v1" "backup_job" { resource "kubernetes_cron_job_v1" "backup_job" {
metadata { metadata {
name = "${var.app_name}-backup" name = "${var.app_name}-backup"
@@ -112,16 +122,10 @@ resource "kubernetes_cron_job_v1" "backup_job" {
value = var.bucket_name value = var.bucket_name
} }
command = ["/bin/sh", "-c"] command = ["/bin/sh", "-c"]
args = [join(";", [ args = ["/tmp/scripts/backup.sh"]
"apk update",
"apk add gettext",
"envsubst</etc/rclone.conf.tmpl>/etc/rclone.conf",
"tar -zcvpf /backup/${var.app_name}-files-`date +\"%Y%m%d\"`.tar.gz /files",
"find /backup -type f -name '${var.app_name}-files-*.tar.gz' -mtime +${var.retention_days} | xargs --no-run-if-empty rm",
"/usr/local/bin/rclone --config=/etc/rclone.conf sync --progress /backup scaleway:$BUCKET_NAME/${var.app_name}-backup"
])]
security_context { security_context {
allow_privilege_escalation = false allow_privilege_escalation = false
read_only_root_filesystem = true
} }
volume_mount { volume_mount {
name = "backup-storage" name = "backup-storage"
@@ -138,6 +142,15 @@ resource "kubernetes_cron_job_v1" "backup_job" {
sub_path = "rclone.conf" sub_path = "rclone.conf"
read_only = true read_only = true
} }
volume_mount {
name = "backup-script"
mount_path = "/tmp/scripts"
read_only = true
}
volume_mount {
name = "tmp"
mount_path = "/tmp"
}
} }
volume { volume {
name = "backup-storage" name = "backup-storage"
@@ -157,6 +170,17 @@ resource "kubernetes_cron_job_v1" "backup_job" {
name = kubernetes_config_map.rclone_config.metadata[0].name name = kubernetes_config_map.rclone_config.metadata[0].name
} }
} }
volume {
name = "backup-script"
config_map {
name = kubernetes_config_map.backup_script.metadata[0].name
default_mode = "0755"
}
}
volume {
name = "tmp"
empty_dir {}
}
restart_policy = "Never" restart_policy = "Never"
termination_grace_period_seconds = 30 termination_grace_period_seconds = 30
} }
@@ -0,0 +1,32 @@
#!/bin/sh
if [ -z "$SCW_ACCESS_KEY" ] || [ -z "$SCW_SECRET_KEY" ]; then
echo "SCW_ACCESS_KEY and SCW_SECRET_KEY must be set"
exit 1
fi
if [ -z "$BUCKET_NAME" ]; then
echo "BUCKET_NAME must be set"
exit 1
fi
if [ -z "$APP_NAME" ]; then
echo "APP_NAME must be set"
exit 1
fi
if [ -z "$BACKUP_RETENTION" ]; then
echo "BACKUP_RETENTION must be set"
exit 1
fi
envsubst < /etc/rclone.conf.tmpl > /tmp/rclone.conf
unset $SCW_ACCESS_KEY
unset $SCW_SECRET_KEY
apk update
apk add gettext
tar -zcvpf /backup/$APP_NAME-files-`date +\"%Y%m%d\"`.tar.gz /files
# Remove old backups
BACKUP_FILE_PATTERN="$APP_NAME-files-*.tar.gz"
find /backup -type f -name $BACKUP_FILE_PATTERN -mtime +$BACKUP_RETENTION | xargs --no-run-if-empty rm
# Upload to Scaleway
/usr/local/bin/rclone --config=/tmp/rclone.conf sync --progress /backup scaleway:$BUCKET_NAME/$APP_NAME-backup"