Comment sauvegarder et restaurer un cluster Kubernetes à l'aide de TrilioVault pour Kubernetes

De Get Docs
Aller à :navigation, rechercher

Comment sauvegarder et restaurer un cluster Kubernetes à l'aide de TrilioVault pour Kubernetes

Introduction

TrilioVault pour Kubernetes (TVK) est une solution cloud native qui sécurise les métadonnées et les données de votre application en stockant des sauvegardes à la demande dans un référentiel de stockage indépendant.

Il y a quelques avantages à utiliser Trilio. Avec Trilio, vous pouvez effectuer des sauvegardes complètes ou incrémentielles de votre cluster et les restaurer en cas de perte de données. Vous pouvez migrer d'un cluster à un autre et exécuter des pré- et post-hooks pour les opérations de sauvegarde et de restauration. Vous pouvez également planifier des sauvegardes et définir des politiques de rétention pour vos sauvegardes. Enfin, vous pouvez également utiliser la console de gestion Web pour inspecter en détail l'état de vos opérations de sauvegarde et de restauration (ainsi que de nombreuses autres fonctionnalités).

Cet article fournit des instructions pour protéger votre déploiement de cluster Kubernetes local ou un service DigitalOcean Kubernetes à l'aide de TVK, y compris les applications avec ou sans état déployées sur le cluster. Dans ce didacticiel, vous allez déployer TVK sur votre cluster Kubernetes, créer une sauvegarde de cluster et récupérer à partir de la sauvegarde.

Conditions préalables

Pour terminer ce didacticiel, vous aurez besoin des éléments suivants :

  • Un compte DigitalOcean. Si vous n'en avez pas, créez un nouveau compte.
  • Un cluster DigitalOcean Kubernetes avec plusieurs espaces de noms. Vous pouvez créer un cluster en suivant notre documentation sur Comment créer des clusters.
  • Doctl pour DigitalOcean Interaction API. Pour commencer, consultez notre guide sur Comment installer et configurer doctl.
  • Kubectl pour Kubernetes interaction. Pour l'installation et la configuration, consultez la documentation du produit Kubernetes pour Install Tools.
  • Un compartiment DigitalOcean Spaces ou tout compartiment de stockage d'objets compatible S3 avec son access clés. Pour utiliser un bucket DigitalOcean Spaces, suivez nos guides sur Comment créer des espaces et Comment gérer l'accès administratif avec des clés d'accès. Sauver la access et secret clés dans un endroit sûr pour une utilisation ultérieure. Vous pouvez également utiliser l'exportation NFS pour stocker la sauvegarde.
  • Helm pour la gestion TrilioVault Operator versions et mises à niveau. Pour l'installation, consultez l'étape 1 de notre didacticiel, Comment installer un logiciel sur des clusters Kubernetes avec le gestionnaire de packages Helm 3 .
  • Une licence TrilioVault enregistrée en tant que yaml dossier. Ce tutoriel utilise Cluster-installation étendue, que vous devrez peut-être sélectionner lors de la récupération de la licence. Pour les utilisateurs de DigitalOcean, l'installation de TVK est gratuite pendant cinq ans. Si vous n'utilisez pas de cluster DigitalOcean Kubernetes, vous devrez vous inscrire sur le site Web de Trilio pour demander une licence TVK. Des essais gratuits et une version de base gratuite sont disponibles.

Étape 1 - Configuration du cluster Kubernetes

Dans cette étape, vous vérifierez la configuration de votre cluster Kubernetes pour vous assurer que TrilioVault fonctionnera correctement.

Pour que TrilioVault fonctionne correctement et pour sauvegarder vos PersistentVolumeClaim (PVC), le cluster Kubernetes doit être configuré pour prendre en charge l'interface de stockage de conteneur (CSI). Par défaut, le service DigitalOcean Managed Kubernetes est fourni avec le CSI pilote déjà installé et configuré. Vous pouvez le vérifier à l'aide de la commande suivante :

kubectl get storageclass

La sortie devrait ressembler à ceci :

OutputNAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   1d

Comme vous pouvez le voir, le fournisseur est dobs.csi.digitalocean.com.

L'installation de TrilioVault nécessite également volumeSnapshot Définition de ressource personnalisée (CRD) pour une installation réussie. Vous pouvez le vérifier à l'aide de la commande suivante :

kubectl get crd | grep volumesnapshot

Si la volumeSnapshot est déjà installé, la sortie ressemblera à ceci :

Outputvolumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z
volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z
volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |

Si volumeSnapshot n'est pas déjà installé, reportez-vous à la documentation de Installation des CRD VolumeSnapshot.

Enfin, assurez-vous que le CRD prend en charge le v1 Version de l'API, que vous pouvez vérifier en exécutant la commande suivante :

kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

À la fin de la sortie yaml CRD, vous devriez voir un storedVersions liste contenant v1 valeurs:

Output...
- lastTransitionTime: "2022-01-20T07:58:06Z"
    message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
    reason: ApprovedAnnotation
    status: "True"
    type: KubernetesAPIApprovalPolicyConformant
  storedVersions:
  - v1

S'il n'est pas installé, reportez-vous à la documentation de Installation des CRD VolumeSnapshot.

Au cours de cette étape, vous avez confirmé que votre configuration Kubernetes est prête pour l'installation de TrilioVault, ce que vous ferez à l'étape suivante.

