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é.
|
|
|
|
* N'hésitez pas à préférer utiliser les API (et leur bindings) plutôt
|
|
|
|
que de faire des appels à des fonctions de type `system(3)`.
|
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.
|
|
|
|
|
|
|
|
Il est attendu que vous rendiez 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-27 21:25:24 +00:00
|
|
|
## Notation
|
|
|
|
|
|
|
|
Chaque partie du sujet rapporte un certain nombre de points tenant compte de la
|
|
|
|
difficulté.
|
|
|
|
|
|
|
|
L'accent sera mis sur le respect des bonnes pratiques.
|
|
|
|
|
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
|
|
|
|
(XFS, Btrfs, ...) 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.
|