virli/tutorial/k8s/intro.md

88 lines
2.3 KiB
Markdown
Raw Normal View History

2019-11-26 15:00:39 +00:00
\newpage
Introduction
============
Notre application du jour
-------------------------
Aujourd'hui, nous allons travailler avec un mineur de pépites ... de chocolat !
De véritables cookies sont à gagner pour celles et ceux qui auront amassés le
plus de pépites avant la pause !
![ChocoMiner](dockercoins-diagram.svg)
Fier de respecter le paradigme des micro-services, notre ChocoMiner fonctionne
ainsi :
* le `worker` demande à `rng` de générer un grand nombre aléatoire,
* le `worker` envoie ce grand nombre au `hasher`, qui lui retourne un hash,
* si le condensat respecte les contraintes pour obtenir une pépite, on est content,
* et on recommence, ainsi de suite, pour avoir le maximum de pépites.
Chaque seconde, le `worker` envoie à `influxdb` le nombre de hashs et de
pépites qu'il a ainsi pu obtenir.
Une interface graphique (`chronograf`) permet d'interroger la base de données
pour afficher des statistiques.
Obtenir l'application
---------------------
<div lang="en-US">
```shell
git clone git://git.nemunai.re/chocominer.git
```
</div>
Rappels sur la découverte de services
-------------------------------------
Dans Docker, nous avions vu que nous n'avions pas besoin de connaître les IP
des conteneurs : un serveur DNS nous permettait de se connecter aux différents
services à partir de leurs noms.
Dans Kubernetes, le même principe s'applique : dans aucun cas, nous ne devrions
coder en dur des adresses IP. Il convient d'utiliser au maximum le système de
DNS, car les IP sont susceptibles de changer !
Tester avec `docker-compose`
----------------------------
`docker-compose up`
Se connecter à chronograf sur le port qui va bien
Monté en puissance
------------------
`docker-compose up -d --scale worker=2`
Ok :-)
`docker-compose up -d --scale worker=10`
Argh :-(
Identification du goulot d'étranglement
---------------------------------------
De nombreux outils existent pour réaliser des tests de performance, essayons
`httping` sur nos différents services pour voir si un service ne serait pas
la cause des ralentissements.
`rng`
: `httping -c 3 localhost:8001`
`hasher`
: `httping -c 3 localhost:8002`
Il semblerait que notre application `rng` nécessite d'être exécuté en parallèle
! Mais on ne peut pas faire de répartition de charge facilement avec
`docker-compose` !