Étape 2 - Installation de TrilioVault pour Kubernetes

Dans cette étape, vous allez déployer TrilioVault pour un cluster Kubernetes local et gérer TVK installations via Helm. Les données de sauvegarde seront stockées dans le compartiment compatible S3 que vous avez créé dans le cadre des prérequis.

L'application TrilioVault peut être installée de plusieurs façons, selon la distribution du cluster Kubernetes. Dans ce didacticiel, vous allez installer TrilioVault en utilisant Helm via le tableau triliovault-operator.

Ce tutoriel utilise le Cluster-type d'installation délimité pour le tvk application. Avec ce type d'installation, TVK peut protéger toutes les applications à travers les espaces de noms. (En revanche, avec un Namespace-installation délimitée, TVK ne peut protéger que les applications déployées dans cet espace de noms.)

Pour installer TrilioVault pour Kubernetes, vous aurez besoin d'une licence, que vous avez demandée dans le cadre des prérequis. Lors de la récupération de la licence TVK, vous devrez peut-être sélectionner Cluster-installation délimitée.

Installation de TrilioVault à l'aide de Helm

Pour installer TrilioVault via Helm, ajoutez d'abord le référentiel TrilioVault Helm et répertoriez les graphiques disponibles à l'aide de la commande suivante :

helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
helm repo update triliovault-operator
helm search repo triliovault-operator

La sortie ressemble à ce qui suit :

OutputNAME                                            CHART VERSION   APP VERSION     DESCRIPTION
triliovault-operator/k8s-triliovault-operator   2.10.3          2.10.3          K8s-TrilioVault-Operator is an operator designe...

Enfin, installez TrilioVault pour Kubernetes en utilisant helm:

helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  --namespace tvk \
  --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
  --create-namespace

Cette commande installe le triliovault-operator et le TriloVault Manager (TVM) Ressource personnalisée utilisant les paramètres par défaut fournis dans le fichier de valeurs TrilioVault Helm, triliovault-values.yaml.

  • Opérateur TVK : TVK dispose d'un opérateur basé sur Helm, qui est géré par un CRD appelé TrilioVault Manager. L'opérateur TVK s'occupe du cycle de vie de l'application et de la récupération automatique en cas de panne de l'un des composants de l'application.
  • TVK Manager : L'application TVK contient plusieurs CRD et leurs contrôleurs. Il possède son propre serveur webhook qui gère la validation et la mutation de ses instances CRD. Les contrôleurs réconcilient les événements générés par les opérations effectuées sur les ressources personnalisées.

Ce didacticiel utilise les valeurs par défaut du fichier de valeurs TrilioVault Helm (triliovault-values.yaml), y compris les éléments suivants :

  • installTVK.applicationScope: La portée de l'installation TVK peut être Cluster ou Namespaced. Ce paramètre protège les applications à travers le 'Cluster' ou 'Namespace', et la licence TVK est également générée en fonction de la portée de l'installation. Ce tutoriel utilise Cluster-installation délimitée.
  • installTVK.ingressConfig.host: Le nom de domaine pour le nom d'hôte de l'interface utilisateur TVK, qui est demo-tutorial.tvk-doks.com. Les utilisateurs accéderont à la console de gestion TVK via ce nom de domaine.
  • installTVK.ComponentConfiguration.ingressController.service.type: Le type de service pour accéder à l'interface utilisateur TVK, tel que NodePort ou LoadBalancer.

Remarque : Pour voir toutes les options disponibles, vous pouvez inspecter le fichier de valeurs TrilioVault Helm. Pour plus d'informations, veuillez consulter la documentation TVK pour les options de configuration.


Exécutez la commande suivante pour vérifier votre tvk déploiement:

helm ls -n tvk

Cette commande listera les helm dépôts que vous avez ajoutés :

OutputNAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
triliovault-manager-tvk tvk             1               2022-08-18 08:19:50.409742366 +0000 UTC deployed        k8s-triliovault-2.10.3          2.10.3
triliovault-operator    tvk             1               2022-08-18 08:15:51.618651231 +0000 UTC deployed        k8s-triliovault-operator-2.10.3 2.10.3

La STATUS la colonne doit afficher deployed.

Ensuite, vérifiez que TrilioVault est opérationnel. Exécutez la commande suivante, qui affichera l'état du tvk installation:

kubectl get deployments -n tvk

Cette commande affichera les déploiements dans le tvk espace de noms.

La sortie ressemblera à ce qui suit :

OutputNAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
k8s-triliovault-admission-webhook               1/1     1            1           83s
k8s-triliovault-control-plane                   1/1     1            1           83s
k8s-triliovault-exporter                        1/1     1            1           83s
k8s-triliovault-ingress-nginx-controller        1/1     1            1           83s
k8s-triliovault-web                             1/1     1            1           83s
k8s-triliovault-web-backend                     1/1     1            1           83s
triliovault-operator-k8s-triliovault-operator   1/1     1            1           4m22s

La READY la colonne affiche le nombre de déploiements disponibles suivant le modèle de ready/desired. Tous les pods de déploiements se trouvent dans le READY état, ce qui signifie que tvk a été installé avec succès. Ensuite, vous vérifierez le type et la validité de votre licence TrilioVault.

Vérification de la licence d'application TrilioVault

