164 lines
5.7 KiB
Markdown
164 lines
5.7 KiB
Markdown
% Virtualisation légère
|
|
% Pierre-Olivier *Nemunaire* Mercier
|
|
% Samedi 29 novembre 2014
|
|
|
|
# Introduction
|
|
|
|
## Présentation du sujet
|
|
|
|
Durant ces prochaines heures, vous allez devoir réaliser un service de
|
|
déploiement de *machines virtuelles* légères, mettant en pratique les
|
|
connaissances que vous avez acquises durant le cours et le TP.
|
|
|
|
N'oublier pas de lire le sujet en entier, plusieurs fois, avant de
|
|
commencer. Vous n'êtes pas forcément tenu de réaliser les étapes dans l'ordre.
|
|
|
|
## Quelques conseils
|
|
|
|
* L'utilisation d'un gestionnaire de version est fortement recommandé.
|
|
* N'hésitez pas à préférer utiliser les
|
|
[API](https://qa.linuxcontainers.org/master/current/doc/api/) (et leur
|
|
bindings) plutôt que de faire des appels à des fonctions de type `system(3)`.
|
|
* N'oubliez pas de consulter avant toutes choses les `man` très fournis des
|
|
commandes que vous utiliserez ; en particulier tous les `lxc-*`,
|
|
`capabilities(7)`, ...
|
|
* Vous pouvez utiliser ou vous inspirer des images présentes sur le Hub Docker.
|
|
* Ne passez pas trop de temps sur l'interface, l'architecture des containers
|
|
est bien plus intéressante.
|
|
|
|
## Modalités de rendu
|
|
|
|
L'heure du rendu est fixé au dimanche 30 novembre 2014 à 11h42 CET.
|
|
|
|
Il est attendu que vous rendiez, à <virli@nemunai.re>, une tarball contenant un
|
|
ou plusieurs `Dockerfile` permettant d'obtenir l'interface de contrôle des
|
|
conteneurs, accompagnés d'un script automatisant le déploiement de la solution
|
|
sur une nouvelle machine (voir la section 2.2 pour les modalités de ce script).
|
|
|
|
## Notation
|
|
|
|
Chaque partie du sujet rapporte un certain nombre de points tenant compte de la
|
|
difficulté. Il est attendu que vous présentiez succinctement votre travail le
|
|
dimanche matin entre 8h et 12h. Vous pouvez effectuer votre rendu avant ou
|
|
après cette présentation à condition de respecter l'horaire indiqué à la
|
|
section précédente.
|
|
|
|
L'accent sera mis sur le respect des bonnes pratiques, en particulier sur
|
|
celles vue en cours ou en TP.
|
|
|
|
|
|
# Étapes de réalisation
|
|
|
|
## Interface utilisateur
|
|
|
|
La première étape est de réaliser l'interface avec laquelle les utilisateurs
|
|
vont utiliser votre service.
|
|
|
|
Le langage (et le framework si besoin) est laissé à votre discrétion parmi
|
|
[Perl Dancer](https://metacpan.org/pod/Dancer),
|
|
[Python Django](http://djangoproject.com/) ou encore [PHP](http://php.net/).
|
|
|
|
Vous allez avoir besoin d'une base de données (MySQL/MariaDB ou PostgreSQL)
|
|
pour stocker la liste des conteneurs lancés, de leurs configuration, des images
|
|
disponibles, des utilisateurs, etc.
|
|
|
|
L'interface pourra prendre la forme d'une simple API ou de formulaires sur des
|
|
pages classiques. Chaque étape de ce sujet donne généralement lieu à une série
|
|
de pages.
|
|
|
|
|
|
## Recettes de déploiement (bonus)
|
|
|
|
Concevez les recettes de déploiement à destination d'un gestionnaire de
|
|
configuration (tel qu'[Ansible](http://docs.ansible.com/)) pour construire les
|
|
images des conteneurs et configurer la machine qui exécutera votre service.
|
|
|
|
La tarball que vous rendez doit permettre de déployer facilement (installation
|
|
de dépendance et docker build) votre solution ; prévoyez un script (non
|
|
optionel) si plus d'étape sont nécessaire pour construire vos conteneurs.
|
|
|
|
|
|
## Gestion d'un conteneur
|
|
|
|
Pour cette étape, votre site doit être en mesure de lancer et d'arrêter un
|
|
conteneur que vous aurez préalablement créé.
|
|
|
|
Le choix de la technologie de virtualisation est laissé à votre
|
|
discrétion.
|
|
|
|
Dans un premier temps, vous pouvez lancer vos conteneurs sans considération de
|
|
sécurité, en donnant tous les privilèges au conteneur de votre site, puis dans
|
|
un second temps, organisez une séparation des privilèges pour qu'un exploit sur
|
|
votre site ne remette pas en cause la sécurité de l'ensemble de la machine.
|
|
|
|
|
|
## Lancement de conteneur à partir de templates
|
|
|
|
Maintenant que vous êtes capable de lancer et d'arrêter un conteneur,
|
|
laissez la possibilité à l'utilisateur de lancer un nouveau conteneur à partir
|
|
d'un template LXC ou d'une image Docker.
|
|
|
|
À la fin de l'étape, vous devez être capable de lancer n'importe quel template
|
|
ou image.
|
|
|
|
|
|
## Quota disque (bonus)
|
|
|
|
Permettez à l'utilisateur de configurer l'espace disque dont il disposera dans
|
|
sa nouvelle machine virtuelle.
|
|
|
|
Cela peut se faire via l'utilisation d'un système de fichier gérant les quotas
|
|
(XFS, Btrfs, ZFS, ...) ou via LVM.
|
|
|
|
|
|
## Quota CPU/RAM/Réseau
|
|
|
|
Laissez la possibilité à l'utilisateur de configurer la quantité de mémoire
|
|
maximale que le conteneur peu utiliser ainsi que de permettre la limitation de
|
|
l'utilisation du CPU. Donner également la possibilité de limiter la bande
|
|
passante.
|
|
|
|
|
|
## Configuration réseau
|
|
|
|
Faites en sorte que l'utilisateur puisse exposer des ports de son conteneur sur
|
|
des ports de la machine hôte.
|
|
|
|
|
|
## Configuration réseau (avancé)
|
|
|
|
Mettez en place l'une des solutions de virtualisation réseau vue en cours,
|
|
permettant d'assigner à chaque conteneur une IP non-NATée.
|
|
|
|
|
|
## Gestion de conteneurs (avancé)
|
|
|
|
### Gel de conteneur
|
|
|
|
Donner la possibilité à l'utilisateur de suspendre (freeze) l'exécution d'un
|
|
conteneur et de la reprendre lorsqu'il le désire.
|
|
|
|
### Clone
|
|
|
|
Permettez à l'utilisateur de dupliquer un conteneur.
|
|
|
|
### Snapshots
|
|
|
|
Mettez en place un système de snapshots permettant de restaurer un
|
|
état antérieur, préalablement capturé.
|
|
|
|
|
|
# Astuces pour la présentation
|
|
|
|
* Des questions pourront vous être posées à propos de l'infrastructure
|
|
que vous avez mis en place, de notions vues durant le cours ou le
|
|
TP.
|
|
* Soyez en mesure de justifier vos choix !
|
|
* Vous êtes en SRS, n'oubliez pas de vous renseigner sur les techniques de
|
|
hardening à mettre en place ; si vous ne les avez pas mises en place ou pas
|
|
automatisé via le script de déploiement, n'oubliez pas d'indiquer les
|
|
changements durant la présentation.
|
|
|
|
|
|
Bon courage !
|