# Backups

# **Contexte**

CEDILLE héberge de nombreuses applications et gère une grande quantité de données. Bien que les déploiements statiques (sites web statiques) ne nécessitent pas de sauvegardes, les bases de données et les services nécessitent une stratégie de sauvegarde robuste.

# Théorie des sauvegardes

## Définition des sauvegardes

Une sauvegarde (Backup) est une copie de données destinée à être utilisée pour restaurer l'original en cas de perte ou de corruption des données.

## Types de sauvegardes


1. **Full Backup :**
   * Une copie complète des données sélectionnées.
   * **Avantages :** Fiable et restauration simple.
   * **Inconvénients :** Chronophage et consomme beaucoup d'espace de stockage.
2. **Incremental Backup :**
   * Contient uniquement les données qui ont changé depuis la dernière sauvegarde, qu'elle soit complète ou incrémentielle.
   * **Avantages :** Plus rapide et nécessite moins d'espace de stockage après la première sauvegarde complète.
   * **Inconvénients :** La restauration peut être plus lente, car elle nécessite la sauvegarde complète originale et toutes les sauvegardes incrémentielles suivantes.
3. **Differential Backup :**
   * Contient les données qui ont changé depuis la dernière sauvegarde complète.
   * **Avantages :** Restauration plus rapide que les sauvegardes incrémentielles, car seules la dernière sauvegarde complète et la dernière sauvegarde différentielle sont nécessaires.
   * **Inconvénients :** L'utilisation de stockage augmente avec le temps jusqu'à ce que la prochaine sauvegarde complète soit effectuée.
4. **Synthetic Full Backup :**
   * Créée en fusionnant les précédentes sauvegardes incrémentielles et complètes pour produire une nouvelle sauvegarde complète.
   * **Avantages :** Réduit le temps requis pour sauvegarder les données et simplifie les opérations de restauration.
   * **Inconvénients :** Nécessite des ressources pour effectuer l'opération de fusion.

## Lieux de sauvegarde

* **Sauvegardes On-Premises (locales) :**
  * Les sauvegardes sont stockées localement, soit dans le même rack serveur, dans le même bâtiment, ou dans un autre bâtiment distant.
  * **Avantages :** Accès et récupération des données plus rapides.
  * **Inconvénients :** Vulnérabilité aux catastrophes locales, telles que les incendies ou les inondations.
* **Sauvegardes Cloud (distantes) :**
  * Les données sont stockées chez un fournisseur de cloud qui offre une haute résilience et redondance.
  * **Avantages :** Protège contre les catastrophes locales et inclut souvent des solutions automatisées et évolutives.
  * **Inconvénients :** Peut engendrer des coûts récurrents et une latence potentielle dans l'accès.

## La règle 3-2-1 en matière de sauvegarde

* **3 Copies de données :**
  * Maintenir les données originales avec au moins deux copies de sauvegarde.
  * **Raison :** Cette redondance assure que les données sont récupérables dans divers scénarios de défaillance, tels que la panne du matériel, la suppression accidentelle ou la corruption.
* **2 Types de supports différents :**
  * Utiliser deux technologies de stockage distinctes (par exemple, disques durs, bandes magnétiques, stockage en cloud).
  * **Raison :** Réduit le risque de défaillance simultanée provenant d'un point de défaillance unique ou de problèmes liés à la technologie.
* **1 copie hors site :**
  * Stocker au moins une sauvegarde dans un emplacement distinct et éloigné (p. ex., stockage en cloud ou un bâtiment différent).
  * **Raison :** Protège contre les catastrophes locales (p. ex., catastrophes naturelles, vol) qui pourraient affecter toutes les sauvegardes locales.

# Application pratique dans notre club

Tout ce qui doit être sauvegarder est déployé dans kubernetes sur nos serveurs on-premise ici à l’ETS. Dans ce contexte nous utilisons des outils.


## Outils & Technologies

### Protocole S3

