Aller au contenu

Gitea Backup / Restore#

Source : gitea.io

Gitea possède des données persistantes à sauvegarder :

  • De Flat files (Dépôts Git, avatars, SSH Keys, etc.)
  • D'un dump de base de données PostgreSQL.

L'outil de sauvegarde / restauration utilisé est Velero.

Note

En prérequis, cette procédure nécessite l'installation de velero via toolbox.

Note

Il est important pour garder la consistance des données clientes, de sauvegarder les flat files et la base PostgreSQL dans le même processus de sauvegarde.

Sauvegarde#

Les sauvegardes de Gitea sont complètes et utilisent le mécanisme interne de sauvegarde.

Lancer une sauvegarde manuelle#

Il est possible de déclencher manuellement une sauvegarde (Utile avant une opération sur des données clientes par exemple) en s'appuyant sur le modèle de sauvegarde existant gitea-daily-schedule et sur le client Velero :

export ZONE_NAME="ocb-example"
kswitch "${ZONE_NAME}"
velero backup create --from-schedule gitea-daily-schedule

Une tâche de sauvegarde est ainsi créée, suffixée avec le timestamp relatif à l'heure de début de cette sauvegarde, par exemple gitea-daily-schedule-20220802163726

Surveiller l'avancement de la sauvegarde :

watch -n 2 'velero backup get gitea-daily-schedule-<TIMESTAMP>'

Une fois la tâche terminée, vérifier le rapport de sauvegarde :

velero backup describe gitea-daily-schedule-<TIMESTAMP> --details

Cette sauvegarde sera conservée pendant la durée de TTL (par ex 168h soit 7 jours).

Restauration#

Note

Granularité de restauration : Il n'est pas possible pour l'heure, de ne restaurer qu'une partie des données. On restaurera donc la totalité de ces données (Flat files & Dump de base de données).

Note

Il n'existe pas de mécanisme de restauration interne à Gitea (contrairement à la sauvegarde), ce qui explique que nous utiliserons un script externe pour restauration.

Redéployer le composant Gitea (Il n'est pas nécessaire de déployer gitea_provision car nous allons restaurer toutes les données par la suite) :

export ZONE_NAME="ocb-example"
kswitch "${ZONE_NAME}"

kubectl delete ns gitea

trackbone apply -z ${ZONE_NAME} -c gitea

Note

Velero ne peut restaurer les PV/PVC que s'ils n'existent plus. C'est pourquoi nous supprimons le PVC qui contient le dump Gitea afin qu'il soit restauré par velero.

Supprimer le PVC gitea-data-backup (Ce qui implique de supprimer le deployment gitea en prérequis) :

kubectl -n gitea delete deployment gitea
kubectl -n gitea delete pvc gitea-data-backup

Créer et exécuter la tâche de restauration à partir d'une sauvegarde existante :

velero backup get

velero restore create recovery --from-backup gitea-daily-schedule-<TIMESTAMP> --wait

Il est possible de suivre les logs de velero pour avoir plus d'information sur cette restauration :

kubectl logs -n velero velero-<ID> -f

Une fois la restauration terminée, on arrive à récupérer le dump dans le PVC gitea-data-backup.

On peut voir les éléments restaurés :

velero restore describe recovery --details

Il nous reste donc à déployer ce dump au sein du composant Gitea en exécutant le script de restauration :

kubectl -n gitea exec -it gitea-<ID> -- /opt/gitea-restore.bash

Et à redémarrer le pod Gitea pour relancer l'application :

kubectl -n gitea delete pods -l app=gitea

Se connecter de nouveau au Gitea pour vérifier le bon fonctionnement de l'application.