From 7d680b35ef43c12dbc8b40f77ba0843b5ce97a09 Mon Sep 17 00:00:00 2001 From: Nemunaire Date: Fri, 28 Nov 2014 01:15:03 +0100 Subject: [PATCH] Subject almost done --- subject/Makefile | 6 +++ subject/subject.md | 97 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 subject/Makefile diff --git a/subject/Makefile b/subject/Makefile new file mode 100644 index 0000000..7590716 --- /dev/null +++ b/subject/Makefile @@ -0,0 +1,6 @@ +all: subject.pdf + +.md.pdf: + pandoc --latex-engine=xelatex --toc --normalize -o $@ $< + +.SUFFIXES: .md .tex .pdf diff --git a/subject/subject.md b/subject/subject.md index ec2b2c3..0f821b6 100644 --- a/subject/subject.md +++ b/subject/subject.md @@ -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.