virli/tutorial/k8s/run.md
2020-09-14 15:46:13 +02:00

3.2 KiB

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

kubectl create deployment registry --image=registry
kubectl expose deploy/registry --port=5000 --type=NodePort

Pour tester, vous pouvez :

NODEPORT=$(kubectl get svc/registry -o json | jq .spec.ports[0].nodePort)
REGISTRY=127.0.0.1:$NODEPORT
curl $REGISTRY/v2/_catalog
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

kubectl create deployment chronograf --image=chronograf
kubectl apply -f https://virli.nemunai.re/influxdb.yaml

Notre application

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.

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 :

kubectl create service nodeport chronograf --tcp=8888 --node-port=30001

À ce stade, nous devrions pouvoir accéder à l'interface de Chronograf !