feat(backup): add backup script and refactor cron job to use it
This commit is contained in:
@@ -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"
|
||||||
Reference in New Issue
Block a user