ANSIBLE ET K8S, UN DÉPLOIEMENT SIMPLE ET EFFICACE

I. Contexte et Objectifs

Avec l’évolution de la philosophie Devops, il est indispensable d’avoir dans la chaîne CI/CD un outil d’automatisation. Ansible est aujourd’hui incontournable dans la mise en place d’une infrastructure automatisée. Après le déploiement d’une application, il est indispensable de gérer les problématiques de haute disponibilité, de scalabilité et de mise à jour de l’application. Aujourd’hui, l’outil qui répond à toutes ces problématiques est kubernetes. 

Au vue des avantages apportés par ces deux outils, il est essentiel de pouvoir proposer des infrastructures qui automatisent le déploiement dans un cluster k8s afin d’avoir une application hautement disponible.

Dans cet article, je vous présente comment utiliser ansible afin de provisionner les ressources dans un cluster kubernetes avec un exemple concret de déploiement. 

II. Prérequis :

  • Cluster kubernetes (2 VM représentant le master et le worker)
  • Python>=2.7
  • Openshift>=0.6
  • PyYAML>=3.11
Installation des prérequis
  • Cluster kubernetes

Dans le cadre de cet article, nous avons déployé un cluster de 2 nœuds (un master et un worker). Le déploiement du cluster s’est fait en utilisant un rôle ansible:  https://github.com/franck-art/kubernetes-playbook/tree/master/kubernetes_role_cluster

Visualiser les nœuds

C:\Users\Fujitsu\Desktop\node.PNG

  • sudo yum install python3-pip
  • sudo pip3 install PyYAML
  • sudo pip3 install openshift
  • sudo pip3 install –upgrade –user openshift

Une fois les prérequis installés, il est possible d’utiliser le module k8s de ansible.

III. Application au déploiement de nginx

Nous avons utilisé un objet deployment avec un replica de 3 et un service afin d’exposer l’application

Deploiement.yml

C:\Users\Fujitsu\Desktop\deployment.PNG

Service.yml

C:\Users\Fujitsu\Desktop\service.PNG

Nous avons mis sur pieds un playbook de provisionnement des ressources sur le cluster k8s.

 Lancement du playbook

Playbook launch.yml

C:\Users\Fujitsu\Desktop\launch.PNG

Ce playbook va créer un namespace du projet nommé « franck », un deployment de 3 replicas et un service afin d’exposer l’application.

Le playbook est lancé sur la VM du noeud  master grace à la commande ansible:  ansible-playbook -i hosts launch.yml

avec hosts, le fichier contenant notre inventaire

C:\Users\Fujitsu\Desktop\host.PNG

 

C:\Users\Fujitsu\Desktop\playbook-ansible.PNG

Vérification

kubectl get deploy -n franck

NAME READY UP-TO-DATE AVAILABLE AGE

www-deployment 3/3 3 3 5d20h

kubectl get pods -n franck -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

www-deployment-65c547b6f-g7kgb 1/1 Running 0 5d20h 10.244.1.2 worker-node <none> <none>

www-deployment-65c547b6f-l68rf 1/1 Running 0 5d20h 10.244.1.3 worker-node <none> <none>

www-deployment-65c547b6f-vjnvf 1/1 Running 0 5d20h 10.244.1.5 worker-node <none> <none>

Disponibilité de l’application

L’application est disponible à l’adresse http://3.236.211.59:31000/

C:\Users\Fujitsu\Desktop\app_nginx.PNG

Conclusion

La jonction de ansible et kubernetes permet de rendre le déploiement efficace et automatisé. Grace au module k8s de ansible, il devient beaucoup plus facile d’interagir avec le cluster. On peut désormais intégrer kubernetes à une chaine CI/CD complète grâce à son interaction avec ansible.

Références:

kubernestes cluster ansible role: https://github.com/franck-art/kubernetes-playbook/tree/master/kubernetes_role_cluster

k8s module doc: https://docs.ansible.com/ansible/latest/modules/k8s_module.html

Auteur:  Franck Junior TCHOUNZOU, Software Engeneer Devops