\newpage Cookies dans Kube ================= Maintenant que nous en savons un peu plus sur Kubernetes, nous allons commencer à déployer notre application ChocoMiner dans notre cluster. Pour cela, nous 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` - `nemunaire/hasher:v0.1` Lançons les images standards ---------------------------- #### `influxdb` et `chronograf` ```bash kubectl create deployment chronograf --image=chronograf kubectl apply -f https://virli.nemunai.re/influxdb.yaml ``` #### 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 Pour trois des applications, des ClusterIP font l'affaire, car ils n'ont pas besoin d'être exposés en dehors du cluster. ```bash kubectl expose deployment influxdb --port 8086 kubectl expose deployment rng --port 80 kubectl expose deployment hasher --port 80 ``` Par contre, notre Chronograf doit être exposé, on lui alloue donc un NodePort : ```bash kubectl create service nodeport chronograf --tcp=8888 --node-port=30001 ``` À ce stade, nous devrions pouvoir accéder à l'interface de Chronograf !