Archives par mot-clé : nova

nova backup, yet another snapshot/backup feature?

Etat des lieux

On connait nova image-create qui va tout simplement créer un snapshot de l’instance et le rendre disponible dans le catalogue de Glance comme nouvelle image indépendante. Au passage on a droit à un freeze de la machine pendant un temps plus ou moins long. Cette image peu servir pour restaurer l’instance ou en créer une autre sur la même base que la première.

On connait également cinder backup-create, qui permet de créer une copie indépendante d’un volume (le volume doit être « available » donc détaché), elle sera potentiellement placée sur un autre backend.  Cette copie est identifiée comme backup, elle n’est donc pas listée dans les volumes classique mais elle peut être restaurée à tout moment sur un nouveau volume ou sur le volume d’origine.

On a aussi la possibilité de cinder snapshot-create pour faire un snapshot d’un volume. Il sera potentiellement beaucoup plus rapide que le backup en fonction des backend utilisées puisque ce snapshot ne va pas être une copie intégrale du volume mais uniquement un marqueur pour retrouver un état figé des données. Ce snapshot peut être utilisé comme base pour créer de nouveau volume avec cinder create –snapshot-id.

Diantre, mais que fait nova backup alors ?

Pour faire au plus simple, nova backup permet d’assurer la rotation des snapshots d’une instance.

Exemple, je souhaite backuper mon instance tous les dimanches soir et conserver 3 backups dans l’historique. Je vais utiliser la commande :

$ nova backup devstack bkptest-20151129 weekly 3

Pour voir la rotation, allons au 3 dimanche directement.

$ nova backup devstack bkptest-20151213 weekly 3
$ glance image-list
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+
| ID                                   | Name                        | Disk Format | Container Format | Size         | Status |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+
| 0e2fe0bd-aa12-43ba-b323-a9f50e41f8dd | bkptest-20151129            | raw         | bare             | 858993459200 | active |
| 0b380436-ad8c-48b7-b422-97b5e946a4f6 | bkptest-20151206            | raw         | bare             | 858993459200 | active |
| af853375-6d59-48d4-8ff8-07bd3fb43271 | bkptest-20151213            | raw         | bare             | 858993459200 | active |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+

La rotation se fera au 4e dimanche soir.

$ nova backup devstack bkptest-20151220 weekly 3
$ glance image-list
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+ 
| ID                                   | Name                        | Disk Format | Container Format | Size         | Status |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+ 
| 0e2fe0bd-aa12-43ba-b323-a9f50e41f8dd | bkptest-20151129            | raw         | bare             | 858993459200 | active | 
| 0b380436-ad8c-48b7-b422-97b5e946a4f6 | bkptest-20151206            | raw         | bare             | 858993459200 | active | 
| af853375-6d59-48d4-8ff8-07bd3fb43271 | bkptest-20151213            | raw         | bare             | 858993459200 | active | 
| 98454d8d-1cd5-4ec6-9cae-07ac53a2226a | bkptest-20151220            | raw         | bare             |              | queued |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+

Une fois le backup terminée, le plus ancien est supprimé.

$ glance image-list
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+
| ID                                   | Name                        | Disk Format | Container Format | Size         | Status |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+
| 0b380436-ad8c-48b7-b422-97b5e946a4f6 | bkptest-20151206            | raw         | bare             | 858993459200 | active |
| af853375-6d59-48d4-8ff8-07bd3fb43271 | bkptest-20151213            | raw         | bare             | 858993459200 | active |
| 98454d8d-1cd5-4ec6-9cae-07ac53a2226a | bkptest-20151220            | raw         | bare             | 858993459200 | active |
+--------------------------------------+-----------------------------+-------------+------------------+--------------+--------+

Remarques

Vous aurez noté que c’est à moi de lancer les sauvegarde, OpenStack n’a pas encore de scheduler qui permet de programmer cela. Un rapide appel sur l’API depuis une tâche cron permet de faire le travail.

Autre chose est à noter, le mot weekly n’est qu’une information arbitraire, j’aurais pu choisir « my_most_important_backup ». C’est ce qui permet d’identifier le cycle de rotation.

Workshop 101 : Prise en main

