Subject almost done

This commit is contained in:
nemunaire 2014-11-28 01:15:03 +01:00
parent 5578b501a3
commit 7d680b35ef
2 changed files with 78 additions and 25 deletions

6
subject/Makefile Normal file
View File

@ -0,0 +1,6 @@
all: subject.pdf
.md.pdf:
pandoc --latex-engine=xelatex --toc --normalize -o $@ $<
.SUFFIXES: .md .tex .pdf

View File

@ -3,16 +3,27 @@
## Présentation du sujet
Durant ces prochaines heures, vous allez devoir réaliser un service de
déploiement de machines virtuelles, mettant en pratique les connaissances que
vous avez acquises durant le cours et le TP.
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.
L'utilisation d'un gestionnaire de version est fortement recommandé.
## 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)`.
## Modalités de rendu
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.
## Notation
Chaque partie du sujet rapporte un certain nombre de points tenant compte de la
@ -20,8 +31,9 @@ difficulté.
L'accent sera mis sur le respect des bonnes pratiques.
# Étapes de réalisation
# Interface utilisateur
## Interface utilisateur
La première étape est de réaliser l'interface avec laquelle les utilisateurs
vont utiliser votre service.
@ -34,35 +46,70 @@ 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
classiques. Chaque étape de ce sujet donne généralement lieu à une série de
pages.
Il est attendu pour cette étape que vous rendiez un ou plusieurs `Dockerfile`,
accompagnés d'un script permettant de construire les images et de lancer une
première fois votre site.
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)
## 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.
# Gestion d'un conteneur
Pour cette étape, votre site doit être en mesure de lancer et arrêter des
containers (nous vous laissons le choix de la technologie).
## Basique
Lancer les containers
## Un peu plus de sécurité
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.
# Quota disque
## 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.
# Bridge
## 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.
## 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.