Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/code_form/nova/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"label": "Nova-Cloud",
"position": 6
}
4 changes: 4 additions & 0 deletions docs/code_form/nova/creer_vm/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"label": "Créer et accéder à sa VM",
"position": 2
}
64 changes: 64 additions & 0 deletions docs/code_form/nova/creer_vm/acces_vm.md
Original file line number Diff line number Diff line change
@@ -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 <instance> <ip_flottante>
```
:::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 <instance> <ip_flottante>
```


## 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 <nom-utilisateur>@<ip-flottante>
```

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.
174 changes: 174 additions & 0 deletions docs/code_form/nova/creer_vm/advanced.md
Original file line number Diff line number Diff line change
@@ -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 <image> \
--flavor <gabarit> \
--user-data cloud-config \
--network <project>-int-net \
--security-group <group> \
--key-name <rsa-key> \
<instance-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).
:::
35 changes: 35 additions & 0 deletions docs/code_form/nova/creer_vm/index.md
Original file line number Diff line number Diff line change
@@ -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 <image> --flavor <gabarit> --network <réseau> --security-group <groupe de securité> --key-name <clé RSA> \
<nom de instance>
```
Ajout de l'option `--user-data <configuration-file>` 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 <instance> <ip_flottante>
```

### 3 - Acceder à l'instance
Accéder à l'instance en ssh.
``` bash
ssh <nom-utilisateur>@<ip-flottante>
```
78 changes: 78 additions & 0 deletions docs/code_form/nova/creer_vm/standarduse.md
Original file line number Diff line number Diff line change
@@ -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 <image> \
--flavor <gabarit> \
--network <réseau> \
--security-group <groupe de securité> \
--key-name <clé RSA> \
<nom de instance>
```
:::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 <IMAGE_ID>`
:::
:::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).
:::
Loading
Loading