Chaque utilisateur a reçu un numéro. Ce numéro sera utilisé à différente reprise par la variable $ID. Chaque fois que vous voyer $ID, pensez à le remplacer par le numéro qui vous a été fournit.

  1. Se loguer en SSH sur la machine rebond
    1. L’adresse IP de la machine rebond sera communiquée au moment du lab
    2. L’utilisateur est : bounce
    3. Le mot de passe sera communiqué au moment du lab
    4. Ce qui donne :
      ssh bounce@XXX.XXX.XXX.XXX
    5. Une fois loggé, se connecter en root sur localhost en utilisant le port 22$ID, ce qui donne :
      ssh -p 22$ID root@localhost
    6. Le mot de passe sera communiqué au moment du lab
  2. Générer une clé SSH
    1. Nous aurons besoin d’une clé ssh par la suite, pour la générer, utiliser :
      ssh-keygen
    2. Valider chaque choix par la valeur par défaut en utilisant Enter.
  3. Se loguer sur Horizon
    1. Consulter le fichier credentials dans le home de l’utilisateur :
      cat credentials
    2. S’identifier avec ces informations sur la page : https://horizon.cloud.ovh.net/
  4. Upload de la clé ssh
    1. Avant de lancer une instance, nous allons ajouter notre clé ssh, aller dans l’onglet « Access & Security » puis « Key Pairs »
    2. « Import Key Pair » et lui donner le nom « $ID-mykey »
    3. Afficher le contenu de la clé depuis le terminal et le copier/coller :
      cat .ssh/id_rsa.pub
    4. Valider
  5. Démarrer une instance
    1. Aller dans l’onglet « Instances »
    2. Cliquer sur « Launch Instances »
    3. Nommer votre instance « $ID-inst01 »
    4. Utiliser la flavor vps-ssd-1
    5. Selectionner « Boot from Image »
    6. Selectionner l’image « Debian 8 »
    7. Dans l’onglet « Acces & Security », verifier que « $ID-mykey » soit selectionné
    8. Lancer la création de l’instance avec le bouton « Launch »
    9. Patienter jusqu’à ce que l’instance soit « Active »
  6. Ajouter un volume
    1. Dans l’onglet « Volume », cliquer sur « Create Volume »
    2. Donner le nom « $ID-vol01 »
    3. Sélectionner le « Type » « classic »
    4. Changer la « size » à 5 GB
    5. Créer le volume en validern par « Create Volume »
    6. Deployer le menu à la fin de la ligne du volume avec la petite flèche et cliquer sur « Edit Attachement »
    7. Dans le menu déroulant « Attach to instance », sélectionner l’instance « $ID-inst01 » et Valider par « Attach Volume »
  7. Se connecter à l’instance
    1. Récupérer l’adresse publique de l’instance dans l’onglet « Instances »
    2. Se connecter directement avec :
      ssh admin@$IP_PUBLIC
    3. Vérifier la présence du volume avec la commande :
      sudo fdisk -l /dev/sdb
    4. Se déconnecter avec :
      exit
  8. Récupérer openrc.sh
    1. Aller à l’onglet « Acces & Security » puis « API Access »
    2. Cliquer sur « Download OpenStack RC File »
    3. Ovrir le fichier avec un éditeur de texte puis copier/coller
    4. Dans la console ssh, créer un nouveau fichier :
      vi openrc.sh
    5. Dans vi, passer en mode insertion avec la touche « i »
    6. Coller
    7. Sauvegarder avec la séquance « Esc : x  Enter »
    8. Charger l’environnement avec la commande :
      source openrc.sh
    9. Renseigner le mot de passe issu du fichier credentials et valider
  9. Installer les clients
    1. Installer le client en ligne de commande pour Nova (compute) :
      apt-get install -y python-novaclient
  10. Détruire l’instance précédente
    1. Nous allons commencer par lister l’instance créée dans Horizon :
      nova list

      Ce listing devrait afficher toute les instances du Lab

    2. Repérer votre instance et supprimer la :
      nova delete $ID-inst01
  11. Démarrer une instance en ligne de commande
    1. Lister les images et récupérer l’ID de l’image « Debian 8 »:
      nova image-list
    2. Lister les flavors et récupérer l’ID de la flavor « vps-ssd-1 »:
      nova flavor-list
    3. Lister les clé ssh et vérifier bien que la clé « $ID-mykey » est bien présente:
      nova keypair-list
    4. Démarrer l’instance avec la commande:
      nova boot --image $id_image --flavor $id_flavor --key-name $ID-mykey $ID-inst02
    5. Observer son changement de « status » jusqu’à voir « ACTIVE » avec la commande:
      nova show $ID-inst02
  12. Détruire l’instance de la même manière que précédemment
  13. Consulter les scripts applicatifs pour prendre connaissance de la syntaxe du script de post-boot
    Ce format de configuration peut être utiliser pour initialiser tout type de logiciel.

    1. Au choix, vous pouvez utiliser wordpress ou etherpad:
      cat wordpress.yaml
      cat etherpad.yaml
  14. Relancer l’instance avec le script en paramètre pour automatiser le déploiement, utiliser la commande de votre choix parmi:
    1. nova boot --image $id_image --flavor $id_flavor --key-name $ID-mykey --user-data wordpress.yaml $ID-inst03
    2. nova boot --image $id_image --flavor $id_flavor --key-name $ID-mykey --user-data etherpad.yaml $ID-inst03
    3. Suivre l’état de l’instance jusqu’au status « ACTIVE » avec la commande :
      nova show $ID-inst03
    4. Attendre une minute ou deux puis ouvrir un navigateur en utilisant l’adresse IP de l’instance et constater le résultat