Le [protocole S3](https://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/Welcome.html) (Simple Storage Service) est un service de stockage d'objets proposé par Amazon Web Services (AWS). Il permet de stocker et de récupérer facilement n'importe quelle quantité de données via une interface web. Le S3 est conçu pour être simple et sécurisé, offrant des fonctionnalités telles que la gestion des versions (pour revenir à des versions antérieures de vos fichiers), la réplication (pour garder des copies de vos données dans différents emplacements), et le contrôle des accès (pour gérer qui peut voir ou modifier vos données).

### Buckets de stockage Cloud

Les "buckets" sont des conteneurs où l'on stocke des objets, tels que des fichiers, des images ou des données. Chaque bucket peut contenir un nombre illimité d'objets, et les utilisateurs ont la possibilité de configurer des politiques d'accès pour déterminer qui peut accéder ou modifier les contenus de ces buckets. Les buckets aident à organiser les données et facilitent la gestion des sauvegardes, en rendant la récupération des données plus simple en cas de besoin.

### Backblaze

Nous utilisons [Backblaze B2 Cloud Storage](https://www.backblaze.com/docs/cloud-storage-about-backblaze-b2-cloud-storage) en raison de son coût abordable et de sa simplification. Il permet de stocker des fichiers dans le cloud. C’est une platforme web payante (quelques dollars par année) qui nous offre une interface pour voir et télécharger des backups si nécéssaire. Backblaze gère les buckets S3 de AWS qui contient nos backups.


Config dans k8s-base pour backblaze x velero

[**https://github.com/ClubCedille/k8s-base/blob/master/common/velero/velero.argoapp.yaml**](https://github.com/ClubCedille/k8s-base/blob/master/common/velero/velero.argoapp.yaml)

### Barman

Le plugin [Barman Cloud pour CloudNativePG](https://cloudnative-pg.io/plugin-barman-cloud/docs/intro/) permet des sauvegardes physiques continues des clusters PostgreSQL vers le stockage d'objets. Il offre des fonctionnalités clés comme la sauvegarde et la restauration des données, l'archivage des journaux de réécriture (WAL), et la récupération à un moment donné (PITR). Compatible avec des solutions comme Amazon S3 et Google Cloud Storage, ce plugin garantit une gestion efficace des sauvegardes et des restaurations dans les environnements PostgreSQL.

### Velero

[Velero](https://velero.io/docs/v1.18/) est un outil open source qui permet de sauvegarder et de restaurer en

toute sécurité, d'effectuer une reprise après sinistre et de migrer les

ressources des clusters Kubernetes ainsi que les volumes persistants.


#### Fonctionnement

Le processus de création de backup comprend 4 étapes :


1. Le client Velero fait un appel à l'API du serveur Kubernetes afin de créer un objet Backup.
2. Le BackupController, controlleur sur mesure de Velero, détecte le nouvel objet et le valide.
3. Le BackupController commence le processus de backup, collectant les données à sauvegarder en faisant des requêtes à l'API du serveur Kubernetes.
4. Le BackupController communique avec le Cloud provider afin de téléverser les fichiers.

####  ![](https://s3.etsmtl.club/outline-cedille-attachment-b9bf26e7-4dde-4f28-835c-f6879af46df5/uploads/975588f4-09f3-4b02-8ef1-7094393c9ed9/14dac6c9-48d6-4164-a06d-dc1b77b5fd2d/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=IHX65OZKPGOMMNY1XPO2%2F20261013%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20261013T020000Z&X-Amz-Expires=86400&X-Amz-Signature=a2954d304fcf9c39d145b5201f6b0b95c9c4eb899ab615bb6e44d3871d1fd571&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject " =711x241")

#### Setup sur notre infra

Sur l'infra CEDILLE, chaque cluster roule son propre serveur Velero, qui lui est

configuré pour copier les données sur AWS.

Du côté utilisateur, on se sert de Backblaze comme interface vers nos buckets s3

afin de valider que les données ont été sauvegardées.

Les données de nos services critiques sont sauvegardés automatiquement chaque

jour à 6h du matin.

# Amélioration Continue

## Points Positifs

* Grande capacité de stockage disponible
* Facilité à automatiser les backups
* [Backup sur le cluster shared](https://github.com/ClubCedille/k8s-shared/tree/main/system/backups)

## Points à améliorer

* Tester et documenter notre procédure de restauration
* Documenter notre procédure de sauvegarde
* 3-2-1
* Garage HQ
* Barman marche mais …
* Permettre aux utilisateurs de nos services de voir leur backups (ex: leur base de données)