Work on TP2

This commit is contained in:
nemunaire 2017-10-16 03:10:34 +02:00
parent a9c68a4545
commit aaeb15334a
10 changed files with 223 additions and 46 deletions

View File

@ -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 \

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1 @@
../dockerfiles/chronograf_setup.png

View File

@ -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
<http://localhost:10000>) et influxdb.
<http://localhost:8888>) et influxdb.
## Rendu

View File

@ -0,0 +1,8 @@
\newpage
Stackage des variants
=====================
## Élements de configurations
## Données sensibles

View File

@ -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)

View File

@ -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
```

View File

@ -0,0 +1,6 @@
\newpage
Déploiement de services
=======================
TODO

View File

@ -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

View File

@ -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.