Dans le cadre des prérequis, vous avez demandé une licence TrilioVault pour le Cluster-scoped type d'installation et l'a enregistré en tant que yaml dossier. Dans cette section, vous allez appliquer votre licence TrilioVault, confirmer son statut et inspecter ses champs.

Dans le cadre des prérequis, vous avez téléchargé une licence gratuite sur le site Web [1] de Trilio et l'avez enregistrée en tant que yaml dossier. Maintenant, appliquez-le en utilisant la commande ci-dessous :

kubectl apply -f your_license_filename.yaml -n tvk

Ensuite, vérifiez si la licence est installée et dans le Active état sur votre cluster :

kubectl get license -n tvk

La sortie ressemble à ce qui suit :

OutputNAME            STATUS   MESSAGE                                   CURRENT NODE COUNT   GRACE PERIOD END TIME   EDITION     CAPACITY   EXPIRATION TIME        MAX NODES
your_license   Active   Cluster License Activated successfully.   1                                            Basic       100        2023-04-25T00:00:00Z   1

Vérifier la STATUS, qui devrait être Active. Vous pouvez également vérifier votre type de licence dans le EDITION colonne et l'expiration de la licence dans la EXPIRATION TIME colonne.

La licence est gérée via un système spécial CRD appelé le License objet. Vous pouvez l'inspecter en exécutant la commande ci-dessous, en remplaçant la partie en surbrillance par votre nom de licence, comme indiqué dans la sortie précédente :

kubectl describe license your_license -n tvk

La sortie ressemble à ce qui suit :

