apiVersion: v1 kind: Template metadata: name: mariadb-backup-template annotations: description: 'Template for a DB container backup job on OKD 4.7' tags: 'database' parameters: - name: DATABASE_BACKUP_KEEP description: 'Number of backups to keep' value: '5' - name: DATABASE_BACKUP_SCHEDULE description: 'Cron-like schedule expression' value: '55 * * * *' - name: DATABASE_USER description: 'database user' required: true - name: DATABASE_PASSWORD description: 'database user password' required: true - name: DATABASE_HOST description: 'Hostname of DB server' required: true value: 'mariadb' - name: DATABASE_PORT description: 'DB Port' required: true value: '3306' - name: DATABASE_NAME description: 'Database to backup' required: true - name: DATABASE_BACKUP_VOLUME_CLAIM description: 'Name of the volume claim to be used as storage' required: true value: 'mariadb-backup' objects: - apiVersion: batch/v1beta1 kind: CronJob metadata: name: mariadb-backup spec: schedule: ${DATABASE_BACKUP_SCHEDULE} concurrencyPolicy: Forbid jobTemplate: spec: template: spec: volumes: - name: database-backup persistentVolumeClaim: claimName: ${DATABASE_BACKUP_VOLUME_CLAIM} containers: - name: database-backup image: 'image-registry.openshift-image-registry.svc:5000/openshift/mariadb:10.3' command: - 'bash' - '-eo' - 'pipefail' - '-c' - > trap "echo Backup failed; exit 0" ERR; FILENAME=backup-${DATABASE_NAME}-`date +%Y-%m-%d_%H%M%S`.sql.gz; time (find /database-backup -type f -name "backup-${DATABASE_NAME}-*" -exec ls -1tr "{}" + | head -n -${DATABASE_BACKUP_KEEP} | xargs rm -fr; mysqldump -u$DATABASE_USER -p$DATABASE_PASSWORD -h$DATABASE_HOST -P$DATABASE_PORT --skip-lock-tables --quick --add-drop-database --routines ${DATABASE_NAME} | gzip > /database-backup/$FILENAME); echo ""; echo "Backup successful"; du -h /database-backup/$FILENAME; echo "to restore the backup to the serviced host use: $ mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$DATABASE_HOST < /database-backup/ (unpacked)" env: - name: DATABASE_BACKUP_KEEP value: ${DATABASE_BACKUP_KEEP} - name: DATABASE_USER value: ${DATABASE_USER} - name: DATABASE_PASSWORD value: ${DATABASE_PASSWORD} - name: DATABASE_HOST value: ${DATABASE_HOST} - name: DATABASE_PORT value: ${DATABASE_PORT} - name: DATABASE_NAME value: ${DATABASE_NAME} - name: TZ value: Europe/Zurich volumeMounts: - name: database-backup mountPath: /database-backup restartPolicy: Never