diff --git a/tutorial/docker-orchestration/Makefile b/tutorial/docker-orchestration/Makefile index 9f3bf17..54a5b17 100644 --- a/tutorial/docker-orchestration/Makefile +++ b/tutorial/docker-orchestration/Makefile @@ -1,4 +1,4 @@ -SOURCES = tutorial.md setup.md what.md manual.md compose.md project.md +SOURCES = tutorial.md setup.md what.md ../dockerfiles/supervisor.md manual.md compose.md swarm.md stack.md config-secrets.md project.md PANDOCOPTS = --latex-engine=xelatex \ --standalone \ --normalize \ diff --git a/tutorial/docker-orchestration/chronograf_latest.png b/tutorial/docker-orchestration/chronograf_latest.png new file mode 100644 index 0000000..47b222d Binary files /dev/null and b/tutorial/docker-orchestration/chronograf_latest.png differ diff --git a/tutorial/docker-orchestration/chronograf_setup.png b/tutorial/docker-orchestration/chronograf_setup.png new file mode 120000 index 0000000..dcbd7d3 --- /dev/null +++ b/tutorial/docker-orchestration/chronograf_setup.png @@ -0,0 +1 @@ +../dockerfiles/chronograf_setup.png \ No newline at end of file diff --git a/tutorial/docker-orchestration/compose.md b/tutorial/docker-orchestration/compose.md index c06429d..977d328 100644 --- a/tutorial/docker-orchestration/compose.md +++ b/tutorial/docker-orchestration/compose.md @@ -1,20 +1,17 @@ \newpage -Compose -======= +Composition de conteneurs +========================= ## Automatiser la construction et le lancement -Commencez par lancer tous vos conteneurs à la main pour voir les -étapes que vous allez devoir automatiser. - -Au lieu de faire un script pour construire et lancer tous vos -conteneurs, définissez à la racine de votre projet un fichier -`docker-compose.yml` qui contiendra les méthodes de construction et -les paramètres d'exécution. +Au lieu de faire un script pour construire et lancer tous vos conteneurs, nous +allons définir à la racine de notre projet un fichier `docker-compose.yml` qui +contiendra les paramètres d'exécution (et éventuellement les méthodes de +construction). ```yaml -version: '2' +version: '3' services: influxdb: ... @@ -26,17 +23,17 @@ services: volumes: - ./:/tmp/toto links: - - influxdb + - influxdb ``` -Ce fichier est un condensé des options que vous passez habituellement -au `docker run`. +Ce fichier est un condensé des options que nous passons habituellement au +`docker container run`. ### `version` -Notez toutefois la présence d'une ligne `version` ; il ne s'agit pas de la +Notons toutefois la présence d'une ligne `version` ; il ne s'agit pas de la version de vos conteneurs, mais de la version du format de fichier -docker-compose qui sera utilisé. Sans indication de version, la version +`docker-compose` qui sera utilisé. Sans indication de version, la version originale sera utilisée. @@ -57,11 +54,8 @@ run`. Cette section est le pendant de la commandes `docker volume`. -L'idée est d'éviter de créer des *Data Volume Container* qui ont une partie de -système de fichiers inutile, et de ne garder que l'idée d'emplacement servant -pour du stockage persistant. - -On les déclare simplement en leur donnant un nom et un driver comme suit : +On déclare les volumes simplement en leur donnant un nom et un driver comme +suit : ```yaml volumes: @@ -69,8 +63,8 @@ volumes: driver: local ``` -Leur utilisation est identique à un *Data Volume Container* : on référence le -nom ainsi que l'emplacement à partager : +Pour les utiliser avec un conteneur, on référence le nom ainsi que +l'emplacement à partager : ```yaml [...] @@ -133,13 +127,13 @@ lié, même après que l'on ait démarré. La résolution se fera dynamiquement. Consultez [la documentation](https://docs.docker.com/compose/compose-file/) pour -une liste exhaustive des options que vous pouvez utiliser. +une liste exhaustive des options que nous pouvons utiliser. Une fois que votre `docker-compose.yml` est prêt, lancez tout d'abord `docker-compose build` pour commencer la phase de build de tous les conteneurs listés dans le fichier. -Une fois le build terminé, vous pouvez lancer la commande suivante et admirer +Une fois le build terminé, nous pouvons lancer la commande suivante et admirer le résultat : ```shell @@ -147,7 +141,7 @@ docker-compose up ``` Encore une fois, testez la bonne connexion entre chronograf (accessible sur -) et influxdb. +) et influxdb. ## Rendu diff --git a/tutorial/docker-orchestration/config-secrets.md b/tutorial/docker-orchestration/config-secrets.md new file mode 100644 index 0000000..bc639e6 --- /dev/null +++ b/tutorial/docker-orchestration/config-secrets.md @@ -0,0 +1,8 @@ +\newpage + +Stackage des variants +===================== + +## Élements de configurations + +## Données sensibles diff --git a/tutorial/docker-orchestration/manual.md b/tutorial/docker-orchestration/manual.md index 6354d2a..4012288 100644 --- a/tutorial/docker-orchestration/manual.md +++ b/tutorial/docker-orchestration/manual.md @@ -1,6 +1,145 @@ \newpage -Lier des conteneurs entre-eux -============================= +Lier des conteneurs +=================== -TODO +Avant de voir des méthodes plus automatiques pour déployer toute notre pile +logicielle TICK, nous allons commencer par mettre en place et lier les +conteneurs manuellement, de la même manière que nous avons pu le faire avec +Owncloud et MySQL. + + +## Conteneur central : la base de données + +Le premier conteneur qui doit être lancé est la base de données orientée séries +temporelles : +[InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/). +En effet, tous les autres conteneurs on besoin de cette base de données pour +fonctionner correctement : il serait impossible à *Chronograf* d'afficher les +données sans base de données, tout comme *Telegraf* ne pourrait écrire les +métriques dans une base de données à l'arrêt. + +Afin d'interagir avec les données, InfluxDB expose une +[API REST](https://fr.wikipedia.org/wiki/Representational_state_transfer) +sur le port 8086. Pour éviter d'avoir plus de configuration à réaliser, nous +allons tâcher d'utiliser ce même port pour tester localement : + +``` +docker container run -p 8086:8086 -d --name mytsdb influxdb +``` + +Comme il s'agit d'une API REST, nous pouvons vérifier le bon fonctionnement de +notre base de données en appelant : + +``` +42sh$ curl -f http://localhost:8086/ping +42sh$ echo $? +0 +``` + +Si votre influxdb répond, vous pouvez vous y connecter en utilisant directement +le client fourni : + +``` +42sh$ docker container run --rm -it --link mytsdb:influxdb \ + --entrypoint "/usr/bin/influx" influxdb -host influxdb +Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring. +Connected to http://influxdb:8086 version 1.0.1 +InfluxDB shell version: 1.0.1 +> show databases +name: databases +--------------- +name +_internal +``` + +Si vous aussi vous voyez la table `_internal`, bravo ! vous pouvez passer à la +suite. + +Notez que comme nous avons lancé le conteneur en mode détaché (option `-d`), +nous ne voyons pas les logs qui sont écrits par le daemon. Pour les voir, il +faut utiliser la commande `docker container logs` : + +``` +docker container logs mytsdb +``` + + +\hspace{2em}**Exercice :** Ajoutez à la ligne de commande de lancement du +conteneur les bon(s) volume(s) qui permettront de ne pas perdre les données +d'influxDB si nous devions redémarrer le conteneur. + + + +## Collecter les données locales + +Tentons maintenant de remplir notre base de données avec les métriques du +système. Pour cela, on commence par télécharger *Telegraf* : + +```shell +curl https://dl.influxdata.com/telegraf/releases/telegraf-1.4.2-static_linux_amd64.tar.gz | \ + tar xzv -C /tmp +``` + +Puis, lançons *Telegraf* : + +```shell +cd /tmp/telegraf +./telegraf --config telegraf.conf +``` + +**Remarque :** La configuration par défaut va collecter les données de la +machine locale et les envoyer sur le serveur situé à +`http://localhost:8086`. Ici, cela fonctionne donc parce que l'on a fait en +sorte de redirigé le port de notre conteneur sur notre machine locale (option +`-p`). + +Et observons ensuite : + +```shell +42sh$ docker container run --rm -it --link mytsdb:influxdb \ + --entrypoint "/usr/bin/influx" influxdb -host influxdb +Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring. +Connected to http://influxdb:8086 version 1.0.1 +InfluxDB shell version: 1.0.1 +> show databases +name: databases +--------------- +name +_internal +telegraf + +> use telegraf +Using database telegraf + +> show measurements +name: measurements +------------------ +name +cpu +disk +diskio +kernel +mem +processes +swap +system +``` + +La nouvelle base a donc bien été créé et tant que nous laissons *Telegraf* +lancé, celui-ci va régulièrement envoyer des métriques de cette machine. + + +## Afficher les données collectées + +\hspace{2em}**Exercice :** À vous de jouer pour lancer le conteneur +[*Chronograf*](https://store.docker.com/images/chronograf). + +L'interface de *Chronograf* est disponible sur le port 8888. + +L'image Docker officielle accepte que l'emplacement du serveur InfluxDB soit +passée dans variable d'environnement +`INFLUXDB_URL`. [Consultez la documentation du conteneur si besoin](https://store.docker.com/images/chronograf). + + +![Résultat obtenu](chronograf_latest.png) diff --git a/tutorial/docker-orchestration/project.md b/tutorial/docker-orchestration/project.md index 8f19e5f..956dd8b 100644 --- a/tutorial/docker-orchestration/project.md +++ b/tutorial/docker-orchestration/project.md @@ -5,11 +5,8 @@ Rendu ## Projet -Amusez-vous à la piscine, il n'y a pas de projet en plus des exercices fait en -TP ! - -En complément de ce TP, vous pouvez jetez un œil à -[Docker Swarm](https://docs.docker.com/engine/swarm) ! +Écrivez le `docker-compose.yml` permettant de lancer facilement une +instance de serveur du FIC. ## Modalité de rendu @@ -34,17 +31,14 @@ placer à la racine de votre rendu. Voici une arborescence type: ``` -login_x-TP2/questions.txt -login_x-TP2/docker-compose.yml login_x-TP2/influxdb login_x-TP2/influxdb/Dockerfile login_x-TP2/influxdb/influxdb.conf -login_x-TP2/chronograf -login_x-TP2/chronograf/Dockerfile -login_x-TP2/chronograf/chronograf.conf -login_x-TP2/mymonitoring -login_x-TP2/mymonitoring/Dockerfile -login_x-TP2/mymonitoring/chronograf.conf -login_x-TP2/mymonitoring/influxdb.conf -login_x-TP2/mymonitoring/supervisor.conf +login_x-TP2/docker-compose.yml +login_x-TP2/mymonitoring.yml +login_x-TP2/fic-server +login_x-TP2/fic-server/fic-server.yml +login_x-TP2/fic-server/Dockerfile-admin +login_x-TP2/fic-server/Dockerfile-backend +login_x-TP2/fic-server/Dockerfile-frontend ``` diff --git a/tutorial/docker-orchestration/stack.md b/tutorial/docker-orchestration/stack.md new file mode 100644 index 0000000..e72371d --- /dev/null +++ b/tutorial/docker-orchestration/stack.md @@ -0,0 +1,6 @@ +\newpage + +Déploiement de services +======================= + +TODO diff --git a/tutorial/docker-orchestration/swarm.md b/tutorial/docker-orchestration/swarm.md new file mode 100644 index 0000000..df2b052 --- /dev/null +++ b/tutorial/docker-orchestration/swarm.md @@ -0,0 +1,26 @@ +\newpage + +Swarm +===== + +## Lancer plusieurs hôtes + +`docker-machine` + + +## Création du cluster Swarm + +`docker swarm` + +### Le maître + +#### Initialisation du cluster + +#### Présentation des mécanismes de sécurité + + +### Les nodes + +#### Enregistrement d'un esclave + +#### Multi-maître diff --git a/tutorial/docker-orchestration/what.md b/tutorial/docker-orchestration/what.md index f6e6d34..46b5de0 100644 --- a/tutorial/docker-orchestration/what.md +++ b/tutorial/docker-orchestration/what.md @@ -3,8 +3,8 @@ But du TP ========= -Aujourd'hui, nous allons réaliser un système de monitoring, prêt à -être déployé chez un fournisseur de cloud. +Aujourd'hui, nous allons réaliser un système de monitoring, prêt à être déployé +chez un fournisseur de cloud. Le résultat attendu d'ici la fin du TP, est un groupe de conteneurs indépendants les uns des autres, réutilisables en fonction de besoins @@ -18,3 +18,12 @@ elles seront affichées sous forme de graphique grâce à [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/). ![Dashboard de l'utilisation CPU et mémoire sur Chronograf](chronograf.png) + + +L'installation que nous allons réaliser est celle d'une plate-forme TICK. Il +s'agit d'un mécanisme de séries temporelles (*Time Series*) moderne, que l'on +peut utiliser pour stocker toute sorte de données liées à un indice temporel. + +La pile logicielle TICK propose de collecter des métriques, en les enregistrant +dans une base de données adaptées et permet en suite de les ressortir sous +forme de graphiques ou de les utiliser pour faire des alertes intelligentes.