Hackathon#6 - Discover Kubernetes avec la Nico'Team

Les deux Nicos de notre KNPTeam avaient envie de tester Kubernetes. Comme leur projet client actuel contient en fait plusieurs projets et qu’il a été récemment dockerisé, il se prêtait parfaitement à l’expérience.

Leurs objectifs pour ce hackathon :

  • apprendre comment répliquer des containers sur plusieurs machines.
  • Faire des crash tests et des tests de répartition de charge (pour avoir une politique de 0 down time).
  • découvrir d’éventuels patterns à suivre.

Daily fin de jour 1 : Ce qu’on a réalisé

Avant tout, RTFM pour se familiariser avec le vocabulaire de Kubernetes. L’équipe a converti les fichiers docker-compose en fichiers Kubernetes avec l’outil Kompose. Nico M. est parti sur Minikube (qui permet de faire tourner Kubernetes en local) pendant que Nico N. a essayé toutes les façons d’installer Kubernetes, avant de switcher lui aussi sur Minikube.  L’équipe a déjà beaucoup appris au terme de ce premier jour.
Prochaine étape : faire tourner l’API du projet client existant dessus.

Review fin du jour 2 : Ce qu’on a réalisé

  • Testé l’interface graphique, qui est pas mal.
  • Testé l’ajout de serveurs nginx : pour avoir 3 serveurs, il a suffit de créer des répliques du premier déploiement en une ligne de commande.
  • Simulé un serveur qui tombe : la demande initiale étant de 3 serveurs, si l’équipe en kill un, Kubernetes va automatiquement en recréer un nouveau.

Les commentaires de la team :
On aurait bien voulu automatiser encore davantage, faire des simulations de charge pour faire des autoscale, mais le temps a manqué. Kubernetes est bien complexe, et demande les connaissances d’un véritable admin sys. La partie la plus difficile a été l’install, puis le faire tourner en local.

En conclusion, c’est un outil très pratique, mais plutôt fait pour les grosses structures ayant un pôle infrastructure dédié.

Quelques commandes utilisées :

  • Pour convertir votre docker-compose.yml en objets utilisables par Kubernetes (fichiers yaml de configuration des services et déploiements k8s), nous avons utilisé Kompose :
    kompose -f docker-compose.yml convert
  • Ensuite, nous avons utilisé Minikube pour créer un cluster local :
    minikube start
  • Et nous avons construit nos images sur ce cluster pour qu’elles soient accessibles par k8s. Premièrement, il faut indiquer à docker qu’il doit utiliser l’environnement du cluster via la commande :
    eval $(minikube docker-env)

    Modifier le fichier/etc/sysconfig/docker en remplaçant la ligne

    DOCKER_CERT_PATH=/etc/docker

    par

    if [ -z “${DOCKER_VERT_PATH}” ]; then
        DOCKER_VERT_PATH=/etc/docker
    fi

    Enfin, construire les images sur le cluster en utilisant la commande habituelle

    docker build /path/to/dockerfile/directory -t image_name
  • Pour finir, déployer l’application sur le cluster local minikube via la commande

    kubectl create -f /path/to/yaml/objects/directory
  • L’appli est déployée. Dans notre cas, nous avions un déploiement nginx, (créé à partir de notre fichier docker-compose.yml), que nous pouvions voir grâce à la commande

    kubectl get deployments

    Pour ajouter d’autres instances de ce déploiement, il suffit d’indiquer à k8s combien de répliques nous voulons créer , par exemple :

    kubectl scale --replicas=3 deployment/nginx

    K8s s’occupe de créer les deux autres instances de nginx pour arriver à un total de 3, et ce même si l’une de ces instances vient à tomber.

Liens utiles

Plus d’infos sur notre Hackathon sur notre page Facebook – si vous voulez rejoindre la KNPTeam, on recrute pour des missions à Paris !