OutputName:         your_license
Namespace:    tvk
Labels:       <none>
Annotations:  generation: 4
              triliovault.trilio.io/creator: [email protected]
              triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe
              triliovault.trilio.io/updater:
                [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-04-21T09:50:40.530365762Z"},{"username":"0c9f7f19-c4...
API Version:  triliovault.trilio.io/v1
Kind:         License
Metadata:
  Creation Timestamp:  2022-04-06T08:07:16Z
...
Status:
  Condition:
    Message:         Cluster License Activated successfully.
    Status:           Active
    Timestamp:        2022-04-06T08:07:17Z
  Current CPU Count:  6
  Max CP Us:          6
  Message:            Cluster License Activated successfully.
  Properties:
    Active:                        true
    Capacity:                     100
    Company:                       TRILIO-KUBERNETES-LICENSE-GEN-BASIC
    Creation Timestamp:            2022-04-21T00:00:00Z
    Edition:                      Basic
    Expiration Timestamp:         2027-04-25T00:00:00Z
    Kube UID:                      1350188a-9289-49ba-9086-553e8cd7cabe
    License ID:                    TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e
    Maintenance Expiry Timestamp:  2027-04-25T00:00:00Z
    Number Of Users:               -1
    Purchase Timestamp:            2022-04-21T00:00:00Z
    Scope:                         Cluster
...

Vérifier la Message et Capacity champs, ainsi que Edition.

La sortie ci-dessus vous indiquera également quand la licence va expirer dans le Expiration Timestamp domaine, ainsi que le Scope (Cluster-basé dans ce cas). Plus de détails peuvent être trouvés sur la page de documentation TrilioVault pour les licences Kubernetes.

Dans cette étape, vous avez appliqué votre licence TVK et confirmé son statut. Ensuite, vous explorerez la console Web TVK, qui vous aidera à gérer les cibles, les sauvegardes, les restaurations, etc.

Étape 3 - Accéder à la console de gestion TVK

Dans cette étape, vous accéderez à la console de gestion TVK, où vous pourrez créer des cibles et gérer des opérations telles que les sauvegardes et la restauration via une interface graphique. Bien que vous puissiez gérer les opérations à partir de la CLI via kubectl et CRDs, la console de gestion TVK simplifie les tâches courantes via des opérations pointer-cliquer et offre une meilleure visualisation et inspection des objets du cluster TVK.

Dans la section précédente sur Installation de TrilioVault à l'aide de Helm, vous avez installé et configuré les composants requis pour la console de gestion Web. Pour accéder à la console et explorer les fonctionnalités qu'elle offre, vous allez exporter le kubeconfig fichier pour votre cluster Kubernetes et transférez le service contrôleur d'entrée pour TVK.

Commencez par exporter le kubeconfig fichier pour votre cluster Kubernetes. Cette étape est obligatoire pour que la console Web puisse vous authentifier.

Si vous utilisez le service DigitalOcean Kubernetes, vous pouvez suivre ces étapes pour exporter votre kubeconfig dossier.

Répertoriez les clusters disponibles :

doctl k8s cluster list

Enregistrez la configuration du cluster dans YAML, en remplaçant les valeurs en surbrillance par le nom du cluster :

doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml

Remarque : Si vous n'avez qu'un seul cluster, la commande ci-dessous peut être utilisée :

DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

Assurez-vous de conserver le produit généré kubeconfig sécurisé car il contient des données sensibles telles que le jeton et les détails de l'utilisateur qui sont utilisés pour accéder à votre cluster. Stockez le fichier dans un emplacement non public et envisagez d'utiliser une application de gestion de mot de passe ou un format crypté.

Maintenant que vous avez votre kubeconfig fichier pour l'authentification, vous configurerez la redirection de port pour accéder à la console de gestion.

Tout d'abord, identifiez le ingress-nginx-controller service de la tvk espace de noms. Vous pouvez le faire en exécutant la commande suivante pour répertorier les services dans le tvk espace de noms :

kubectl get svc -n tvk

La sortie ressemble à ce qui suit :

OutputNAME                                                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
k8s-triliovault-admission-webhook                               ClusterIP   10.245.202.17    <none>        443/TCP                      13m
k8s-triliovault-ingress-nginx-controller                        NodePort    10.245.192.140   <none>        80:32448/TCP,443:32588/TCP   13m
k8s-triliovault-ingress-nginx-controller-admission              ClusterIP   10.3.20.89       <none>        443/TCP                      13m
k8s-triliovault-web                                             ClusterIP   10.245.214.13    <none>        80/TCP                       13m
k8s-triliovault-web-backend                                     ClusterIP   10.245.10.221    <none>        80/TCP                       13m
triliovault-operator-k8s-triliovault-operator-webhook-service   ClusterIP   10.245.186.59    <none>        443/TCP                      16m

Rechercher le k8s-triliovault-ingress-nginx-controller ligne, et notez qu'il écoute sur le port 80 dans le PORT(s) colonne.

Le service d'entrée TrilioVault peut être configuré avec NodePort ou LoadBalancer, que vous verrez dans le TYPE colonne. S'il est réglé sur NodePort, vous devrez alors vous assurer que le domaine est accessible. Si vous utilisez NodePort pour accéder à la console de gestion TVK, le service d'entrée TrilioVault ne pourra pas se connecter directement au réseau externe sans résoudre le nom de domaine utilisé pour accéder à la console TVK. Pour résoudre ce problème, vous allez ajouter l'entrée d'adresse IP et de nom de domaine dans le etc/hosts fichier pour résoudre le nom de domaine à l'adresse IP.

Pour ce faire, ouvrez le /etc/hosts fichier à modifier et ajoutez cette entrée :

/etc/hosts

127.0.0.1 demo-tutorial.tvk-doks.com

demo-tutorial.tvk-doks.com est le nom de domaine défini pour le service de contrôleur d'entrée TrilioVault. Vous utiliserez ce domaine pour accéder à la TVK Management Console.

Enregistrez et fermez le fichier.

Créez ensuite le transfert de port pour le service de contrôleur d'entrée TVK :

kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &

Vous pouvez désormais accéder à la console dans votre navigateur Web en accédant à : http://demo-tutorial.tvk-doks.com:8080. Lorsqu'on lui demande le kubeconfig fichier, veuillez sélectionner celui que vous avez créé dans cette section.

Remarque : TVK utilise le kubeconfig fichier pour générer un jeton d'authentification. Il ne stocke pas les détails de l'utilisateur présents dans le kubeconfig dossier.


Dans cette étape, vous configurez l'accès à la console de gestion TVK. Pour plus d'informations sur les fonctionnalités disponibles de la console, veuillez consulter la documentation officielle TVK Web Management Console.

Dans l'étape suivante, vous définirez le backend de stockage de TrilioVault, appelé un target.

Étape 4 - Création d'une cible TrilioVault pour stocker les sauvegardes

TrilioVault doit savoir où stocker vos sauvegardes, ce que l'on appelle un target. Les types de cible suivants sont pris en charge : S3 et NFS. Ce tutoriel utilise le S3 Type de stockage. Plus d'informations sont disponibles dans la section Backup Target de la documentation TVK.

Accéder S3 stockage, chaque cible doit connaître les informations d'identification du compartiment, qui sont stockées dans un secret. Dans cette étape, vous allez créer une cible TrilioVault pour les sauvegardes et un secret pour stocker les informations d'identification de votre compartiment.

Pour commencer, vous allez créer le secret Kubernetes contenant les informations d'identification de votre compartiment S3 cible. Utilisant nano ou votre éditeur de texte préféré, créez un fichier appelé trilio-s3-target-secret et ajoutez le code suivant, en veillant à remplacer les valeurs en surbrillance par votre clé d'accès et votre clé secrète DigitalOcean Spaces :

trilio-s3-target-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target-secret
  namespace: tvk
type: Opaque
stringData:
  accessKey: your_bucket_access_key
  secretKey: your_bucket_secret_key

Le secret name est trilio-s3-target-secret. Cela sera référencé dans le spec.objectStoreCredentials.credentialSecret domaine de la target manifeste que vous créerez ensuite. La secret peut être dans le même namespaceTrilioVault a été installé (par défaut tvk) ou dans un autre espace de noms de votre choix. (Assurez-vous simplement que l'espace de noms que vous utilisez est correctement référencé.)

Enregistrez et fermez le fichier.

Pour appliquer ce fichier manifeste et créer le secret, exécutez la commande suivante :

kubectl apply -f trilio-s3-target-secret.yaml -n tvk

Remarque : Vous pouvez également créer le secret en exécutant la commande suivante, en remplaçant les valeurs d'espace réservé par la clé d'accès et la clé secrète de votre bucket DigtalOcean :

kubectl create secret generic trilio-s3-target-secret \
 --namespace=tvk \
 --from-literal=accessKey="your_bucket_access_key" \
 --from-literal=secretKey="your_bucket_secret_key"

Votre sortie ressemblera à ceci :

Outputsecret/trilio-s3-target-secret created

Ensuite, vous allez créer un manifeste pour la cible. Créez un nouveau fichier appelé trilio-s3-target.yaml et ajoutez le bloc de code suivant. Remplacez les valeurs en surbrillance pour bucketName, region, et url avec des informations sur votre bucket DigitalOcean, que vous pouvez trouver sur le panneau de contrôle de votre bucket.

trilio-s3-target.yaml

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: your_bucket_name
    region: your_bucket_region           # e.g.: nyc1 or us-east-1
    url: https://nyc1.digitaloceanspaces.com      # update the region to match your bucket
    credentialSecret:
      name: trilio-s3-target-secret
      namespace: tvk
  thresholdCapacity: 10Gi

Voici une explication de la configuration ci-dessus :

  • spec.type: Type de cible pour le stockage de sauvegarde (S3 est ObjectStore).
  • spec.vendor: Fournisseur de stockage tiers hébergeant la cible (par DigitalOcean Spaces, vous devrez utiliser Other).
  • spec.enableBrowsing: Activer la navigation pour la cible.
  • spec.objectStoreCredentials: Définit requis credentials (passant par credentialSecret) pour accéder au stockage S3, ainsi qu'à d'autres paramètres tels que la région et le nom du compartiment.
  • spec.thresholdCapacity: capacité de seuil maximale pour stocker les données de sauvegarde.

Notez que le credentialSecret nom correspond au secret que vous venez de créer.

Enregistrez et fermez le fichier manifeste.

Maintenant, créez le target objet utilisant kubectl:

kubectl apply -f trilio-s3-target.yaml -n tvk

Votre sortie ressemblera à ceci :

Outputtarget.triliovault.trilio.io/trilio-s3-target created

TrilioVault va engendrer un worker job nommé trilio-s3-target-validator, qui est responsable de la validation de votre compartiment S3 (comme la disponibilité, les autorisations, etc.). Si la tâche se termine avec succès, le compartiment est considéré comme sain ou disponible, et le trilio-s3-target-validator la ressource de travail est ensuite supprimée.

Maintenant, vérifiez si le target ressource créée précédemment est healthy en exécutant la commande suivante et en passant le nom de la cible :

kubectl get target trilio-s3-target -n tvk

La sortie ressemblera à ceci :

OutputNAME               TYPE          THRESHOLD CAPACITY   VENDOR   STATUS      BROWSING ENABLED
trilio-s3-target   ObjectStore   10Gi                 Other    Available   true

La STATUS la valeur de la colonne est Available, ce qui signifie que la cible est dans un état sain.

Vous pouvez également valider l'état de la cible à l'aide de la console de gestion TVK. Après vous être connecté, sélectionnez Sauvegarde et restauration puis cliquez Cibles regarder.

Si l'état indique Disponible, vous avez configuré avec succès l'objet cible S3.

Cependant, s'il y a un problème dans la configuration, l'état affichera Non disponible. Dans de tels cas, la tâche de validateur cible S3 est laissée en place et en cours d'exécution afin que vous puissiez inspecter les journaux et trouver le problème éventuel. Si l'objet cible ne parvient pas à devenir sain, vous pouvez inspecter les journaux à partir du trilio-s3-target-validator Pod pour trouver le problème.

Pour vérifier les journaux, vous commencerez par trouver le validateur cible :

kubectl get pods -n tvk | grep trilio-s3-target-validator

Le résultat ressemblera à ceci, mais avec un identifiant unique :

Outputtrilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s

À l'aide du validateur cible de la sortie précédente, récupérez les journaux de données à l'aide de la commande suivante :

kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

La sortie ressemblera à ceci (notez l'exception comme exemple):

Output...
INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
Traceback (most recent call last):
  File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
    utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
    mount_s3_datastore(metadata_list, base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
    wait_until_mount(base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
    base_path))
Exception: /triliodata is not a mountpoint. We can't proceed further.
...

Pour obtenir de l'aide supplémentaire sur le débogage ou si vous rencontrez des problèmes lors de la création de la cible, consultez la section Dépannage de la documentation ou contactez le support.

Dans cette étape, vous avez configuré une cible TrilioVault et créé un secret pour fournir les informations d'identification de votre compartiment. Ensuite, vous effectuerez des opérations de sauvegarde et de restauration, couvrant ainsi un scénario de reprise après sinistre.

Étape 5 - Sauvegarde et restauration du cluster Kubernetes

Dans cette étape, vous allez effectuer une sauvegarde de votre cluster Kubernetes. Vous supprimerez ensuite les espaces de noms et utiliserez la sauvegarde pour restaurer toutes les applications importantes dans ces espaces de noms. Vous allez effectuer une opération de restauration de cluster via location du target. Le même flux s'applique lorsque vous devez effectuer une migration de cluster.

L'idée principale ici est d'effectuer une sauvegarde complète du cluster en incluant all-important namespaces, qui contiennent vos applications et configurations essentielles. Il ne s'agit pas d'une sauvegarde et d'une restauration complètes du cluster, mais plutôt d'un multi-namespace opération de sauvegarde et de restauration. En pratique, c'est tout ce qu'il faut car tout est namespaced dans Kubernetes.

Création de la sauvegarde du cluster Kubernetes

Dans cette section, vous allez créer un multi-namespace backup en utilisant un ClusterBackupPlan CRD qui cible all-important namespaces depuis votre cluster Kubernetes.

Pour commencer l'opération de sauvegarde du cluster, vous allez créer un ClusterBackupPlan, qui définit un ensemble de ressources à sauvegarder. La spécification inclut la planification de sauvegarde, la cible de sauvegarde et les ressources à sauvegarder. Les ressources peuvent être définies sous la forme d'une version Helm, d'opérateurs ou simplement de ressources d'API Kubernetes nues.

A l'aide de votre éditeur de texte, créez un ClusterBackupPlan fichier manifeste appelé k8s-cluster-backup-plan.yaml. Ajoutez le bloc de code suivant, qui est un manifeste typique pour cibler plusieurs espaces de noms :

k8s-cluster-backup-plan.yaml

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

Assurez-vous que les espaces de noms répertoriés dans le backupComponents sont présents sur le cluster.

Vous remarquerez peut-être que kube-system (ou d'autres espaces de noms liés au cluster Kubernetes) n'est pas inclus dans backupComponents. Habituellement, ceux-ci ne sont pas nécessaires à moins qu'il n'y ait un cas particulier nécessitant la persistance de certains paramètres à ce niveau.

Enregistrez et fermez le fichier.

Maintenant, créez le ClusterBackupPlan ressource utilisant kubectl:

kubectl apply -f k8s-cluster-backup-plan.yaml

Votre sortie ressemblera à ceci :

Outputclusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created

Maintenant, inspectez le ClusterBackupPlan statut à l'aide kubectl:

kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk

La sortie ressemble à ceci :

OutputNAME                              TARGET             ...   STATUS
k8s-cluster-backup-plan           trilio-s3-target   ...   Available

Vérifier la STATUS valeur de la colonne, qui doit être définie sur Available.

Vous pouvez également voir le ClusterBackupPlan statut à l'aide de TVK Management Console. Après vous être connecté, sélectionnez Sauvegarde et restauration puis sélectionnez Plans de sauvegarde regarder.

À ce stade, vous avez créé un ClusterBackupPlan. Ensuite, vous allez créer un ClusterBackup, qui est une configuration pointant vers le véritable ClusterBackupPlan dans spec.clusterBackupPlan.name. ClusterBackupPlan restera toujours le même; vous pouvez créer plusieurs sauvegardes en actualisant cela en plusieurs ClusterBackup fichiers manifestes.

Maintenant, créez un ClusterBackup fichier manifeste appelé k8s-cluster-backup.yaml. Ajoutez le bloc de code suivant :

k8s-cluster-backup.yaml

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
  name: k8s-cluster-backup
  namespace: tvk
spec:
  type: Full
  clusterBackupPlan:
    name: k8s-cluster-backup-plan
    namespace: tvk

Enregistrez et fermez le fichier.

Enfin, créez le ClusterBackup ressources, en utilisant kubectl:

kubectl apply -f k8s-cluster-backup.yaml

En appliquant la ClusterBackup manifest, le processus de sauvegarde sera déclenché.

Votre sortie ressemblera à ceci :

Outputclusterbackup.triliovault.trilio.io/k8s-cluster-backup created

Maintenant, inspectez le ClusterBackup statut, utilisation kubectl:

kubectl get clusterbackup k8s-cluster-backup -n tvk

La sortie ressemble à :

OutputNAME                 BACKUPPLAN               BACKUP TYPE   STATUS      ...   PERCENTAGE COMPLETE
k8s-cluster-backup   k8s-cluster-backup-plan  Full          Available   ...   100

Vérifier la STATUS valeur de la colonne, qui doit être définie sur Available, aussi bien que PERCENTAGE COMPLETE mis à 100.

Vous pouvez également voir l'état de la sauvegarde du cluster à l'aide de la console de gestion TVK. Dans le tableau de bord principal, sélectionnez Monitoring puis TrilioVault Monitoring dans le volet de gauche.

La sauvegarde complète du cluster prendra un certain temps, en fonction du nombre d'espaces de noms, de ressources associées et de données présentes sur les PVC impliquées dans le processus. Si la sortie ressemble à ce qui précède, tous les espaces de noms d'application importants inclus dans le plan de sauvegarde ont été sauvegardés avec succès.

Vous pouvez également ouvrir le tableau de bord principal de la console Web et inspecter le multi-namespace sauvegarde. Dans le tableau de bord principal, sélectionnez Sauvegarde et restauration et alors Espaces de noms . En haut à droite, vous pouvez basculer entre une vue de liste et une structure en nid d'abeille :

Dans la vue en nid d'abeille, tous les espaces de noms importants qui faisaient partie de la sauvegarde sont mis en surbrillance.

Dans cette section, vous avez créé une sauvegarde de cluster. Dans les sections suivantes, vous allez supprimer les espaces de noms, puis les restaurer à partir de la sauvegarde.

Suppression des espaces de noms

Maintenant que vous disposez d'une sauvegarde de cluster, vous allez supprimer vos espaces de noms afin de pouvoir les restaurer à partir de la sauvegarde lors d'une étape ultérieure. Pour supprimer vos espaces de noms, exécutez les commandes suivantes, en remplaçant les espaces de noms en surbrillance si nécessaire.

kubectl delete ns wordpress
kubectl delete ns mysqldb
kubectl delete ns etcd

Votre sortie ressemblera à ceci :

Outputnamespace "wordpress" deleted
namespace "mysqldb" deleted
namespace "etcd" deleted

Maintenant que vos espaces de noms sont supprimés, vous allez restaurer la sauvegarde.

Restauration de la sauvegarde avec la console de gestion

Dans cette section, vous utiliserez la console Web TVK pour restaurer toutes les applications importantes à partir de votre sauvegarde. Le processus de restauration validera le target où la sauvegarde est stockée. TVK se connectera au référentiel cible pour extraire les fichiers de sauvegarde à l'aide datamover et metamover pods. TVK créera l'application Kubernetes extraite du stockage de sauvegarde.

Pour commencer l'opération de restauration, vous devez d'abord recréer votre manifeste cible. Étant donné que les espaces de noms existants ont été supprimés, les ressources personnalisées cibles créées dans ces espaces de noms ont également été supprimées. Cela signifie qu'aucune ressource personnalisée cible n'est présente sur le cluster.

Configurez le TVK cible comme décrit dans Création d'une cible TrilioVault pour stocker des sauvegardes, et faites-la pointer vers la même S3 bucket où se trouvent vos données de sauvegarde. Sois sûr que target browsing est autorisé.

Ensuite, naviguez jusqu'à Sauvegarde et restauration et alors Cibles avec Espace de noms : Tout choisi:

Pour répertorier les sauvegardes disponibles, cliquez sur le bouton Actions à droite, puis sélectionnez l'option Lancer le navigateur dans le menu déroulant.

Pour que cela fonctionne, la cible doit avoir le enableBrowsing drapeau défini sur true.

La sélection de Lancer le navigateur fera apparaître le Navigateur cible :

Maintenant, cliquez sur l'élément k8s-cluster-backup-plan dans la liste des plans de sauvegarde. Une sous-fenêtre apparaîtra sur la droite affichant des informations sur la sauvegarde, y compris son état.

Cliquez et développez l'élément k8s-cluster-backup dans la sous-fenêtre de droite :

Pour démarrer le processus de restauration, cliquez sur le bouton Restaurer.

Ensuite, vous verrez une fenêtre contextuelle avec quelques options pour votre processus de restauration. Pour comprendre les différentes options du processus de restauration, vous pouvez trouver des détails sur chaque indicateur dans la section Restore Flags de la documentation TrilioVault.

Saisissez un Restore Name pour la création de la ressource personnalisée de restauration. Une fois que vous avez fourni le nom, vous pouvez mapper tous les espaces de noms importants de la sauvegarde aux espaces de noms où vous souhaitez restaurer les données. Dans ce cas, sélectionnez Namespace Configuration dans le volet de configuration, puis sélectionnez les espaces de noms souhaités.

Une fois le processus de restauration lancé, vous pouvez surveiller sa progression. Une fenêtre de progression s'affichera semblable à celle-ci :

Au bout d'un moment, lorsque la progression est Completed, alors le multi-namespace l'opération de restauration s'est terminée avec succès.

Dans cette section, vous avez restauré votre sauvegarde à l'aide de la console de gestion. Dans la section suivante, vous confirmerez que l'opération de restauration a réussi.

Vérification de l'état des applications du cluster DOKS

Dans cette section, vous vous assurerez que l'opération de restauration a réussi et que les applications sont accessibles après la restauration. Pour commencer, exécutez les commandes suivantes pour récupérer tous les objets liés à l'application à partir des espaces de noms répertoriés :

kubectl get all --namespace wordpress
kubectl get all --namespace mysqldb
kubectl get all --namespace etcd

Votre sortie ressemblera à ce qui suit pour chaque application :

OutputNAME                             READY   STATUS             RESTARTS   AGE
pod/wordpress-5dcf55f8fc-72h9q   1/1     Running            1          2m21s
pod/wordpress-mariadb-0          1/1     Running            1          2m20s

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
service/wordpress           LoadBalancer   10.120.1.38    34.71.102.21   80:32402/TCP,443:31522/TCP   2m21s
service/wordpress-mariadb   ClusterIP      10.120.7.213   <none>         3306/TCP                     2m21s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   1/1     1            1           2m21s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/wordpress-5dcf55f8fc   1         1         1       2m21s

NAME                                 READY   AGE
statefulset.apps/wordpress-mariadb   1/1     2m21s

Les détails de sortie montrent que 1/1 conteneur du déploiement de l'application WordPress se trouve dans le READY Etat. En outre, les pods d'application WordPress et les pods WordPress MariaDB ont 1/1 conteneurs dans le RUNNING Etat. Ces états confirment que l'application a été restaurée avec succès.

Dans l'étape suivante, vous apprendrez à effectuer des sauvegardes planifiées (ou automatiques) pour votre DOKS applications groupées.

Étape 6 - Planification des sauvegardes

La création automatique de sauvegardes basées sur un calendrier est une fonctionnalité très utile à avoir. Il vous permet de remonter le temps et de restaurer le système à un état de fonctionnement antérieur en cas de problème. Par défaut, TrilioVault crée trois politiques planifiées : quotidienne, hebdomadaire et mensuelle.

Dans la console TVK, vous pouvez afficher les politiques par défaut sous Sauvegarde et restauration , alors Politiques de planification :

Les politiques de planification peuvent être utilisées pour les CRD BackupPlan ou ClusterBackupPlan .

Créez un fichier manifeste appelé scheduled-backup-every-5min.yaml et ajoutez le code suivant, qui est un CRD de stratégie de planification personnalisée typique :

sauvegarde-programmée-toutes-les-5min.yaml

apiVersion: triliovault.trilio.io/v1
kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" # trigger every 5 minutes

Ce manifeste crée une stratégie de sauvegarde planifiée appelée scheduled-backup-every-5min sous le tvk espace de noms. Il sera utilisé pour déclencher une sauvegarde planifiée toutes les cinq minutes en fonction de la BackupPlan objets.

Après avoir créé le manifeste, vous pouvez l'utiliser pour créer le calendrier Policy:

kubectl apply -f scheduled-backup-every-5min.yaml

Votre sortie ressemblera à ceci :

Outputpolicy.triliovault.trilio.io/scheduled-backup-every-5min created

Pour appliquer la politique de planification, vous allez l'ajouter à un ClusterBackupPlan CRD. Ouvrez le ClusterBackupPlan CRD que vous avez créé à l'étape 5 et ajoutez les lignes en surbrillance :

plan de sauvegarde du cluster k8s

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

La ClusterBackupPlan CRD fait référence au Policy CRD défini précédemment via le spec.backupConfig.schedulePolicy champ. Vous pouvez créer des politiques distinctes pour full ou incremental sauvegardes, d'où la fullBackupPolicy ou incrementalBackupPolicy peut être spécifié dans la spécification.

Enregistrez et fermez votre fichier.

Dans cette étape, vous avez planifié des sauvegardes et ajouté une politique de planification à un ClusterBackupPlan. Dans l'étape suivante, vous apprendrez à configurer une politique de rétention pour vos sauvegardes.

Étape 7 - Création d'une politique de rétention de sauvegarde

Dans cette étape, vous allez créer une politique de rétention des sauvegardes, qui détermine la cadence de vos sauvegardes. Les politiques de rétention sont importantes car le stockage est fini et peut devenir coûteux si trop d'objets sont conservés.

La politique de rétention vous permet de définir le nombre de sauvegardes à conserver et la cadence de suppression des sauvegardes conformément aux exigences de conformité. La politique de rétention CRD fournit une spécification YAML pour définir le nombre de sauvegardes à conserver en termes de days, weeks, months, years, latest, etc.

TVK dispose également d'une politique de rétention par défaut, que vous pouvez afficher dans la console TVK sous Sauvegarde et restauration , alors Politiques de rétention :

Les politiques de rétention peuvent être utilisées soit pour BackupPlan ou ClusterBackupPlan CRD. Créez un nouveau fichier appelé sample-retention-policy.yaml et ajoutez les lignes suivantes :

sample-retention-policy.yaml

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-retention-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

Ceci est typique Policy manifeste pour le Retention taper. Voici une explication de la configuration ci-dessus :

  • spec.type: Définit le type de politique : Retention ou Schedule.
  • spec.retentionConfig: Décrit la configuration de la rétention, telle que l'intervalle à utiliser pour la rétention des sauvegardes et le nombre à conserver.
  • spec.retentionConfig.latest: Nombre maximum de dernières sauvegardes à conserver.
  • spec.retentionConfig.weekly: Nombre maximum de sauvegardes à conserver en une semaine.
  • spec.retentionConfig.dayOfWeek: Jour de la semaine pour maintenir les sauvegardes hebdomadaires.
  • spec.retentionConfig.monthly: Nombre maximum de sauvegardes à conserver en un mois.
  • spec.retentionConfig.dateOfMonth: Date du mois pour maintenir les sauvegardes mensuelles.
  • spec.retentionConfig.monthOfYear: Mois de la sauvegarde à retenir pour les sauvegardes annuelles.
  • spec.retentionConfig.yearly: nombre maximum de sauvegardes à conserver en un an.

Dans la politique de rétention configurée ci-dessus, la politique de sauvegarde conserverait une sauvegarde chaque Wednesday sur un weekly base; une sauvegarde sur le 15th jour sur un monthly base; et une sauvegarde tous les March sur un yearly base. Dans l'ensemble, le 2 most recent des sauvegardes seront disponibles.

Le flux de base pour la création d'une ressource de stratégie de rétention est le même que pour les sauvegardes planifiées. Tu as besoin d'un BackupPlan ou un ClusterBackupPlan CRD défini pour référencer la stratégie de rétention, puis un Backup ou ClusterBackup objet pour déclencher le processus.

Pour appliquer la politique de rétention, ouvrez votre ClusterBackupPlan CRD et mettez-le à jour pour qu'il ressemble à ce qui suit :

plan de sauvegarde du cluster k8s

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: sample-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

Le manifeste utilise un retentionPolicy pour faire référence à la politique en question. Vous pouvez avoir un plan de sauvegarde avec les deux types de politiques définies afin qu'il puisse effectuer des sauvegardes planifiées, ainsi que gérer des stratégies de rétention.

Dans cette étape, vous définissez des politiques de rétention pour vos sauvegardes.

Conclusion

Dans ce didacticiel, vous avez installé TrilioVault pour Kubernetes et l'avez utilisé pour sauvegarder et restaurer un cluster. Vous avez également planifié des sauvegardes et configuré des politiques de rétention.

Vous avez accompli des tâches de base pour la sauvegarde de cluster avec TrilioVault pour Kubernetes, vous êtes donc maintenant équipé pour explorer d'autres sujets et supports avec le contenu suivant de la documentation produit de TrilioVault :

Pour en savoir plus sur Kubernetes, consultez la documentation du produit pour DigitalOcean Kubernetes (DOKS) et tutoriels supplémentaires.