virli/subject/subject.md

161 lines
5.5 KiB
Markdown
Raw Normal View History

2014-11-28 18:21:38 +00:00
% Virtualisation légère
% Pierre-Olivier *Nemunaire* Mercier
% Samedi 29 novembre 2014
2014-11-27 21:25:24 +00:00
# Introduction
## Présentation du sujet
Durant ces prochaines heures, vous allez devoir réaliser un service de
2014-11-28 00:15:03 +00:00
déploiement de *machines virtuelles* légères, mettant en pratique les
connaissances que vous avez acquises durant le cours et le TP.
2014-11-27 21:25:24 +00:00
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.
2014-11-28 00:15:03 +00:00
## Quelques conseils
* L'utilisation d'un gestionnaire de version est fortement recommandé.
2014-11-28 16:56:20 +00:00
* 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)`, ...
2014-11-27 21:25:24 +00:00
## Modalités de rendu
2014-11-28 00:15:03 +00:00
L'heure du rendu est fixé au dimanche 30 novembre 2014 à 11h42 CET.
2014-11-28 16:56:20 +00:00
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.
2014-11-28 00:15:03 +00:00
2014-11-27 21:25:24 +00:00
## Notation
Chaque partie du sujet rapporte un certain nombre de points tenant compte de la
2014-11-28 16:56:20 +00:00
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.
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
# Étapes de réalisation
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
## Interface utilisateur
2014-11-27 21:25:24 +00:00
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.
2014-11-28 00:15:03 +00:00
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.
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
## Recettes de déploiement (bonus)
2014-11-27 21:25:24 +00:00
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.
2014-11-28 00:15:03 +00:00
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
2014-11-28 16:56:20 +00:00
(XFS, Btrfs, ZFS, ...) ou via LVM.
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
## Quota CPU/RAM/Réseau
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
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.
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
## Configuration réseau
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
Faites en sorte que l'utilisateur puisse exposer des ports de son conteneur sur
des ports de la machine hôte.
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
## Configuration réseau (avancé)
2014-11-27 21:25:24 +00:00
2014-11-28 00:15:03 +00:00
Mettez en place l'une des solutions de virtualisation réseau vue en cours,
permettant d'assigner à chaque conteneur une IP non-NATée.
2014-11-28 16:56:20 +00:00
## 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
2014-11-29 08:23:56 +00:00
Mettez en place un système de snapshots permettant de restaurer un
état antérieur, préalablement capturé.
2014-11-28 16:56:20 +00:00
# Astuces pour la présentation
2014-11-29 08:23:56 +00:00
* 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.
2014-11-28 16:56:20 +00:00
* 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.
2014-11-29 08:23:56 +00:00
Bon courage !