diff --git a/docs/code_form/nova/_category_.json b/docs/code_form/nova/_category_.json new file mode 100644 index 00000000..e0124980 --- /dev/null +++ b/docs/code_form/nova/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Nova-Cloud", + "position": 6 +} diff --git a/docs/code_form/nova/creer_vm/_category_.json b/docs/code_form/nova/creer_vm/_category_.json new file mode 100644 index 00000000..991bf58c --- /dev/null +++ b/docs/code_form/nova/creer_vm/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Créer et accéder à sa VM", + "position": 2 +} diff --git a/docs/code_form/nova/creer_vm/acces_vm.md b/docs/code_form/nova/creer_vm/acces_vm.md new file mode 100644 index 00000000..98aaa16f --- /dev/null +++ b/docs/code_form/nova/creer_vm/acces_vm.md @@ -0,0 +1,64 @@ +--- +title: "Accès à la VM" +sidebar_position: 2 +--- + +## Rendre possible l'accès distant +L'accès aux instances créées se fait en ssh. +Pour cela, il est nécessaire que chaque instance ait une adresse ip qui la rende visible et accessible depuis l'extérieur. + +Assurez-vous d'abord d'avoir des adresses ip flottantes allouées au projet et qui ne sont pas déjà associée à une instance. + +### Associer une ip à une instance {#associerIpFlottante} +Utilisez la commande suivante pour associer une adresse ip flottante à une instance en utilisant : +``` bash +openstack server add floating ip +``` +:::note +Cette commande ne produit aucune sortie si tout se passe correctement +::: + +> +**Par exemple :** +> +Admettons que la création d'une nouvelle adresse au projet nous a fourni l'ip flottante __*129.88.195.12*__. +On souhaite associer cette adresse ip à une instance appelée __*VM*__. +``` bash +openstack server add floating ip VM 129.88.195.12 +``` + +### Dissocier une ip d'une instance {#dissocierIpFlottante} +Exécutez la commande suivante pour dissocier une ip flottante d'une instance. +Cette ip pourra être réutilisée en l'associant à une autre instance selon les besoins du projet. +``` bash +openstack server remove floating ip +``` + + +## Accès en ssh +Si le groupe de sécurité est correctement configuré, vous pouvez vous connecter en ssh avec votre clé à l'instance. + +``` bash +ssh @ +``` + +Si vous avez créé l'instance sans créer d'utilisateur alors le nom d'utilisateur est celui par défaut. + +:::note +Par défaut, le nom d'utilisateur dépend de la distribution. +En général, il s'agit du nom de la distribution... C'est le cas pour debian, ubuntu, nixos et cirros. +::: + +> +Par exemple: +Je viens de créer une instance *Ubuntu 18.04.3* à laquelle j'ai associé l'adresse ip *129.88.195.91*. +Pour y accéder en ssh, je dois taper +``` bash +ssh ubuntu@129.88.195.91 +``` + +## Accès en dehors du réseau de l'UGA + +Pour rendre accessible un service en dehors du réseau de l'UGA, vous devez vous adresser à un administrateur systèmes et réseaux proche de votre structure. +Pour un site web (port 443), la demande est facilitée et peut être effectuée ici : +https://formulaires.univ-grenoble-alpes.fr/fr/declaration-site-web. diff --git a/docs/code_form/nova/creer_vm/advanced.md b/docs/code_form/nova/creer_vm/advanced.md new file mode 100644 index 00000000..55bd928a --- /dev/null +++ b/docs/code_form/nova/creer_vm/advanced.md @@ -0,0 +1,174 @@ +--- +title: "Utilisation avancée" +sidebar_position: 3 +--- + +## Création personnalisée avec cloud-init +Il est possible de personnaliser la création d'une instance en fournissant un fichier de données utilisateur. + +Cloud-init est le paquet qui gère l'initialisation d'une instance à l'aide de données utilisateur. +Les données utilisateurs sur lesquelles cloud-init peut agir doivent faire partie de l'un de ces types : + +- include-once-url +- include-url +- cloud-config-archive +- upstart-job +- cloud-config +- part-handler +- shellscript +- cloud-boothook + +Le type définira par quoi doit commencer le fichier de données : + +- un script de données : `#!` +- un fichier include : `#include` +- un fichier de configuration de cloud (cloud-config) : `#cloud-config` +- un job upstart : `#upstart-job` +- un cloud boothook: `#cloud-boothook` +- un part handler : `#part-handler` + +Dans notre cas, nous nous intéresserons plus spécialement au type cloud-config. +Mais vous pouvez en savoir plus en vous référant à la documentation de cloud-init : +[https://cloudinit.readthedocs.io/en/latest/topics/format.html](https://cloudinit.readthedocs.io/en/latest/topics/format.html) + + +### Fichier cloud-config +Le fichier cloud-config est un moyen assez simple pour définir des tâches à accomplir au lancement de l'instance. + +:::note +Un fichier **cloud-config** doit être écrit avec une syntaxe **yaml** valide. +::: + +Pour commencer, le fichier doit débuter par `#cloud-config`. + +> +``` +#cloud-config +# vim: syntax=yaml +# This is a cloud-config file for user-data +``` + + +#### Installation de paquets +L'installation de paquets se fait à l'aide du mot clé : `packages` et la mise à niveau en définissant `package_upgrade` à *'true'*. +Il suffit de faire la liste des paquets à installer sans préciser le dépôt dans lequel aller les chercher. + +> +``` +package_upgrade: true +packages: + - aptitude + - linuxlogo + - vim + - ssh + - python + - gcc + - g++ +``` + + +#### Ajout d'utilisateurs +Avec le mot clé `users` on ajoute des utilisateurs qui pourront accéder à l'instance grâce à leur clé publique. + +> +``` +users: + - name: "user1" + gecos: "user 1" + sudo: ['ALL=(ALL) NOPASSWD:ALL'] + groups: [ wheel , sudo ] + homedir: "/home/user1" + shell: "/bin/bash" + ssh-authorized-keys: [ < public_key_user1 > ] + - name: "ubuntu" + sudo: ['ALL=(ALL) NOPASSWD:ALL'] + groups: [ wheel , sudo ] + homedir: "/home/ubuntu" + shell: "/bin/bash" + ssh-authorized-keys: [ < public_key_user1 > , < public_key_user2 > ] + - name: "user2" + gecos: "user 2" + sudo: ['ALL=(ALL) NOPASSWD:ALL'] + groups: [ wheel , sudo ] + homedir: "/home/user2" + shell: "/bin/bash" + ssh-authorized-keys: [ < public_key_user2 > ] +``` + +#### Ecriture de fichier +Il est possible d'écrire des fichiers au premier lancement avec `write_files` en precisant son contenu, son chemin d'accès (path), ses permissions et son propriétaire. + +> +``` +write_files: + - content: | + #!/bin/bash + var="Hello World" + echo "$var" + owner: root:root + path: /home/ubuntu/hello.sh + permissions: '0777' + - content: | + #!/bin/bash + now="$(date)" + computer_name="$(hostname)" + echo "Current date and time : $now" + echo "Computer name : $computer_name" + owner: root:root + path: /home/ubuntu/Hello/date.sh + permissions: '0777' +``` + +#### Exécution de commandes +Le mot clé `runcmd` liste les commandes à exécuter dans un terminal. + +> +```json +runcmd: + # Personnalisation du bash pour user + - echo "linuxlogo" >> /home/user/.bashrc + - source /home/user/.bashrc + # Execution des deux scripts ecrits plus haut + - bash /home/ubuntu/hello.sh + - bash /home/ubuntu/Hello/date.sh +``` + +#### Message final +Un message final peut être affiché dans le journal de lancement d'une instance pour montrer que tout le cloud-init s'est déroulé sans encombre. + +> +``` +final_message: "The system is finally up, after $UPTIME seconds" +``` + + +### Création de l'instance +Créer une instance personnalisée se fait de la même façon que pour une instance basique mais avec une option en plus : celle du fichier de données utilisateur (`--user-data cloud-config`). +```bash +openstack server create \ + --image \ + --flavor \ + --user-data cloud-config \ + --network -int-net \ + --security-group \ + --key-name \ + +``` + + +## Création à partir d'un volume +Il est possible de démarrer une instance à partir d'un volume plutôt que d'une image. + +Pour cela, utilisez la commande de création d'instance openstack +`openstack server create` avec les options suivantes + +- `--block-device` : qui permet de démarrer à partir d'une source (image, volume ou instantané) existante. +*Par exemple, démarrer l'instance à partir d'une image et lui attacher un volume non-bootable. Ou encore, créer un volume à partir d'une image puis démarrer une instance à partir de ce volume.* +- `--swap` : qui joint un disque d'échange à une instance. +- `--ephemeral` : qui joint un disque éphémère à une instance. + + + +:::note +Pour en savoir plus sur la création d'une instance à partir d'un volume, se référer à la [documentation d'OpenStack](https://docs.openstack.org/nova/latest/user/launch-instance-from-volume.html). +::: \ No newline at end of file diff --git a/docs/code_form/nova/creer_vm/index.md b/docs/code_form/nova/creer_vm/index.md new file mode 100644 index 00000000..0c55e10d --- /dev/null +++ b/docs/code_form/nova/creer_vm/index.md @@ -0,0 +1,35 @@ +--- +title: "Résumé des commandes essentielles" +--- + +Les machines virtuelles OpenStack sont appelées instances. + +Une instance est crée à partir d'une image avec des ressources choisies et une taille qui lui sera allouée. +La taille est redimensionnée dynamiquement au lancement de l'instance en fonction de la place qu'elle occupe réellement. + + +## Résumé des commandes essentielles + +### 1 - Créer une instance +Création d'une instance en renseignant les ressources nécessaires. +``` bash +openstack server create \ +--image --flavor --network --security-group --key-name \ + +``` +Ajout de l'option `--user-data ` pour une création personnalisée avec +[cloud-init](/code_form/nova/creer_vm/advanced.md) +et un fichier de configuration. + + +### 2 - Lui associer une ip flottante +Associer une adresse ip flottante pour rendre l'instance visible et accessible. +``` bash +openstack server add floating ip +``` + +### 3 - Acceder à l'instance +Accéder à l'instance en ssh. +``` bash +ssh @ +``` diff --git a/docs/code_form/nova/creer_vm/standarduse.md b/docs/code_form/nova/creer_vm/standarduse.md new file mode 100644 index 00000000..b399deb5 --- /dev/null +++ b/docs/code_form/nova/creer_vm/standarduse.md @@ -0,0 +1,78 @@ +--- +title: "Créer une VM" +sidebar_position: 1 +--- + +## Lister les instances +Listez les instances avec la commande +``` bash +openstack server list +``` +Cela permet notamment de résumer les informations des instances et de vérifier leur état (*status*), c'est-à-dire si elles sont actives (*ACTIVE*), éteintes (*SHUTOFF*), en état d'erreur (*ERROR*), etc. + +> +Exemple : +> +``` bash +openstack server list ++--------------------------------------+----------------+---------+---------------------------------------------+----------------------------+-----------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+----------------+---------+---------------------------------------------+----------------------------+-----------+ +| 94d7d331-2c8d-4494-b49f-6eb8d3398d5b | youpi4 | BUILD | | | m1.small | +| 31ed9e4f-93e6-451f-b3d6-c84194c3a12f | youpi3 | PAUSED | perseus2-int-net=192.168.0.5 | | m1.small | +| 486ec418-2a71-454d-b488-f912ca768600 | youpi2 | ERROR | | | m1.small | +| 1af59776-a42f-4acb-b58e-84ed5bbc66ca | youpi0 | ACTIVE | perseus2-int-net=192.168.0.8, 129.88.195.94 | ubuntu-19.10-eoan-x86_64 | m1.medium | +| 793edd3d-1947-4dad-834e-794216d9d8f3 | youpi | SHUTOFF | perseus2-int-net=192.168.0.11 | ubuntu-18.04-bionic-x86_64 | m1.small | +| 8b0a16ad-4c8a-44ef-bea1-c724533352e8 | virtualmachine | ACTIVE | perseus2-int-net=192.168.0.4, 129.88.195.91 | | m1.medium | ++--------------------------------------+----------------+---------+---------------------------------------------+----------------------------+-----------+ +``` +> +L'instance *youpi0* est active et fonctionne correctement (*Status = ACTIVE*). +L'instance *youpi* est éteinte (*Status = SHUTOFF*). +L'instance *youpi2* n'a pas réussie à se construire correctement donc elle est en état d'erreur (*Status = ERROR*). +L'instance *youpi3* a été mise en pause ou suspendue (*Status = PAUSED*). +L'instance *youpi4* est en construction (*Status = BUILD*). + + + +## Créer une nouvelle instance +Pour créer une nouvelle instance, il faut préciser l'image source, le gabarit, le réseau, le groupe de sécurité et éventuellement la clé ssh à utiliser. +``` bash +openstack server create \ + --image \ + --flavor \ + --network \ + --security-group \ + --key-name \ + +``` +:::note +Utilisez **toujours** le réseau [**default-net**](/code_form/nova/ressources/reseau#réseau-privé) pour lancer vos instances ! +::: + + +> +**Sur un exemple :** +> +On veut créer une instance appelée my-instance qui aura les caracteristiques suivantes : +> +- l'image: ubuntu-18.04-bionic-x86_64 +- le gabarit: m1.small +- le réseau: default-net +- le groupe de sécurité: default +- la clé ssh: my-key +> +Maintenant que les caractéristiques de l'instance sont rassemblées, pour la construire, on exécute +> +``` bash +openstack server create --image ubuntu-18.04-bionic-x86_64 --flavor m1.small --network project-int-net --security-group default --key-name my-key my-instance +``` + +:::warning Attention +Certaines images sont disponibles sous différents formats et donc portent le même nom. +Dans ce cas utilisez l'ID de l'image souhaitée pour éviter tout conflit à la création de l'instance : +`--image ` +::: +:::note +La source à partir de laquelle on construit une instance n'est pas obligatoirement une image. Cela peut être un instantané ou même un volume bootable mais ce sont des cas particuliers qui seront traités [plus tard](/code_form/nova/creer_vm/advanced#création-à-partir-dun-volume). +::: \ No newline at end of file diff --git a/docs/code_form/nova/description.md b/docs/code_form/nova/description.md new file mode 100644 index 00000000..133b1db8 --- /dev/null +++ b/docs/code_form/nova/description.md @@ -0,0 +1,61 @@ +--- +title: "Description" +sidebar_position: 1 +--- + +import novalogo from '/img/nova/Nova_Logo_Quadri.png?width=100px'; + +Nova Logo + +## OpenStack +OpenStack est un ensemble de logiciels open source qui offre une solution pour déployer et gérer des infrastructures de cloud computing. Pour plus d'informations, vous pouvez visiter le [site officiel](https://www.openstack.org/) ainsi que la [documentation officielle](https://docs.openstack.org/2024.2/). + +## Nova : plateforme de Cloud Computing de GRICAD + +Nova est la plateforme OpenStack de GRICAD, hébergée à Grenoble. Celle-ci vous propose un service de machines virtuelles à la demande. +Accessible via une interface web ou une API, la plateforme permet de gérer des VMs, leur réseau et toutes les ressources liées au Cloud Computing. + +#### Projet Nova à Grenoble + +Le projet Nova met à disposition une infrastructure de cloud computing (IaaS : Infrastructure as a Service) à destination des activités recherche de l'EPE UGA. +Avec Mesonet, Nova met désormais ses ressources à disposition de tout l'ESR français. + +#### Infrastructure technique + +Matériellement, la plateforme se compose d'une partie serveurs hôtes Openstack : + +- **24 serveurs CPU** +- **3 serveurs GPU** comportant chacun **4 GPU NVIDIA H100** +pour un total de : **5184 cœurs**, **40,5 To de mémoire**, **12 GPU NVIDIA H100**. + +Les serveurs hôtes sont complétés par un stockage Ceph (pour les disques des VMs, les images d'OS) : +- **6 nœuds de stockage avec disques NVMe** + +pour un total de **150 To** brut par serveur + + +#### Caractéristiques de la plateforme Nova +- approvisionnement de machines virtuelles à la demande, +- nombreuses options disponibles (capacité CPU, RAM, disque, GPU, etc.), +- OS disponibles : + - Debian, Ubuntu, Cirros, etc. + - n'importe quel OS que vous pourrez téléverser dans votre projet, +- quota et gestion par projet, +- gestion par interface web, en ligne de commande (CLI) et API. + +Chaque projet se voit attribuer un ensemble de ressources (coeurs, mémoire, GPUs, espace disque, réseau) que l'utilisateur peut utiliser pour créer et gérer des VMs à sa convenance. + +#### Accéder au service + +Pour accéder au service de cloud computing Nova de GRICAD, vous devez posséder un compte **IAM** et faire partie d'un projet **Nova-Cloud** sur le [portail](/acces/portail). + +## Cas d'usage + +- Tests et validations : Laboratoires, Expérimentations, Pré-production, Maquettage (*NbGrader*) +- Formation et enseignement +- Traitement de données +- Calcul : HPC / HTC +- Développement sur GPU +- Intégration continue (*Runner gitlab*) +- Serveur Web +- etc. diff --git a/docs/code_form/nova/fondamentaux/_category_.json b/docs/code_form/nova/fondamentaux/_category_.json new file mode 100644 index 00000000..aa672ca2 --- /dev/null +++ b/docs/code_form/nova/fondamentaux/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Fondamentaux", + "position": 1 +} diff --git a/docs/code_form/nova/fondamentaux/acceder_openstack.md b/docs/code_form/nova/fondamentaux/acceder_openstack.md new file mode 100644 index 00000000..fbea730f --- /dev/null +++ b/docs/code_form/nova/fondamentaux/acceder_openstack.md @@ -0,0 +1,38 @@ +--- +title: "Accéder à Openstack" +sidebar_position: 1 +--- + +Tout ce qui est fait sur Openstack peut se faire : soit graphiquement via un navigateur Web, soit en ligne de commande via le client Python Openstack (dans ce cas voir [Installation du client](/code_form/nova/fondamentaux/installation_client)). Dans des cas plus avancés, on pourra utiliser l'API Openstack avec n'importe quel langage de programmation, ou utiliser *Terraform*. + +## Connexion à l'interface Web + +Rendez-vous sur l'interface [https://gricad-cloud.univ-grenoble-alpes.fr/](https://gricad-cloud.univ-grenoble-alpes.fr/), puis connectez-vous au dashboard d'OpenStack. +- Sélectionnez *Authenticate with Mesonet* +- Cliquez sur *Se connecter* + +![connexion](/img/nova/Nova_Connexion.png?height=400px&classes=shadow) + +Si vous souhaitez continuer de manière graphique via le navigateur, vous pouvez suivre le [Quickstart](/code_form/nova/fondamentaux/quickstart). + +## Connexion en ligne de commande ou via les APIs + +:::info +Vous trouverez tous les détails de la configuration du client pour s'authentifier à Openstack [ici](https://docs.openstack.org/python-openstackclient/latest/configuration/index.html#configuration-files) +::: + +Pour vous connecter avec le CLI ou via les APIs, vous pouvez : +- Utilisez les variables d'environnement, un fichier RC est téléchargeable sur *Horizon*. +Il suffit ensuite de *sourcer* ce fichier, celui-ci contenant toutes les variables d'environnement relatives au projet dans lequel vous êtes authentifié. +- Plus moderne, vous pouvez utiliser le fichier *clouds.yml*. Ce fichier est aussi téléchargeable sur *Horizon*. +Ce fichier se place ensuite dans *~/.config/openstack/clouds.yaml* + +:::info +L'avantage du fichier *clouds.yml* est qu'il peut contenir différents Clouds Openstack, différents projets, différents utilisateurs. +::: + +### Récupérer les fichiers **RC** ou *clouds.yml* de votre projet + +Pour cela, cliquez sur votre login en haut à droite de l'interface web. + +![fichierRC](/img/nova/Nova_fichierRC.png?classes=shadow) \ No newline at end of file diff --git a/docs/code_form/nova/fondamentaux/index.md b/docs/code_form/nova/fondamentaux/index.md new file mode 100644 index 00000000..60108f58 --- /dev/null +++ b/docs/code_form/nova/fondamentaux/index.md @@ -0,0 +1,14 @@ +--- +title: "Fondamentaux" +--- + +## Demande de projet Nova + +:::warning Attention +Pour avoir accès à un projet Nova, vous devrez procéder comme pour n'importe quelle demande de projet MesoNET et passer par le [portail Mesonet](https://acces.mesonet.fr). Sur le portail, vous pourrez préciser les ressources souhaitées (nombres de VMs, CPU, RAM, Disque). Voir la [section](/acces/portail) dédiée au portail. +::: + +## Un problème avec un projet NOVA ? + +* Vous pouvez [ouvrir un ticket](https://tickets.mesonet.fr/) ou écrire un mail à [support@mesonet.fr](mailto:support@mesonet.fr). +* Pour plus de détails, voir la section [Support](/support/tickets). \ No newline at end of file diff --git a/docs/code_form/nova/fondamentaux/installation_client.md b/docs/code_form/nova/fondamentaux/installation_client.md new file mode 100644 index 00000000..d553ef0d --- /dev/null +++ b/docs/code_form/nova/fondamentaux/installation_client.md @@ -0,0 +1,54 @@ +--- +title: "Installation du client Openstack" +sidebar_position: 2 +--- + +Pour utiliser OpenStack en ligne de commande il faut installer le client **openstack** sur votre machine, qui est un programme Python. + +## Virtualenv + +:::note +L'installation dans un environnement virtuel spécifique est facultative mais recommandée par les bonnes pratiques. +::: + +Le module *venv* est habituellement installé dans les versions récentes de Python. Créez votre environnement virtuel, par exemple gricad-nova-env. +``` bash +python -m venv gricad-nova-env +``` + +Enfin, activez cet environnement virtuel. +```bash +source gricad-nova-env/bin/activate +``` + + +## Client Openstack + +Installez le client openstack, [documentation du module](https://pypi.org/project/python-openstackclient/). +``` bash +pip install python-openstackclient +``` + +Vous pouvez vérifier que le client est fonctionnel . + +``` bash +openstack --version +``` + +Un exemple pour tester votre authentification à **Nova**, la commande suivante permet de lister les projets dont vous faites partie. +``` bash +openstack project list +``` + +----------------------------------+---------------+ + | ID | Name | + +----------------------------------+---------------+ + | 88ddbfbb9b7f4fe981ce214be524d401 | jupyter | + | b9e236db1d344c3a83b9dafb9a10a2e6 | gitlab-runner | + | d1e48b72350f4e90bb0255e12e6ed602 | ciment-nix-ci | + +----------------------------------+---------------+ + +#### Mise à jour de modules +Il faudra de temps en temps mettre à jour les modules de votre environnement car ils ne sont pas gérés par la distribution. +``` bash +pip install -U MODULE_NAME +``` diff --git a/docs/code_form/nova/fondamentaux/quickstart.md b/docs/code_form/nova/fondamentaux/quickstart.md new file mode 100644 index 00000000..ace8e702 --- /dev/null +++ b/docs/code_form/nova/fondamentaux/quickstart.md @@ -0,0 +1,155 @@ +--- +title: "Quickstart" +sidebar_position: 4 +--- + +Dans ce quickstart, nous allons créer une première machine virtuelle (VM) du début à la fin, en utilisant l'interface graphique (Horizon) via un navigateur Web. +Après la connexion, vous allez pouvoir commencer par créer votre paire de clés, qui servira à vous connecter à vos machines virtuelles. + +## Prérequis + +* Avoir un projet Nova actif et donc un accès à l'interface Web (voir [Accéder à Openstack](/code_form/nova/fondamentaux/acceder_openstack)). +* Avoir généré une paire de clés SSH sur votre machine (voir [SSH](/code_form/nova/fondamentaux/ssh.md)) + +## Créer sa paire de clés + +Après vous être connecté à Openstack, rendez vous dans l'onglet à gauche *Projet > Compute > Paires de clés*, cliquez sur *Importer un clé publique* : + +![screen_keypair](/img/nova/nova_keypair.png?classes=shadow) + +Choisissez un nom pour votre clé. +Choisissez *Clé SSH* pour le *Type de clé*. +Enfin, vous avez le choix entre : +* Sélectionner le fichier correspondant à votre clé **publique**, il s'agit du fichier généré lors des prérequis et qui se termine par **.pub**, par exemple, *id_rsa.pub*. +* Copier coller le contenu du fichier correspondant à votre clé publique + +:::note Rappel +Par défaut, ce fichier est situé dans le dossier **~/.ssh*** +::: + +## Autoriser l'accès SSH + +Il faut, à présent, autoriser les requêtes SSH en provenance de l'extérieur. Il s'agit de modifier le *Groupe de sécurité* par défaut. +Pour cela, rendez vous dans l'onglet à gauche *Projet > Réseau > Groupes de sécurité*, cliquez sur *Gérer les Règles* : + +![screen_secgroup_rule](/img/nova/nova_secgroup_rule.png?classes=shadow) + +Ensuite, cliquez sur *Ajouter une règle* : + +![screen_secgroup_rule_create](/img/nova/nova_secgroup_rule_create.png?classes=shadow) + +Pour *Règle*, choisissez *SSH* : + +![screen_secgroup_rule_create_ssh](/img/nova/nova_secgroup_rule_create_ssh.png?classes=shadow) + +Il faut ensuite choisir la source du *SSH* qui sera autorisée. Vous pouvez laisser les valeurs par défaut *CIDR* et *0.0.0.0/0*, qui correspondent à tout le monde. +**Attention**, plus tard, par mesure de sécurité, il est préférable de remplacer le *0.0.0.0/0*, par votre adresse IP, pour que vous seul puissiez accéder à votre machine virtuelle (VM). En effet, il est conseillé de restreindre au maximum les accès via *SSH*, du fait des nombreuses tentatives de connexion malveillantes. + + +![screen_secgroup_rule_create_ssh2](/img/nova/nova_secgroup_rule_create_ssh2.png?classes=shadow) + + +## Créer son instance + +Nous pouvons maintenant passer à l'étape la plus importante, créer une *instance*, c'est le nom donné à une machine virtuelle par Openstack. +Pour cela, rendez vous dans l'onglet à gauche *Projet > Compute > Instances*, cliquez sur *Lancer une instance* : + +![screen_instance](/img/nova/nova_vm_create.png?classes=shadow) + +* Dans l'onglet *Détails* + * Choisissez un nom pour votre instance. Vous pouvez également ajouter une description. + * Pour le reste, laissez les valeurs par défaut + +![screen_details](/img/nova/nova_vm_create_1.png?classes=shadow) + +* Dans l'onglet *Source* + * Choisissez le système d'exploitation que vous souhaitez, dans la version que vous souhaitez, par exemple *debian-12-bookworm-x86_64*. + * Vous pouvez augmenter la taille du volume créé si vous le souhaitez. Par défaut, sa taille est de **20 Go**. Dans tous les cas, il sera possible d'ajouter un volume supplémentaire à cette instance après sa création, comme on branche un disque dur à une machine physique. + +![screen_source](/img/nova/nova_vm_create_2.png?classes=shadow) + +* Dans l'onglet *Gabarit* + * Choisissez les ressources que vous allouez à votre instance : la quantité de CPUs, de RAM, et de disque. + +![screen_flavor](/img/nova/nova_vm_create_3.png?classes=shadow) + +* Dans l'onglet *Réseaux* + * Le réseau créé par défaut *default-net* est, normalement, déjà sélectionné. Si ce n'est pas le cas, sélectionnez-le. + +![screen_network](/img/nova/nova_vm_create_4.png?classes=shadow) + +* Dans l'onglet *Groupes de sécurité* + * Le groupe de sécurité créé par défaut *default* est, normalement, déjà sélectionné. Si ce n'est pas le cas, sélectionnez-le. + +![screen_secgroupvm](/img/nova/nova_vm_create_7.png?classes=shadow) + + +* Dans l'onglet *Key Pair* + * Vous retrouvez la paire de clés que nous avons créée au début de ce tutoriel dans la partie [Créer sa paire de clés](#créer-sa-paire-de-clés), elle est déjà sélectionnée. Si ce n'est pas le cas, sélectionnez-la. + +![screen_keypair2](/img/nova/nova_vm_create_6.png?classes=shadow) + +**La création de la machine virtuelle est terminée !** Nous pouvons passez à l'étape suivante. + +## Rendre la machine virtuelle accessible depuis l'extérieur + +Pour le moment, notre machine virtuelle est créée mais n'est pas accessible depuis notre machine. Pour la rendre accessible, nous allons lui associer une adresse IP publique flottante. +Rendez vous dans l'onglet à gauche *Projet > Réseau > IP flottantes* : + +![screen_ipcreate](/img/nova/nova_vm_ip_create.png?classes=shadow) + +* On sélectionne *public* pour le pool d'IPs +* Vous pouvez ajouter une description à votre adresse IP +* **Obligatoire** : Pour le nom de domaine DNS, seule une liste de noms est autorisée : **nova.u-ga.fr.**, **u-ga.fr.** et **univ-grenoble-alpes.fr.** +* Choisissez ensuite un nom DNS pour votre IP. Ce nom sera concaténé avec le nom de domaine précédent. Au final, vous pourrez, par exemple, accéder à votre machine virtuelle avec le nom *ma-vm.u-ga.fr*. + +:::warning Attention +Le **.** à la fin de *u-ga.fr.* est important. +::: + +![screen_ipcreatesettings](/img/nova/nova_vm_ip_create_settings.png?classes=shadow) + +Il ne reste plus qu'à associer cette IP avec la machine virtuelle créée précédemment. Pour cela, cliquez sur *Associer* à côté de l'IP qui vient d'être créée. + +:::warning Attention +Si vous souhaitez conserver votre déclaration DNS au moment de la suppression de votre VM, il faudra penser à dissocier votre IP flottante avant la suppression. +::: + +![screen_ipassociate](/img/nova/nova_vm_ip_associate.png?classes=shadow) + +Enfin, sélectionnez le port de votre machine virtuelle, à associer à votre IP, dans notre exemple, la machine virtuelle s'appelle *exemple* et son IP privé est *192.168.1.43*. + +![screen_ipassociatesettings](/img/nova/nova_vm_ip_associate_settings.png?classes=shadow) + +Ça y est ! Notre machine virtuelle est accessible depuis notre machine. + +## Tester l'accès à la VM + + + +Il ne reste plus qu'à se connecter à la machine virtuelle en SSH pour en profiter : +**Attention**, l'utilisateur par défaut est *ubuntu* pour un système d'exploitation Ubuntu, et *debian* pour un système d'exploitation Debian. De plus, il faut être connecté au réseau de l'UGA ou au VPN pour se connecter aux instances. + +```bash +user@user-gricad:~$ ssh debian@ma-vm.u-ga.fr +``` + +*Remarque* : Vous pouvez également utiliser directement l'adresse IP au lieu du nom DNS. + +```bash +user@user-gricad:~$ ssh debian@129.88.204.55 +``` + +Pour rendre accessible un service en dehors du réseau de l'UGA, vous devez vous adresser à un administrateur systèmes et réseaux proche de votre structure. +Pour un site web (port 443), la demande est facilitée et peut être effectuée ici : +https://formulaires.univ-grenoble-alpes.fr/fr/declaration-site-web. + +## Pour aller plus loin + +**Attention**, pour rappel, votre machine virtuelle est accessible depuis n'importe quelle adresse IP, il est préférable de filtrer les IPs autorisées. Pour cela, voir [Groupes de sécurité](code_form/nova/ressources/groupe_secu.md). diff --git a/docs/code_form/nova/fondamentaux/ssh.md b/docs/code_form/nova/fondamentaux/ssh.md new file mode 100644 index 00000000..a143928b --- /dev/null +++ b/docs/code_form/nova/fondamentaux/ssh.md @@ -0,0 +1,67 @@ +--- +title: "Gestion des clés SSH" +sidebar_position: 3 +--- + +## Préparer l'accès ssh aux VMs +L'accès aux machines virtuelles que vous allez créer se fait par clé ssh. +Le principe est simple, la clé privée reste sur votre poste de travail et la clé publique associée est mise dans la liste des clés autorisées pour se connecter. +Si vous ne vous êtes jamais connecté en ssh, vous allez devoir générer une paire de clés. +Si vous avez déjà une paire de clés, vous pouvez l'utiliser. + +Il est conseillé de générer une ou plusieurs paires de clés dédiées : +- à la plateforme Nova +- par projet +- par instance de machine virtuelle + +#### Création d'une paire de clé +Le niveau minimum de sécurité est d'avoir une clé RSA de 4096 bits protégée par mot de passe et d'utiliser par la suite un agent ssh pour ne pas avoir à taper ce mot de passe à chaque commande. +``` bash +ssh-keygen -t rsa -b 4096 +``` + +``` text +Generating public/private rsa key pair. +Enter file in which to save the key (/home/noemie/.ssh/id_rsa): +``` + +Entrez un nom pour la paire de clé, par exemple *id_rsa_nova*. + +Ensuite, une passphrase (mot de passe) vous sera demandée deux fois pour protéger la clé privée. +``` bash +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in id_rsa_nova. +Your public key has been saved in id_rsa_nova.pub. +The key fingerprint is: +SHA256:q+zRYSQS1dBU0iEuy6Vs1IhqBwtiiNQeBKuZMV/+U4A noemie@noemie-HP-EliteBook-820-G3 +The key's randomart image is: ++---[RSA 4096]----+ +| o+...o=+oo. | +|+ .o + +oo. | +|Boo E * = | +|+B B = O | +|+ = o * S | +| . . o + o | +| + o | +| . + | +| .+ | ++----[SHA256]-----+ +``` +Félicitations, vous venez de créer une paire de clé (*id_rsa_nova* , *id_rsa_nova.pub*). +Les clés sont générées dans le **dossier caché .ssh/** à la racine de votre répertoire personnel (~). +La clé privée, *id_rsa_nova*, sauvegarde l'identification et **ne doit être divulguée sous aucun prétexte**. +C'est la clé publique, *id_rsa_nova.pub*, qui sera utilisée lors de la création des machines virtuelles pour accéder en SSH au compte par défaut. + +#### Agent ssh +Si on veut éviter de saisir la passphrase à chaque connexion à une instance on peut passer par le **ssh-agent**. +Il suffit de renseigner la passphrase au ssh-agent avec la commande *ssh-add*. + +``` bash +ssh-add +``` + +```text +Enter passphrase for /home//.ssh/id_rsa: +Identity added: /home//.ssh/id_rsa (/home//.ssh/id_rsa) +``` diff --git a/docs/code_form/nova/gerer_vm/_category_.json b/docs/code_form/nova/gerer_vm/_category_.json new file mode 100644 index 00000000..1f4f2340 --- /dev/null +++ b/docs/code_form/nova/gerer_vm/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Gérer sa VM", + "position": 3 +} diff --git a/docs/code_form/nova/gerer_vm/index.md b/docs/code_form/nova/gerer_vm/index.md new file mode 100644 index 00000000..42852c00 --- /dev/null +++ b/docs/code_form/nova/gerer_vm/index.md @@ -0,0 +1,38 @@ +--- +title: "Gérer sa VM" +--- + +Même si ce sont des machines virtuelles et non physiques, elles sont malgré tout hebergées sur des serveurs physiques et utilisent des ressources tant qu'elles sont en fonctionnement. + +C'est pourquoi il est important de ne pas oublier de stopper les machines qui n'ont pas besoin de fonctionner en continu et de supprimer celles qui ne sont plus utiles, afin de libérer les ressources allouées. + + +## Résumé des commandes essentielles + +### Créer un instantané +Pour sauvegarder l'état d'une instance (dans le but d'une restauration ou d'une migration), il est possible de faire un instantané. + +``` bash +openstack server image create --name myInstanceSnapshot +``` + +:::note +Assurez-vous d'abord que l'instance soit bien arrêtée, sinon les données ne sont pas assurées d'être vidées sur le disque. +::: + + +### Stopper/supprimer une instance +Stoppez une instance qui n'a pas besoin de fonctionner en continue. +``` bash +openstack server stop +``` + +Supprimez définitivement une instance devenue inutile pour libérer les ressources allouées. +``` bash +openstack server delete +``` + + +:::tip +En plus, c'est bon pour la planète ! +::: \ No newline at end of file diff --git a/docs/code_form/nova/gerer_vm/snapshot.md b/docs/code_form/nova/gerer_vm/snapshot.md new file mode 100644 index 00000000..672abf93 --- /dev/null +++ b/docs/code_form/nova/gerer_vm/snapshot.md @@ -0,0 +1,52 @@ +--- +title: "Instantané de VM" +sidebar_position: 1 +--- + +Faire un instantané - snapshot - d'une instance peut être utile si on souhaite garder une certaine version d'une instance. +Cela permet par exemple de relancer une instance depuis une version précédente, ou bien de migrer une instance vers un autre projet. + +## Création d'instantané +Avant de prendre un instantané, assurez-vous que la machine virtuelle soit arrêtée. +:::warning +Si l'instance n'est pas arrêtée, les données ne sont pas assurées d'être vidées sur le disque. +::: + +Prenez l'instantané en utilisant la commande +``` bash +openstack server image create --name myInstanceSnapshot +``` +Cela produit une image du nom de *myInstanceSnapshot*. + +> +``` bash +openstack image list ++------------+---------------------------------+--------+ +| ID | Name | Status | ++------------+---------------------------------+--------+ +| id-image-1 | cirros-0.3.5-x86_64-uec | active | +| id-image-2 | cirros-0.3.5-x86_64-uec-kernel | active | +| id-image-3 | cirros-0.3.5-x86_64-uec-ramdisk | active | +| id-image-4 | myInstanceSnapshot | active | ++------------+---------------------------------+--------+ +``` + +## Cas d'usage + +#### Lancer une instance depuis un instantané +Lancer une nouvelle instance en utilisant un instantané en guise d'image. +``` bash +openstack server create --flavor --image +``` + +#### Migrer vers un autre projet +Si on veut migrer une instance vers un autre projet OpenStack, il faut + +1. télécharger l'instantané sous forme d'image +2. importer l'image dans le nouveau projet +3. lancer une nouvelle instance en utilisant l'instantané importé comme image + + +:::note +Pour en savoir plus sur les instantanés, se référer à la page de [documentation d'OpenStack](https://docs.openstack.org/nova/latest/admin/migrate-instance-with-snapshot.html). +::: \ No newline at end of file diff --git a/docs/code_form/nova/gerer_vm/stopvm.md b/docs/code_form/nova/gerer_vm/stopvm.md new file mode 100644 index 00000000..2278e356 --- /dev/null +++ b/docs/code_form/nova/gerer_vm/stopvm.md @@ -0,0 +1,34 @@ +--- +title: "Arrêt/Suppression de VM" +sidebar_position: 1 +--- + + + +## Arrêt d'une instance + +Pensez à arrêter les instances n'effectuant plus de traitement pour ne pas faire tourner de machines virtuelles inutillement. + +``` bash +openstack server stop +``` + + +## Suppression d'une instance + +:::warning Attention +Si vous avez associé une IP flottante à votre VM et que celle-ci contient un nom de domaine, il faut dissocier votre IP flottante avant la suppression. +Sinon, vous perdrez votre déclaration DNS et vous devrez créer une nouvelle IP flottante en indiquant votre nom de domaine. +::: + +Pensez à supprimer les instances dont vous n'avez plus l'usage. + +``` bash +openstack server delete +``` +Cela permettra de libérer des ressources pour créer de nouvelles instances. + + +:::tip +En plus, c'est bon pour la planète ! +::: \ No newline at end of file diff --git a/docs/code_form/nova/index.md b/docs/code_form/nova/index.md new file mode 100644 index 00000000..f731f1b2 --- /dev/null +++ b/docs/code_form/nova/index.md @@ -0,0 +1,17 @@ +--- +title: "Nova-Cloud, cloud Openstack" +--- + +## OpenStack +[OpenStack](https://www.openstack.org/) est un ensemble de logiciels open source qui offre une solution pour déployer et gérer des infrastructures de cloud computing. + + +## Nova : plateforme de Cloud Computing de GRICAD +Nova est la plateforme OpenStack de GRICAD, hébergée à Grenoble. Celle-ci vous propose un service de machines virtuelles à la demande. +Accessible via une interface web ou une API, la plateforme permet de gérer des VMs, leur réseau et toutes les ressources liées au Cloud Computing. + +* [Description de la plateforme](/code_form/nova/description) +* [Fondamentaux](/code_form/nova/fondamentaux) +* [Créer et accéder à sa VM](/code_form/nova/creer_vm) +* [Gérer sa VM](/code_form/nova/gerer_vm) +* [Ressources](/code_form/nova/ressources) diff --git a/docs/code_form/nova/ressources/_category_.json b/docs/code_form/nova/ressources/_category_.json new file mode 100644 index 00000000..bafda479 --- /dev/null +++ b/docs/code_form/nova/ressources/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Ressources", + "position": 4 +} diff --git a/docs/code_form/nova/ressources/cle.md b/docs/code_form/nova/ressources/cle.md new file mode 100644 index 00000000..3e73146d --- /dev/null +++ b/docs/code_form/nova/ressources/cle.md @@ -0,0 +1,34 @@ +--- +title: "Clés SSH" +--- + +Pour se connecter aux instances de machines virtuelles, vous devez déposer la partie publique de votre clé ssh. + +## Liste des clés disponibles +Vous pouvez afficher la liste des clés ssh disponibles avec la commande +``` bash +openstack keypair list +``` +*Si vous venez de vous authentifier pour la première fois, il est normal qu'aucune clé ne s'affiche : vous ne l'avez pas encore déposé.* + +## Déposer sa clé publique +Déposez votre clé publique ssh : +``` bash +openstack keypair create --public-key ~/.ssh/id_rsa_nova.pub tascan-rsa ++-------------+-------------------------------------------------+ +| Field | Value | ++-------------+-------------------------------------------------+ +| fingerprint | 9e:33:58:35:62:df:be:4b:47:4b:ba:bc:0e:8d:d9:26 | +| name | tascan-rsa | +| user_id | b8b092a17bce4974b0cbd83179014f01 | ++-------------+-------------------------------------------------+ +``` +Cette fois, lorsqu'on liste les clés disponibles, votre clé apparaît. +``` bash +openstack keypair list ++------------+-------------------------------------------------+ +| Name | Fingerprint | ++------------+-------------------------------------------------+ +| tascan-rsa | 9e:33:58:35:62:df:be:4b:47:4b:ba:bc:0e:8d:d9:26 | ++------------+-------------------------------------------------+ +``` diff --git a/docs/code_form/nova/ressources/flavor.md b/docs/code_form/nova/ressources/flavor.md new file mode 100644 index 00000000..ac00b599 --- /dev/null +++ b/docs/code_form/nova/ressources/flavor.md @@ -0,0 +1,68 @@ +--- +title: "Gabarit" +--- + +Un gabarit (ou *flavor* en anglais) est un ensemble de ressources qui servira à dimensionner une nouvelle instance : +- la taille du disque système +- la quantité de mémoire +- le nombre de cœurs + +Ces gabarits sont prédéfinis et seuls ceux respectant les quotas disponibles peuvent être utilisés dans une nouvelle instanciation. + +Une instance peut changer de gabarit après sa création (RESIZING). +Vous pouvez commencer par choisir le plus petit gabarit nécessaire pour votre application. + +Pour en connaître la liste, utilisez la commande `openstack flavor list`. + +:::warning +Attention, deux nommages cohabitent. Les gabarits dont les noms commencent par **m1** ou **m0** sont obsolètes +::: + +### Gabarits + +```text ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +| add86f5b-dee4-4153-a540-e4d785b24905 | cpuX1 | 1024 | 20 | 0 | 1 | True | +| 9a9e4ac7-1117-4acf-9043-8d94cb0fb7f2 | cpuX2 | 2048 | 20 | 0 | 2 | True | +| ba2bb750-e643-4269-beb1-a2b952400c4f | cpuX4 | 4096 | 20 | 0 | 4 | True | +| bdbe80dc-c7ff-4f29-8692-a3e407fe9b10 | cpuX8 | 8192 | 20 | 0 | 8 | True | +| a5b8f263-2bf3-485e-b30c-ff1d8fa61691 | cpuX16 | 16384 | 20 | 0 | 16 | True | +| e66de889-8cb1-4e1a-b18f-28dcbaf9d098 | cpuX32 | 32768 | 20 | 0 | 32 | True | +| 4211c963-f6ff-4e3c-beb5-45f2a1343ebc | genX1 | 4096 | 20 | 0 | 1 | True | +| 7210586d-a601-4ff1-9b4b-e3984dba1fcb | genX2 | 8192 | 20 | 0 | 2 | True | +| 99485c70-2187-46e5-bc01-2b9172a35800 | genX4 | 16384 | 20 | 0 | 4 | True | +| acd8e74d-bc54-4660-b7ba-1196e9ba0f96 | genX8 | 32768 | 20 | 0 | 8 | True | +| 05e69d2e-d7d3-4a90-ac8d-278ec0acbef9 | genX16 | 65536 | 20 | 0 | 16 | True | +| 33dcc0e5-25ba-43d7-9e04-f87ed95471a3 | genX32 | 131072 | 20 | 0 | 32 | True | +| a27a0cc1-b597-4dee-b373-4d44f0be7458 | memX1 | 7168 | 20 | 0 | 1 | True | +| c3131ce5-b1b3-407e-97c1-055df44492a3 | memX2 | 14336 | 20 | 0 | 2 | True | +| f9dee688-78bf-4d89-a377-4a1b45274383 | memX4 | 28672 | 20 | 0 | 4 | True | +| c5cfe9a0-9b2b-4ed4-84f4-4310d3f0cb51 | memX8 | 57344 | 20 | 0 | 8 | True | +| 2e59fcb2-f8af-4982-8ff2-3312f1b3d5d0 | memX16 | 114688 | 20 | 0 | 16 | True | +| 5d447560-101e-41c8-aa23-0c3da13d369f | memX32 | 229376 | 20 | 0 | 32 | True | ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +``` + +### Gabarits obsolètes + +```text ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +| 0b28b3b0-1d84-430a-849f-4d380c7a02df | m0.xxlarge | 32768 | 80 | 0 | 8 | True | +| 15b0660a-c92e-45ef-a55f-8fe3e38ad88b | m1.xxlarge | 32768 | 80 | 0 | 16 | True | +| 2f7317be-88b7-4dfc-ba62-83d7536864a5 | m1.tiny | 512 | 1 | 0 | 1 | True | +| 329143cc-ec6f-4df1-a937-a47266387edd | m1.xxxlarge | 65536 | 80 | 0 | 20 | True | +| 4d3e0d50-a24a-4dc3-9f15-509f1ceeef67 | m4.large | 65536 | 80 | 0 | 4 | True | +| 58ccf266-4ede-4836-b5a6-e765d2f9f832 | m1.medium | 4096 | 40 | 0 | 2 | True | +| 5fedd9dd-7748-45fd-bca8-d5d91c48c50f | m1.xlarge.sdisk | 16384 | 20 | 0 | 8 | True | +| 9b6a2eeb-ddf0-4dfa-acc9-f7d717d7274e | m1.xhuge | 262144 | 80 | 0 | 28 | True | +| a41da623-1ecf-46ae-bec6-052e1cf1808c | m1.huge | 131072 | 80 | 0 | 24 | True | +| afd02c79-0d6f-4545-951f-bdbe792c6be0 | m0.huge.sdisk | 49152 | 20 | 0 | 24 | True | +| c15427d1-6e24-4549-8ed1-167e35c2b0fa | m1.large | 8192 | 80 | 0 | 4 | True | +| ee2a7255-936e-4088-99da-f494d8539787 | m1.small | 2048 | 20 | 0 | 1 | True | +| ef98c96f-1344-4ab4-845b-d7d04b7bc0e3 | m1.xlarge | 16384 | 80 | 0 | 8 | True | ++--------------------------------------+-------------------+--------+------+-----------+-------+-----------+ +``` diff --git a/docs/code_form/nova/ressources/floatingip.md b/docs/code_form/nova/ressources/floatingip.md new file mode 100644 index 00000000..94a9cf2d --- /dev/null +++ b/docs/code_form/nova/ressources/floatingip.md @@ -0,0 +1,48 @@ +--- +title: "IP Flottante" +--- + +## 1- Principe de fonctionnement +Comme vu précédemment pour une configuration réseau classique sur NOVA, chaque instance possède une interface avec une adresse IP privée fixe. +Si elle permet de communiquer vers l'extérieur via la translation d'adresse du routeur, elle ne suffit pas pour être jointe depuis l'extérieur du projet. +Pour cela, il faut recourir à une IP flottante du réseau **public**. +Une IP flottante est un objet du projet, en lien avec le sous-réseau du réseau **public** et avec son quota de ressources. +Elle doit être allouée avant d'être associée ou dissociée d'une interface réseau d'instance. +Elle peut enfin être libérée. + +Exécutez la commande suivante pour voir la liste des adresses IP flottantes allouées dans le projet. +``` bash +openstack floating ip list +``` + +## 2- Déclaration DNS automatique {#declarationDNS} + +Une déclaration associant l'adresse IP publique de l'IP flottante à un nom (déclaration DNS de type A) est automatiquement tentée sur le serveur DNS de l'UGA (API IPAM). +Pour utiliser cette fonctionnalité, il faut renseigner, à l'allocation de l'IP flottante, les attributs _dns_name_ et _dns_domain_. +_dns_name_ est la partie gauche avant le premier "." du Fully Qualified Domain Name. +_dns_domain_ est la partie droite après le premier "." du FQDN et jusqu'au "." final compris qui est obligatoire. +Les domaines autorisés sont limités à "**nova.u-ga.fr.**", "**u-ga.fr.**" et "**univ-grenoble-alpes.fr.**". +Comme il s'agit de donner un nom public aux instances de calcul, le domaine technique "**u-ga.fr.**" est tout indiqué. +Le sous-domaine "**nova.u-ga.fr.**" est à disposition pour réduire le risque de conflit avec un nom DNS existant. +Car en cas de conflit, les déclarations échouent en silence sans interrompre l'allocation de l'IP flottante. +Une suggestion pour lever tout conflit potentiel : choisir _dns_domain_ "**nova.u-ga.fr.**" avec comme _dns_name_ TODO. + +L'allocation de l'IP flottante déclenche aussi la déclaration DNS inverse de type PTR. +Ces déclarations sont automatiquement supprimées lors de la libération de l'IP flottante et lorsqu'elle est encore associée à une instance au moment de sa destruction. + +:::warning Attention +Si vous souhaitez conserver votre déclaration DNS au moment de la suppression de votre VM, il faudra penser à dissocier votre IP flottante avant la suppression +::: + +## 3- Allouer une IP flottante {#allouerIpFlottante} +Pour allouer une IP flottante au projet, il faut créer une adresse dans le sous-réseau **public**. +Pour cela, executez la commande : +```bash +openstack floating ip create \ +--dns-name --dns-domain nova.u-ga.fr. \ +public +``` + +## 4- Associer une IP flottante à une instance +L'association peut se faire lors de l'instanciation de la VM ou après coup, +voir [Accès aux VMs](/code_form/nova/creer_vm/acces_vm#associerIpFlottante). \ No newline at end of file diff --git a/docs/code_form/nova/ressources/groupe_secu.md b/docs/code_form/nova/ressources/groupe_secu.md new file mode 100644 index 00000000..2d66d9ca --- /dev/null +++ b/docs/code_form/nova/ressources/groupe_secu.md @@ -0,0 +1,135 @@ +--- +title: "Groupe de sécurité" +--- +Le groupe de sécurité est le **pare-feu** qui va protéger les instances en gérant les **autorisations d'accès** au réseau. + +Le groupe de sécurité - __*security group*__ - par défaut autorise toutes les communications sortantes mais aucune communication entrante. +Les règles de groupe ne sont pas figées et peuvent donc être modifiées à tout moment : soit en supprimant, soit en ajoutant de nouvelles règles. + +Les groupes de securités peuvent être utilisés séparément ou de manière cumulée. + +## Les groupes +### Groupes disponibles +Vous pouvez lister les groupes existants dans le projet avec `openstack security group list`. +``` bash +openstack security group list ++--------------------------------------+-----------------+------------------------+----------------------------------+------+ +| ID | Name | Description | Project | Tags | ++--------------------------------------+-----------------+------------------------+----------------------------------+------+ +| 2d9d1210-78f9-47e4-87a5-68851cc9f5ec | nbgrader | | 88ddbfbb9b7f4fe981ce214be524d401 | [] | +| ea78016d-725c-4e7a-9a80-8f9ab3dd0db2 | default | Default security group | 88ddbfbb9b7f4fe981ce214be524d401 | [] | +| ee67a987-6e4e-4228-baac-0c5541e62631 | jupyterhub-test | | 88ddbfbb9b7f4fe981ce214be524d401 | [] | ++--------------------------------------+-----------------+------------------------+----------------------------------+------+ +``` + +Il est également possible de voir en détail les règles définies dans un groupe de sécurité avec la commande `openstack security group rule list `. +``` bash +openstack security group rule list my-security-group ++--------------------------------------+-------------+-----------+------------+-----------------------+ +| ID | IP Protocol | IP Range | Port Range | Remote Security Group | ++--------------------------------------+-------------+-----------+------------+-----------------------+ +| 01e07f78-264d-478c-b100-fed022cc72ed | None | None | | None | +| 22d0ff13-360b-4fbb-8a3a-82d3235cfe34 | tcp | 0.0.0.0/0 | 22:22 | None | +| 45d6f8d3-ebca-485b-973f-62586c6859fc | None | None | | None | +| ac5211e7-62c3-4e6c-af02-d09a60878f99 | tcp | 0.0.0.0/0 | 80:80 | None | +| fd0fc114-421a-4686-8ae2-2ca44fcdfdfd | tcp | 0.0.0.0/0 | 443:443 | None | ++--------------------------------------+-------------+-----------+------------+-----------------------+ +``` + + +### Création d'un nouveau groupe +Vous pouvez créer un nouveau groupe de sécurité avec `openstack security group create `. + +> +Par exemple : on crée un nouveau groupe appelé *my-security-group*. +``` bash +openstack security group create my-security-group +``` + +À sa création, le nouveau groupe n'a pas de règles de filtrage particulières, il faut donc les ajouter en fonction des besoins d'accès à l'instance. + + +## Les règles de filtrage + +### Ajout de règle +Pour lister les règles d'un groupe de sécurité, utilisez la commande `openstack security group rule list `. +Les nouveaux filtres sont ajoutés avec `openstack security group rule create`. + +> +Par exemple, on souhaite ajouter un filtre pour pouvoir se connecter en ssh à la machine. +Dans un premier cas, on autorise seulement une plage d'adresses ip donnée +``` bash +openstack security group rule create my-security-group \ + --remote-ip 152.77.223.66/32 \ + --ingress \ + --dst-port 22 \ + --protocol tcp +``` +Dans le deuxième cas, on autorise l'accès à partir d'adresses ip provenant d'un autre groupe de sécurité appelé *other-security-group*. +``` bash +openstack security group rule create my-security-group \ + --protocol tcp \ + --dst-port 22 \ + --remote-group other-security-group +``` + +Grace aux règles de filtrage, on choisit quels protocoles sont autorisés et quels ports sont ouverts et disponibles : +on limite ainsi la visibilité des instances au reste du monde. + +### Exemples de filtres +Dans cette partie on donne quelques exemples de protocoles et de ports à ouvrir pour autoriser différentes connexions. Les filtres sont appliqués à toutes les adresses ip du sous-réseau: 0.0.0.0/0. + +#### Règles pour le protocole TCP + +##### Accès en ssh - port 22 +Afin de pouvoir se connecter en ssh à une instance, il faut que le groupe de securité autorise le protole TCP avec le port 22 ouvert. +``` bash +openstack security group rule create my-security-group \ + --protocol tcp \ + --dst-port 22 \ + --remote-ip 0.0.0.0/0 +``` + +##### Accès en HTTP - port 80 +La communication en HTTP n'est possible qu'en autorisant le protocole TCP et en ouvrant le port 80. +``` bash +openstack security group rule create my-security-group \ + --protocol tcp \ + --dst-port 80 \ + --remote-ip 0.0.0.0/0 +``` + +##### Accès en HTTPS - port 443 +La version securisée de HTTP communique elle aussi via le protocole TCP et en utilisant le port 443. +``` bash +openstack security group rule create my-security-group \ + --protocol tcp \ + --dst-port 443 \ + --remote-ip 0.0.0.0/0 +``` + +##### Ouverture d'une plage de ports +Il est également possible d'ouvrir une plage de ports. +Par exemple, pour NetBIOS, on ouvre les ports 137 à 139. +``` bash +openstack security group rule create my-security-group \ + --protocol tcp \ + --dst-port 137:139 \ + --remote-ip 0.0.0.0/0 +``` + +Pour d'autre type de connexion TCP : voir la [liste complète des ports TCP](https://fr.wikipedia.org/wiki/Liste_de_ports_logiciels). + + +#### Règles pour le protocole ICMP +Pour autoriser un ping des instances, il faut permettre l'accès au trafic ICMP : +``` bash +openstack security group rule create my-security-group \ + --protocol icmp \ +``` + + +### Suppression de règle +``` bash +openstack security group rule delete RULE_ID +``` diff --git a/docs/code_form/nova/ressources/images.md b/docs/code_form/nova/ressources/images.md new file mode 100644 index 00000000..116f17bd --- /dev/null +++ b/docs/code_form/nova/ressources/images.md @@ -0,0 +1,49 @@ +--- +title: "Images" +--- + +Les images sont des modèles de volume système qui servent à l'instanciation d'une VM. +Une nouvelle VM ne fait pas une installation mais elle va se baser sur une image pour initialiser le contenu du volume système avant de le personnaliser. + +## Images disponibles (novembre 2024) +Quelques images de systèmes GNU/Linux standards sont mises à disposition et peuvent être listées grâce à la commande `openstack image list` : +```bash +openstack image list ++--------------------------------------+----------------------------------------------+--------+ +| ID | Name | Status | ++--------------------------------------+----------------------------------------------+--------+ +| 19a1d9f1-d397-492f-9428-0167779cda0f | cirros-0.5.2-x86_64 | active | +| b7368135-2aae-4ce5-9a00-c7fea4a637ad | debian-10-buster-x86_64 | active | +| 0040734d-a17d-400b-b18c-efc60b4c636f | debian-10-x86_64 | active | +| d56a0d26-b3b8-4db9-937a-1e7f1691d304 | debian-11-bullseye-x86_64 | active | +| 54e3e595-162b-4a5e-b141-481ad70c1204 | debian-12-bookworm-x86_64 | active | +| b1effd7d-28ee-4897-9d16-2b77fb18d9ef | debian-12-generic-amd64-nvidia-gpu-drivers | active | +| 8ebf61ed-f060-4d92-83ad-49145bcef6a8 | ubuntu-18.04-bionic-x86_64 | active | +| 62254e4b-86f6-4cec-871f-8ce47db3e99c | ubuntu-18.04-docker-x86_64 | active | +| 830d0019-70c9-4c19-993b-fb221f478a97 | ubuntu-18.04.4-bionic-x86_64-unet | active | +| 880c4d5b-a96b-4a41-bcfc-d9590d73641c | ubuntu-18.10-cosmic-x86_64 | active | +| 20981160-045e-4264-8726-aacc10148e6a | ubuntu-19.10-eoan-x86_64 | active | +| de3e88ed-ea89-4936-a8e9-2c3ef2c29425 | ubuntu-19.10-eoan-x86_64 | active | +| b891cdbb-9083-4fb1-879b-48630a0ab05a | ubuntu-20.04-focal-x86_64 | active | +| d0e60a55-3e2c-4fdd-a503-e97a10142dad | ubuntu-20.04-focal-x86_64-nvidia-gpu-drivers | active | +| 74147e8f-bc38-4135-8a9e-628f92a6cb15 | ubuntu-22.04-jammy-x86_64 | active | +| c76f8140-6d7b-4078-b19d-d385d8c3be05 | ubuntu-22.04-jammy-x86_64-nvidia-gpu-drivers | active | +| c3a4c629-4654-4258-87b0-72215608016d | ubuntu-22.04-jammy-x86_64-nvidia-gpu-drivers | active | +| 67b9652e-a0d1-4b05-9782-aea086b66b01 | ubuntu-24.04-noble-x86_64 | active | +| 12702ee5-2340-42de-becb-26f53cb0bd7a | ubuntu-24.04-noble-x86_64-nvidia-gpu-drivers | active | ++--------------------------------------+----------------------------------------------+--------+ +``` + +## Créer sa propre image +Il est également possible de créer sa propre image avec `openstack image create` +``` bash +openstack image create \ + --public \ + --disk-format qcow2 \ + --container-format bare \ + --file /tmp/hurd-sid-i386.img  \ + hurd-sid-i386.img +``` +:::note +Pour être démarrée directement, celle-ci doit-être *cloud-ready* (avec cloud-init). +::: diff --git a/docs/code_form/nova/ressources/index.md b/docs/code_form/nova/ressources/index.md new file mode 100644 index 00000000..5f12c0e3 --- /dev/null +++ b/docs/code_form/nova/ressources/index.md @@ -0,0 +1,19 @@ +--- +title: "Ressources" +--- + +Chaque projet NOVA se voit attribuer un quota de ressources disponibles pour créer et modifier les machines virtuelles, et le réseau du projet. +Tout ce qui est effectué sur NOVA Openstack, peut se faire graphiquement via un [navigateur Web](/code_form/nova/fondamentaux/acceder_openstack) ou en ligne de commande via le [client Python Openstack](/code_form/nova/fondamentaux/installation_client). + +![Vue_d_ensemble_ProjetNOVA](/img/nova/Nova_VueEnsemble.png) + +Les principaux quotas de ressources portent sur : +* les instances : nombre de machines virtuelles autorisées, +* les VCPUs (Virtual Central Processing Unit) : nombre total des processeurs virtuels qui pourront être utilisés dans les instances, +* la RAM : quantité totale de mémoire vive qui pourra être utilisées dans les instances, +* les adresses ip flottantes : nombre d'adresses ip publiques routables qui pourront être associées à des instances, +* les groupes de sécurité : nombre d'ensembles de règles de filtrage ip pour limiter les accès aux instances depuis le monde exterieur, +* les volumes : nombre de périphériques de stockage qui pourront être attachés à des instances, +* l'espace de stockage de volumes : quantité globale de stockage pour les volumes du projet. + +Nous détaillons dans ce chapitre le fonctionnement des principales ressources. diff --git a/docs/code_form/nova/ressources/reseau.md b/docs/code_form/nova/ressources/reseau.md new file mode 100644 index 00000000..431ecc47 --- /dev/null +++ b/docs/code_form/nova/ressources/reseau.md @@ -0,0 +1,39 @@ +--- +title: "Réseaux" +--- + +## Réseau + +**Nova** vous permet de créer la topologie réseau souhaitée à l'intérieur de votre projet. +Le trafic interne entre les instances du projet est isolé des autres projets et de l'extérieur de **Nova**. +Chaque projet contient deux types de réseaux - network : privé et publique. + +### Réseau privé + +À la création d'un projet, un réseau privé est créé d'office pour vous aider : +**default-net**, avec des adresses en 192.168.1.0/24. +Mais vous pouvez en créer autant que vous voulez. + +C'est dans un réseau privé (le "default-net" par exemple) que seront créées les VMs. +Elles auront accès à l'extérieur grâce à un mécanisme de SNAT, mais ne seront pas visibles depuis l'extérieur. +Les VMs pouront par ailleurs communiquer entre elles au sein des réseaux privés d'un même projet. + + +### Réseau public + +Pour chaque projet, il y a un réseau public : **public**, qui est un réseau routé sur le backbone UGA. +C'est dans ce réseau public que vous pourrez allouer des _adresses ip flottantes_. +Ces _ip flottantes_ pourront alors être associées aux VMs que vous aurez créées, pour les rendre accessibles. + + +## Sous-réseau + +La liste des sous-réseaux du projet est donnée par la commande : +``` bash +openstack subnet list +``` +qui renvoie le sous-réseau du réseau privé par défaut, *default-subnet*. + +:::note +**Nova** utilise l'adressage IPv4. Pour utiliser l'adressage IPv6, nous contacter. +::: \ No newline at end of file diff --git a/docs/code_form/nova/ressources/volume.md b/docs/code_form/nova/ressources/volume.md new file mode 100644 index 00000000..5f62a593 --- /dev/null +++ b/docs/code_form/nova/ressources/volume.md @@ -0,0 +1,101 @@ +--- +title: "Volume" +--- + +Un volume est un périphérique de stockage en bloc, comme un disque dur USB, qui permet d'avoir un stockage persistant. + + +## Gestion d'un volume +La commande `openstack volume list` liste les volumes existants. + +### Création +Pour créer un volume, utilisez la commande +``` bash +openstack volume create --size +``` + +Il est possible de créer un volume depuis différents types de source selon l'option choisie à la création du volume. + +- sans option, pour créer un volume non-bootable, +- depuis une image - [`--image `] - souvent utilisé pour créer un volume de démarrage pour une instance, +- depuis un instantanée - [`--snapshot `], +- depuis un autre volume - [`--source `] - pour cloner un volume , +- depuis un replicat de volume - [`--source-replicated `] - pour cloner un réplica. + +*Si un volume est construit à partir d'une source spécifiée alors il n'est pas utile de preciser la taille.* + + +### Redimensionnement +Pour redimensionner un volume, indiquez l'identifiant ou le nom du volume ainsi qu'une taille (`--size`) supérieure à l'ancienne. + +:::warning Attention +Le volume ne doit pas être attaché à une instance. +::: + +``` bash +openstack volume set --size +``` +Cette commande ne renvoie aucune sortie mais vous pouvez vérifier la nouvelle taille du volume en affichant ses informations. + + +### Suppression +Supprimez le volume en indiquant son identifant ou son nom avec la commande suivante. + +:::warning Attention +Avant de supprimer un volume, assurez-vous qu'il ne soit pas attaché à une instance. +::: + +``` bash +openstack volume delete +``` + + +> +Vous pouvez vérifier que le volume est bien supprimé en affichant la liste des volumes. +``` bash +openstack volume list +``` + +Il devrait apparaître en état de suppression (*status = deleting*). + +![SuppressionVolume](/img/nova/Nova_VolumeDelete.png) + +Une fois complètement supprimé, il disparaît de la liste. Donc si le volume n'avait pas une taille importante il est possible que vous n'ayez pas eu le temps de le voir apparaître en état de suppression dans la liste des volumes. + + + +## Volume et instance +Les volumes peuvent être attachés - et détachés - à des instances à tout moment. + +:::note +Un volume peut être attaché à une seule instance. +::: + +### Attacher un volume à une instance +Pour attacher un volume à une instance, utilisez `openstack server add volume` en specifiant l'identifiant ou le nom de l'instance et celui du volume. +``` bash +openstack server add volume +``` + +> +Cette commande ne produit aucune sortie, cependant, vous pouvez vérifier que le volume est bien attaché à une instance en affichant ses informations. +``` bash +openstack volume show +``` +![VolumeAttacher](/img/nova/Nova_VolumeAssociate.png) + + + +### Détacher un volume d'une instance +Pour détacher un volume d'une instance, précisez l'identifiant ou le nom de l'instance et celui du volume. +``` bash +openstack server remove volume +``` + +> +Pour vérifier que le volume n'est plus attaché, vous pouvez afficher ses informations. +``` bash +openstack volume show +``` +La ligne des attachements doit être vide (*attachments = []*). +![VolumeDissociate](/img/nova/Nova_VolumeDissociate.png) diff --git a/docs/code_form/vesta/connexion.md b/docs/code_form/vesta/connexion.md index b95c2460..4f5d1d4d 100644 --- a/docs/code_form/vesta/connexion.md +++ b/docs/code_form/vesta/connexion.md @@ -10,7 +10,7 @@ Vous avez besoin d'un compte MesoNET valide. Vous pouvez trouver les étapes pou # Comment se connecter à Vesta Vesta possède 2 nœuds de login. -Vous aurez besoin d'une clé SSH pour vous connecter (voir [Gérer ses clefs SSH](https://www.mesonet.fr/documentation/user-documentation/acces/ssh)). +Vous aurez besoin d'une clé SSH pour vous connecter (voir [Gérer ses clés SSH](https://www.mesonet.fr/documentation/user-documentation/acces/ssh)). La connexion s'effectue en SSH vers hpc-vesta1.u-strasbg.fr ou hpc-vesta2.u-strasbg.fr. `ssh nomUtilisateur@hpc-vesta1.u-strasbg.fr` diff --git a/static/img/nova/Nova_Connexion.png b/static/img/nova/Nova_Connexion.png new file mode 100644 index 00000000..1fdc2e2b Binary files /dev/null and b/static/img/nova/Nova_Connexion.png differ diff --git a/static/img/nova/Nova_Image.png b/static/img/nova/Nova_Image.png new file mode 100644 index 00000000..4f150ce2 Binary files /dev/null and b/static/img/nova/Nova_Image.png differ diff --git a/static/img/nova/Nova_Logo_Quadri.png b/static/img/nova/Nova_Logo_Quadri.png new file mode 100644 index 00000000..c3ce5e3c Binary files /dev/null and b/static/img/nova/Nova_Logo_Quadri.png differ diff --git a/static/img/nova/Nova_OpenstackLogo.png b/static/img/nova/Nova_OpenstackLogo.png new file mode 100644 index 00000000..9e7c1a3b Binary files /dev/null and b/static/img/nova/Nova_OpenstackLogo.png differ diff --git a/static/img/nova/Nova_VolumeAssociate.png b/static/img/nova/Nova_VolumeAssociate.png new file mode 100644 index 00000000..c49d574a Binary files /dev/null and b/static/img/nova/Nova_VolumeAssociate.png differ diff --git a/static/img/nova/Nova_VolumeDelete.png b/static/img/nova/Nova_VolumeDelete.png new file mode 100644 index 00000000..8d6d123d Binary files /dev/null and b/static/img/nova/Nova_VolumeDelete.png differ diff --git a/static/img/nova/Nova_VolumeDissociate.png b/static/img/nova/Nova_VolumeDissociate.png new file mode 100644 index 00000000..3f33954e Binary files /dev/null and b/static/img/nova/Nova_VolumeDissociate.png differ diff --git a/static/img/nova/Nova_VueEnsemble.jpg b/static/img/nova/Nova_VueEnsemble.jpg new file mode 100644 index 00000000..739521fe Binary files /dev/null and b/static/img/nova/Nova_VueEnsemble.jpg differ diff --git a/static/img/nova/Nova_VueEnsemble.png b/static/img/nova/Nova_VueEnsemble.png new file mode 100644 index 00000000..58c4cfed Binary files /dev/null and b/static/img/nova/Nova_VueEnsemble.png differ diff --git a/static/img/nova/Nova_authentification.png b/static/img/nova/Nova_authentification.png new file mode 100644 index 00000000..4af01ce7 Binary files /dev/null and b/static/img/nova/Nova_authentification.png differ diff --git a/static/img/nova/Nova_fichierRC.png b/static/img/nova/Nova_fichierRC.png new file mode 100644 index 00000000..e4ad13d7 Binary files /dev/null and b/static/img/nova/Nova_fichierRC.png differ diff --git a/static/img/nova/Nova_fichierRCv3_1.png b/static/img/nova/Nova_fichierRCv3_1.png new file mode 100644 index 00000000..59c714fa Binary files /dev/null and b/static/img/nova/Nova_fichierRCv3_1.png differ diff --git a/static/img/nova/Nova_fichierRCv3_2.png b/static/img/nova/Nova_fichierRCv3_2.png new file mode 100644 index 00000000..ccceb2d4 Binary files /dev/null and b/static/img/nova/Nova_fichierRCv3_2.png differ diff --git a/static/img/nova/Nova_flavor.png b/static/img/nova/Nova_flavor.png new file mode 100644 index 00000000..d2308515 Binary files /dev/null and b/static/img/nova/Nova_flavor.png differ diff --git a/static/img/nova/nova_keypair.png b/static/img/nova/nova_keypair.png new file mode 100644 index 00000000..a08714f0 Binary files /dev/null and b/static/img/nova/nova_keypair.png differ diff --git a/static/img/nova/nova_secgroup_rule.png b/static/img/nova/nova_secgroup_rule.png new file mode 100644 index 00000000..c85852c9 Binary files /dev/null and b/static/img/nova/nova_secgroup_rule.png differ diff --git a/static/img/nova/nova_secgroup_rule_create.png b/static/img/nova/nova_secgroup_rule_create.png new file mode 100644 index 00000000..b20eefde Binary files /dev/null and b/static/img/nova/nova_secgroup_rule_create.png differ diff --git a/static/img/nova/nova_secgroup_rule_create_ssh.png b/static/img/nova/nova_secgroup_rule_create_ssh.png new file mode 100644 index 00000000..da953ebf Binary files /dev/null and b/static/img/nova/nova_secgroup_rule_create_ssh.png differ diff --git a/static/img/nova/nova_secgroup_rule_create_ssh2.png b/static/img/nova/nova_secgroup_rule_create_ssh2.png new file mode 100644 index 00000000..a8b63870 Binary files /dev/null and b/static/img/nova/nova_secgroup_rule_create_ssh2.png differ diff --git a/static/img/nova/nova_vm_create.png b/static/img/nova/nova_vm_create.png new file mode 100644 index 00000000..f3ccc0a8 Binary files /dev/null and b/static/img/nova/nova_vm_create.png differ diff --git a/static/img/nova/nova_vm_create_1.png b/static/img/nova/nova_vm_create_1.png new file mode 100644 index 00000000..b36e08c9 Binary files /dev/null and b/static/img/nova/nova_vm_create_1.png differ diff --git a/static/img/nova/nova_vm_create_2.png b/static/img/nova/nova_vm_create_2.png new file mode 100644 index 00000000..2c69017c Binary files /dev/null and b/static/img/nova/nova_vm_create_2.png differ diff --git a/static/img/nova/nova_vm_create_3.png b/static/img/nova/nova_vm_create_3.png new file mode 100644 index 00000000..e0674c6e Binary files /dev/null and b/static/img/nova/nova_vm_create_3.png differ diff --git a/static/img/nova/nova_vm_create_4.png b/static/img/nova/nova_vm_create_4.png new file mode 100644 index 00000000..6eedc691 Binary files /dev/null and b/static/img/nova/nova_vm_create_4.png differ diff --git a/static/img/nova/nova_vm_create_6.png b/static/img/nova/nova_vm_create_6.png new file mode 100644 index 00000000..d146425b Binary files /dev/null and b/static/img/nova/nova_vm_create_6.png differ diff --git a/static/img/nova/nova_vm_create_7.png b/static/img/nova/nova_vm_create_7.png new file mode 100644 index 00000000..e50dd9c3 Binary files /dev/null and b/static/img/nova/nova_vm_create_7.png differ diff --git a/static/img/nova/nova_vm_ip_associate.png b/static/img/nova/nova_vm_ip_associate.png new file mode 100644 index 00000000..7ef1bf0e Binary files /dev/null and b/static/img/nova/nova_vm_ip_associate.png differ diff --git a/static/img/nova/nova_vm_ip_associate_settings.png b/static/img/nova/nova_vm_ip_associate_settings.png new file mode 100644 index 00000000..704c2ca5 Binary files /dev/null and b/static/img/nova/nova_vm_ip_associate_settings.png differ diff --git a/static/img/nova/nova_vm_ip_create.png b/static/img/nova/nova_vm_ip_create.png new file mode 100644 index 00000000..39a1c97a Binary files /dev/null and b/static/img/nova/nova_vm_ip_create.png differ diff --git a/static/img/nova/nova_vm_ip_create_settings.png b/static/img/nova/nova_vm_ip_create_settings.png new file mode 100644 index 00000000..dee15568 Binary files /dev/null and b/static/img/nova/nova_vm_ip_create_settings.png differ diff --git a/static/img/nova/nova_vm_ping.png b/static/img/nova/nova_vm_ping.png new file mode 100644 index 00000000..86b0224e Binary files /dev/null and b/static/img/nova/nova_vm_ping.png differ diff --git a/static/img/nova/nova_vm_ping_ip.png b/static/img/nova/nova_vm_ping_ip.png new file mode 100644 index 00000000..fda0af53 Binary files /dev/null and b/static/img/nova/nova_vm_ping_ip.png differ diff --git a/static/img/nova/nova_vm_ssh.png b/static/img/nova/nova_vm_ssh.png new file mode 100644 index 00000000..1313d03f Binary files /dev/null and b/static/img/nova/nova_vm_ssh.png differ