2019-11-26 15:00:39 +00:00
|
|
|
\newpage
|
|
|
|
|
|
|
|
Cookies dans Kube
|
|
|
|
=================
|
|
|
|
|
|
|
|
Maintenant que nous en savons un peu plus sur Kubernetes, nous allons commencer
|
2019-11-27 12:11:20 +00:00
|
|
|
à déployer notre application ChocoMiner dans notre cluster. Pour cela, nous
|
2019-11-26 15:00:39 +00:00
|
|
|
allons devoir :
|
|
|
|
|
|
|
|
- construire les images de notre application ;
|
|
|
|
- publier ces images dans un registre ;
|
|
|
|
- lancer des déploiements de ces images ;
|
|
|
|
- exposer avec un ClusterIP les services qui ont besoin de communiquer
|
|
|
|
entre-eux ;
|
|
|
|
- exposer avec un NodePort l'interface graphique de contrôle.
|
|
|
|
|
|
|
|
|
|
|
|
Rappels sur les registres
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
Pour rappel, lorsque l'on exécute un `docker run alpine`, Docker va étendre le
|
|
|
|
nom de l'image en `library/alpine` puis `index.docker.io/library/alpine`. Pour
|
|
|
|
interroger `index.docker.io` au sujet d'une image `library/alpine:latest`.
|
|
|
|
|
|
|
|
Si l'on souhaite utiliser un autre registre que le Docker Hub, il faut alors
|
|
|
|
préciser le domaine à utiliser : `registry.mycompany.io:5000/myimage:awesome`,
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
Sur la route du registre auto-hébergé
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
Profitons d'avoir notre cluster Kubernetes pour y installer un registre Docker
|
|
|
|
!
|
|
|
|
|
|
|
|
Nous allons déployer l'image officielle de registre Docker : `registry` et
|
|
|
|
faire en sorte que celle-ci stocke les couches des images en local.
|
|
|
|
|
|
|
|
La subtilité à ne pas oublier, est que Docker nécessite d'avoir une connexion
|
|
|
|
chiffrée avec ses registres, à moins qu'il ne soit lancé avec le flag
|
|
|
|
`--insecure-registry`, ou que le registre soit sur `127.0.0.0/8`.
|
|
|
|
|
|
|
|
L'idée sera donc de publier notre registre via un `NodePort`, afin qu'il soit
|
|
|
|
disponible sur un port `127.0.0.1:xxxxx` de chaque nœud :
|
|
|
|
|
|
|
|
```bash
|
|
|
|
kubectl create deployment registry --image=registry
|
|
|
|
kubectl expose deploy/registry --port=5000 --type=NodePort
|
|
|
|
```
|
|
|
|
|
|
|
|
Pour tester, vous pouvez :
|
|
|
|
|
|
|
|
```bash
|
|
|
|
NODEPORT=$(kubectl get svc/registry -o json | jq .spec.ports[0].nodePort)
|
|
|
|
REGISTRY=127.0.0.1:$NODEPORT
|
|
|
|
curl $REGISTRY/v2/_catalog
|
|
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
|
|
docker pull busybox
|
|
|
|
docker tag busybox $REGISTRY/busybox
|
|
|
|
docker push $REGISTRY/busybox
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Utiliser les images du Docker Hub
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
Si vous n'avez pas réussi à déployer votre propre registre (ou si on n'est pas
|
|
|
|
en avance pour avoir le temps de regarder ça !), utilisez les images mises à
|
|
|
|
disposition sur le Docker Hub :
|
|
|
|
|
|
|
|
- `nemunaire/worker:v0.1`
|
|
|
|
- `nemunaire/rng:v0.1`
|
2019-11-27 12:11:20 +00:00
|
|
|
- `nemunaire/hasher:v0.1`
|
2019-11-26 15:00:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
Lançons les images standards
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
#### `influxdb` et `chronograf`
|
|
|
|
|
|
|
|
```bash
|
|
|
|
kubectl create deployment chronograf --image=chronograf
|
2020-09-14 13:46:13 +00:00
|
|
|
kubectl apply -f https://virli.nemunai.re/influxdb.yaml
|
2019-11-26 15:00:39 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
#### Notre application
|
|
|
|
|
|
|
|
```bash
|
|
|
|
TAG=v0.1
|
|
|
|
for SERVICE in hasher rng worker; do
|
|
|
|
kubectl create deployment $SERVICE --image=nemunaire/$SERVICE:$TAG
|
|
|
|
done
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Exposer les ports
|
|
|
|
|
2019-11-26 17:20:26 +00:00
|
|
|
Pour trois des applications, des ClusterIP font l'affaire, car ils n'ont pas
|
|
|
|
besoin d'être exposés en dehors du cluster.
|
|
|
|
|
2019-11-26 15:00:39 +00:00
|
|
|
```bash
|
2020-09-14 13:46:13 +00:00
|
|
|
kubectl expose deployment influxdb --port 8086
|
2019-11-26 15:00:39 +00:00
|
|
|
kubectl expose deployment rng --port 80
|
|
|
|
kubectl expose deployment hasher --port 80
|
|
|
|
```
|
|
|
|
|
2019-11-26 17:20:26 +00:00
|
|
|
Par contre, notre Chronograf doit être exposé, on lui alloue donc un NodePort :
|
|
|
|
|
2019-11-26 15:00:39 +00:00
|
|
|
```bash
|
|
|
|
kubectl create service nodeport chronograf --tcp=8888 --node-port=30001
|
|
|
|
```
|
2019-11-26 17:20:26 +00:00
|
|
|
|
|
|
|
À ce stade, nous devrions pouvoir accéder à l'interface de Chronograf !
|