Guide de l'administrateur Kubernetes sur l'interface utilisateur Web NetBackup™
- Présentation de NetBackup pour Kubernetes
- Déploiement et configuration de l'opérateur NetBackup Kubernetes
- Configuration des paramètres pour l'opération de snapshot NetBackup
- Déploiement de certificats sur l'opérateur NetBackup Kubernetes
- Gestion des biens Kubernetes
- Gestion des groupes intelligents Kubernetes
- Protection des biens Kubernetes
- Gestion des groupes d'images
- Protection des clusters gérés par Rancher dans NetBackup
- Récupération des biens Kubernetes
- À propos de la sauvegarde incrémentielle et de la restauration
- Activation de la sauvegarde basée sur l'accélérateur
- Activation du mode FIPS dans Kubernetes
- Résolution des problèmes liés à Kubernetes
Configuration d'une sauvegarde cohérente au niveau application
Certains pods qui exécutent des applications, comme les bases de données, nécessitent des procédures supplémentaires pour l'obtention de sauvegardes cohérentes au niveau application.
Les sauvegardes cohérentes au niveau application requièrent un mécanisme pour comprendre les métadonnées de l'application, leur état dans la mémoire et les données persistantes qui résident sur le stockage persistant. Pour préserver l'intégrité du système lors de la restauration, une sauvegarde cohérente au niveau application de toutes ces ressources Kubernetes permet de rationaliser le processus de récupération. Ces procédures ne sont pas requises si seule une sauvegarde en mode cohérence d'incident est requise.
L'application comporte des étapes documentées par le fournisseur pour suspendre les opérations d'entrée et de sortie (E/S) afin de créer un snapshot cohérent au niveau application. Il est important de personnaliser ces procédures, car elles varient d'une application à l'autre. Le contenu des procédures relève de la responsabilité du client.
Pour protéger les charges de travail Kubernetes avec NetBackup, vous devez appliquer des annotations de pod d'application utilisant des hooks de sauvegarde pour obtenir des snapshots cohérents au niveau application. Les annotations Kubernetes sont simplement des métadonnées qui peuvent être appliquées à toutes les ressources Kubernetes. Les hooks Kubernetes sont des actions définies par l'utilisateur qui peuvent correspondre à une ou plusieurs commandes. Dans votre infrastructure Kubernetes, appliquez ces annotations et ces hooks à un pod d'application à suspendre.
Les hooks de sauvegarde sont utilisés pour les traitements intervenant avant et après la création d'un snapshot. Dans le contexte de la protection des données, cela signifie généralement qu'un hook de présauvegarde NetBackup appelle une procédure ou une commande de suspension, et que le hook de postsauvegarde NetBackup appelle une procédure ou une commande de réactivation. Chaque jeu de hooks spécifie la commande et le conteneur auxquels il est appliqué. Notez que les commandes ne sont pas exécutées dans un shell sur les conteneurs. Les exemples donnés utilisent donc une chaîne de commande complète avec le répertoire.
Identifiez les applications qui nécessitent des sauvegardes cohérentes au niveau application et appliquez l'annotation avec un jeu de hooks de sauvegarde lors de la configuration de la protection des données Kubernetes.
Pour ajouter une annotation à un pod, utilisez l'interface utilisateur Kubernetes. Vous pouvez également utiliser la fonction d'annotation kubectl sur la console du cluster Kubernetes pour un pod ou une étiquette spécifique. Les méthodes d'application des annotations peuvent varier selon la distribution. Les exemples suivants s'appliquent à la commande kubectl, en fonction de sa disponibilité étendue dans la plupart des distributions.
Il est également possible d'ajouter des annotations aux objets Kubernetes de base, tels que les ressources de déploiement ou de jeu de répliques, pour garantir que les annotations sont incluses dans tous les nouveaux pods déployés. L'administrateur Kubernetes peut mettre à jour les annotations de façon dynamique.
Les étiquettes sont des paires clé-valeur liées aux objets Kubernetes tels que des pods ou des services. Des étiquettes sont utilisées comme attributs pour les objets importants et utiles pour l'utilisateur. Il est possible d'associer des étiquettes aux objets lors de leur création et de les ajouter ou de les modifier par la suite à tout moment. Kubernetes offre une prise en charge intégrée de ces étiquettes pour interroger des objets et effectuer des opérations en blocs sur les sous-ensembles sélectionnés. Chaque objet peut avoir un ensemble d'étiquettes valeur-clé définies. Chaque clé doit être unique pour un objet donné.
Un exemple de formatage et de syntaxe des métadonnées d'étiquette est présenté ci-dessous :
"metadata": {"labels": {"key1":"value1","key2":"value2"}}
Spécifiez le nom du pod ou bien une étiquette qui s'applique au groupe de pods souhaité. Si plusieurs arguments d'annotation sont utilisés, spécifiez le format JSON approprié (tableau JSON, par exemple) : ["item1","item2","itemn"]# kubectl annotate pod [ {pod_name} | -l {label=value}] -n {the-pods-namespace_name} [annotation syntax - see following]
Cette méthode peut être combinée à && pour associer plusieurs commandes si certaines applications nécessitent plusieurs commandes pour obtenir le résultat souhaité. Les commandes spécifiées ne sont pas fournies par Veritas et l'utilisateur doit personnaliser manuellement le pod d'application. Remplacez {values} par les noms utilisés dans votre environnement.
Remarque :
Toutes les commandes kubectl doivent être définies sur une seule ligne. Faites preuve de vigilance lorsque vous copiez ou collez les exemples suivants.
Après la mise à niveau vers NetBackup 10.2, mettez à jour les annotations vers ces nouveaux hooks de présauvegarde et de postsauvegarde NetBackup qui incluent désormais le préfixe « netbackup » :
netbackup-pre.hook.back.velero.io/command netbackup-pre.hook.backup.velero.io/container netbackup-post.hook.back.velero.io/command netbackup-post.hook.backup.velero.io/container
Les commandes suivantes permettent de verrouiller et déverrouiller une base de données MongoDB 4.2.23 :
# mongo --eval "db. fsyncLock ()"
# mongo --eval "db.fsyncUnlock()"
Elles peuvent être intégrées à la commande unique suivante pour définir les hooks de présauvegarde et de postsauvegarde pour MongoDB. Notez la syntaxe spéciale pour l'échappement des caractères spéciaux, ainsi que les crochets ([]), les guillemets simples et doubles et les virgules (,) utilisés dans le format JSON :
# kubectl annotate pod {mongodb-pod-name} -n {mongodb namespace} netbackup-pre.hook.back.velero.io/command='["/bin/bash", "-c", "mongo --eval \"db.fsyncLock()\""]' netbackup-pre.hook.backup.velero.io/container={mongodb-pod-name} netbackup-post.hook.backup.velero.io/command='["/bin/bash","-c","mongo --eval \"db.fsyncUnlock()\""]' netbackup-post.hook.backup.velero.io/container={mongodb-pod-name}
Les commandes suivantes permettent de suspendre et de réactiver la base de données MySQL :
# mysql -uroot -ppassword -e "flush tables with read lock"
# mysql -uroot -ppassword -e "unlock tables"
Elles peuvent être intégrées à la commande unique suivante pour définir les hooks de présauvegarde et de postsauvegarde pour MySQL. Dans cet exemple, nous avons utilisé une étiquette au lieu d'un nom de pod. L'étiquette peut ainsi annoter plusieurs pods à la fois. Notez la syntaxe spéciale pour l'échappement des caractères spéciaux, ainsi que les crochets ([]), les guillemets simples et doubles et les virgules (,) utilisés dans le format JSON :
# kubectl annotate pod -l label=value -n {mysql namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"flush tables with read lock\""]' netbackup-pre.hook.backup.velero.io/container={mysql container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"unlock tables\""]' netbackup-post.hook.backup.velero.io/container={mysql container name}
Les commandes suivantes permettent de suspendre et de réactiver la base de données PostgreSQL :
# Psql -U postgres -c "SELECT pg_start_backup('tagvalue');"
# psql -U postgres -c \"SELECT pg_stop_backup();"
Elles peuvent être intégrées à la commande unique suivante pour définir les hooks de présauvegarde et de postsauvegarde pour Postgres. Dans cet exemple, nous avons utilisé une étiquette au lieu d'un nom de pod. L'étiquette peut ainsi annoter plusieurs pods correspondants à la fois. Les étiquettes peuvent être appliquées à n'importe quel objet Kubernetes. Dans ce cas, nous les utilisons pour modifier un conteneur spécifique et sélectionner uniquement certains pods d'une façon différente. Notez la syntaxe spéciale pour l'échappement des caractères spéciaux, ainsi que les crochets ([]), les guillemets simples et doubles et les virgules (,) utilisés dans le format JSON :
# kubectl annotate pod -l app=app-postgresql -n {postgres namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_start_backup(quote_literal($EPOCHSECONDS));\""]' netbackup-pre.hook.backup.velero.io/container={postgres container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_stop_backup();\""]' netbackup-post.hook.backup.velero.io/container={postgres container name}
Les commandes suivantes permettent de suspendre et de réactiver l'application Nginx :
# /sbin/fsfreeze --freeze /var/log/nginx
# /sbin/fsfreeze --unfreeze /var/log/nginx
Elles peuvent être intégrées à la commande unique suivante pour définir les hooks de présauvegarde et de postsauvegarde pour NGINX. Dans cet exemple, les hooks de conteneur sont omis, ce qui modifie le premier conteneur correspondant par défaut au nom de pod. Notez la syntaxe spéciale pour l'échappement des caractères spéciaux, ainsi que les crochets ([]), les guillemets simples et doubles et les virgules (,) utilisés dans le format JSON :
# kubectl annotate pod {nginx-pod-name} -n {nginx namespace} netbackup-pre.hook.backup.velero.io/command='["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]' netbackup-post.hook.backup.velero.io/command='["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]'
Les commandes suivantes permettent de suspendre et de réactiver la base de données Cassandra :
# nodetool flush
# nodetool verify
Elles peuvent être intégrées à la commande unique suivante pour définir les hooks de présauvegarde et de postsauvegarde pour Cassandra. Notez la syntaxe spéciale pour l'échappement des caractères spéciaux, ainsi que les crochets ([]), les guillemets simples ('') et doubles ("") et les virgules (,) utilisés dans le format JSON :
# kubectl annotate pod {cassandra-pod} -n {Cassandra namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool flush"]' netbackup-pre.hook.backup.velero.io/container={cassandra-pod} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool verify"]' netbackup-post.hook.backup.velero.io/container={cassandra-pod}
Remarque :
Les exemples sont fournis uniquement à titre indicatif, et les conditions spécifiques à chaque charge de travail doivent inclure la collaboration entre les administrateurs de sauvegardes, de charges de travail et les administrateurs Kubernetes.
Actuellement, Kubernetes ne prend pas en charge les hooks d'erreur. Si la commande spécifiée par l'utilisateur échoue, le snapshot de sauvegarde est interrompu.
Le délai d'expiration par défaut après lequel la commande renvoie un état de sortie est de 30 secondes. Vous pouvez modifier cette valeur en ajoutant les hooks suivants comme annotations aux pods :
netbackup-pre.hook.backup.velero.io/timeout=#in-seconds#
netbackup-post.hook.backup.velero.io/timeout=#in-seconds#