Architecture Kubernetes

Architecture Kubernetes

DevOps

Il fut un temps, les applications fonctionnaient comme un seul processus pouvant รชtre appelรฉs monolithiques pour faire lโ€™analogie entre lโ€™application et un grand bloc de pierre. Lโ€™รฉquipe de dรฉveloppement ยซ dev ยป transmettait lโ€™application ร  lโ€™รฉquipe opรฉrationnelle ยซ ops ยป qui se chargeait de la dรฉployer sur les machines. Celles-ci รฉtaient de grandes tailles, ce qui rendait le cycle de release trรจs lent et trรจs peu frรฉquent. Avec les mรฉthodologies de gestion de projet de type ยซ waterfall ยป, il fallait attendre 1 an ou plus avant de pouvoir dรฉployer lโ€™application sur une infrastructure. La sรฉparation entre ces deux รฉquipes posait quelques problรจmes. Les dรฉveloppeurs ne pensaient quโ€™ร  dรฉvelopper et ne se souciaient guรจre de comment fonctionnait leurs codes sur lโ€™environnement de production. Tant que tout fonctionnait sur leurs machines, ils avaient fait leur part du boulot. Aujourdโ€™hui, on voit les choses autrement: They care not just about implementing user features, but also actively ensure their work flows smoothly and frequently through the entire value stream without causing chaos and disruption to IT Operations or any other internal or external customer.[1]

Lโ€™รฉquipe opรฉrationnelle a pour but dโ€™assurer la stabilitรฉ et la qualitรฉ de lโ€™infrastructure. Elle prรฉparait les machines ร  accueillir lโ€™application avec toutes les dรฉpendances nรฉcessaires. Puis, une fois en production, elle assure que lโ€™application ne tombe pas en panne et quโ€™elle respecte un certain niveau de performance. Leurs objectifs respectifs crรฉent alors un fossรฉ entre les deux รฉquipes et gรฉnรจrent un conflit majeur. Les devs veulent coder le plus de fonctionnalitรฉs possibles dans un temps restreint, alors que les ops veulent un code stable qui respecte plusieurs critรจres de qualitรฉ qui ne concernent pas les fonctionnalitรฉs mรฉtier. DevOps met en place une sรฉrie dโ€™รฉtapes au dรฉveloppement du logiciel formant un cycle qui intรจgre les dรฉveloppeurs et les รฉquipes opรฉrationnelles. Des tรขches sont automatisรฉes : les tests unitaires, la gestion de la configuration des machines et le dรฉploiement. La mise en production de nouvelles fonctionnalitรฉs est plus frรฉquente. Ce nouveau systรจme permet dโ€™amรฉliorer la collaboration, la productivitรฉ de chaque รฉquipe et permet dโ€™รชtre plus compรฉtitif vis-ร -vis de la concurrence.

Kubernetes

Les microservices peuvent รชtre dรฉployรฉs de maniรจre trรจs rapide grรขce ร  docker et peuvent รชtre rรฉpliquรฉs puisquโ€™ils sont tous indรฉpendants. Toutefois, comment gรฉrer tout cela manuellement si des containers sont dispersรฉs dans un grand nombre de machines ? Dans le cas oรน il y a un container qui pose un problรจme, comment le dรฉtecter ? Lequel aurait besoin de plus de rรฉplications pour subvenir ร  une subite augmentation de la charge ? Lโ€™รฉquipe opรฉrationnelle monitore les serveurs et si un de ces derniers tombe en panne, il devra crรฉer de nouveaux containers avec les services dรฉchus dans un autre serveur. Kubernetes permet justement dโ€™automatiser le dรฉploiement, la gestion de demande de puissance et la gestion des applications containerisรฉes.[6] Ainsi, lโ€™รฉquipe ops pourra dรฉlรฉguer la responsabilitรฉ de gรฉrer les applications dรฉployรฉes ร  lโ€™รฉquipe dev et le systรจme peut รชtre programmรฉ pour pouvoir sโ€™autogรฉrer sans la supervision dโ€™un humain. Kubernetes sโ€™occupera de dรฉployer un container avec lโ€™application qui รฉtait prรฉsente dans la machine qui est tombรฉe en panne, dans une machine qui a la capacitรฉ de lโ€™accueillir. Dans le cas oรน une machine est trรจs fortement sollicitรฉe et ne parvient plus ร  suivre ร  la sollicitation dโ€™un ou plusieurs services, Kubernetes pourra รชtre programmรฉ pour rรฉagir et dรฉployer des containers offrant les services nรฉcessaires sur dโ€™autres machines et via un LoadBalancing, dispatcher les requรชtes pour rรฉpondre ร  cette demande.

Puis bien รฉvidemment, enlever des containers quand ils ne seront plus nรฉcessaires et utilisent inutilement du temps computationnel. Ce travail de Bachelor va dรฉcrire comment Kubernetes met en place cette fonctionnalitรฉ de gestion de la charge et en faire un case study. Pour rรฉsumer, tous ces changements tant au niveau du dรฉveloppement dโ€™une application que de son maintien, ont engendrรฉ de nouveaux concepts avec leurs nouvelles problรฉmatiques. Les premiรจres architectures dโ€™applications รฉtaient monolitques et leurs composants รฉtaient fortement couplรฉs. Dorรฉnavant, celles-ci sont distribuรฉes et basรฉes sur des microservices indรฉpendants, dispatchรฉs sur plusieurs machines et gรฉrรฉs par un orchestrateur de conteneurs, Kubernetes.

Worker Node

Un worker node (WN) est une machine physique ou une VM qui dรฉtient toutes les ressources nรฉcessaires afin de garantir lโ€™exรฉcution dโ€™un ou plusieurs pods. [15] Cette entitรฉ va hรฉberger tous les services quโ€™un dรฉveloppeur aura dรฉcidรฉ de dรฉployer (Figure 4). Chaque WN est composรฉ dโ€™un Kubelet, dโ€™un kube-proxy et dโ€™un Container runtime. Le Kubelet a comme responsabilitรฉ de gรฉrer tous les pods ainsi que leurs containers contenus dans le WN. Lui-mรชme contient un composant appelรฉ ยซ cAdvisor ยป qui lui sโ€™occupe de rรฉcupรฉrer des mรฉtriques sur chaque container de chaque pods. Le Kube-proxy a comme responsabilitรฉ de rediriger le trafic rรฉseau vers les pods contenant les services requis. Pour cela, il contient une table ยซ IPTable ยป qui dรฉtient les adresses des pods. Le Container runtime est extรฉrieur ร  Kubernetes. Cโ€™est le composant qui gรจre les containers dans un WN, Docker dans le cadre de notre mรฉmoire. Pour crรฉer un container, le Kubelet inspecte le descriptor dโ€™un pod du WN et communique les images qui y sont mentionnรฉes au Container runtime via le protocole REST. Ce dernier tรฉlรฉcharge lโ€™image ร  partir de DockerHub si lโ€™image nโ€™est pas disponible localement et instancie un container avec cette image. Si un pod est supprimรฉ ou dysfonctionne, le Kubelet a la responsabilitรฉ dโ€™arrรชter le ou les containers qui y รฉtaient hรฉbergรฉs via le container runtime.

ReplicationController, ReplicaSet

Le Replication Controller (RC) a la charge de crรฉer, supprimer et de maintenir une ou plusieurs instances dโ€™un pod selon le nombre de rรฉplicas mentionnรฉ dans le descriptor du RC. Il est situรฉ au sein du master node (voir chapitre 3.7 Master Node) Un RC sโ€™occupe uniquement des pods qui contiennent un certain type dโ€™image ร  qui on va assigner un label dans son descriptor. Si le descriptor mentionne uniquement le label A, il ne se prรฉoccupera pas des pods ayant un label B. [16] Dans la Figure 5 : Schรฉma du rรดle du Replication Controller, nous pouvons voir que le descriptor du RC ne mentionne que le label ยซ A ยป avec une image ยซ A ยป. Un pod ayant le label ยซ A ยป ร  gauche de la Figure 5 : Schรฉma du rรดle du Replication Controller ne fonctionne plus. Le descriptor mentionne quโ€™il faut trois rรฉplicas actifs alors quโ€™il nโ€™y en a plus que deux. Par consรฉquent, le RC en crรฉe un nouveau pour sโ€™ajuster au descriptor. Mais ce nโ€™est pas lui qui les assigne aux WN. Lโ€™assignation du pod ร  un WN est effectuรฉe par le Scheduler, cette รฉtape sera expliquรฉe dans un prochain chapitre. Le pod ayant le label ยซ B ยป est supprimรฉ lui aussi. Cependant, aucun RC ne sโ€™en occupe. Il nโ€™y aura plus aucun pod ayant le label B. Rรฉpliquer un pod veut dire en crรฉer un nouveau avec les mรชmes caractรฉristiques.

Dans le schรฉma de la figure 5 ร  droite, le pod liรฉ au trait-tillรฉ vert est un pod ayant les mรชmes caractรฉristiques que les pods contenant le label ยซ A ยป. Le descriptor du RC indique combien de pods dโ€™un certain type il doit maintenir en permanence. Ainsi, en augmentant manuellement ce nombre, le RC crรฉe immรฉdiatement de nouveaux pods de ce type. Cโ€™est une maniรจre dโ€™augmenter manuellement la disponibilitรฉ dโ€™un service. Chaque type de pod รฉtant gรฉrรฉ par des RC distincts, il faudrait changer chacun de leurs descriptors respectifs pour les ยซ scaler ยป ensemble. Par exemple, admettons que le nombre de pod de type ยซ FrontEnd ยป a รฉtรฉ augmentรฉ. Sachant quโ€™il communique toujours avec un pod ยซ Backend ยป, il pourrait รชtre judicieux dโ€™augmenter le nombre de ce dernier aussi. Kubernetes utilise un autre concept pour gรฉrer plusieurs types de pods simultanรฉment : le ReplicaSet. Ce dernier fonctionne de la mรชme maniรจre quโ€™un RC, mais il est possible de sรฉlectionner plusieurs types de pods avec des labels diffรฉrents dans son descriptor.1

Conclusion

En conclusion, la solution proposรฉe par Kubernetes rรฉpond parfaitement ร  la problรฉmatique de maniรจre simple et efficace. On constate que lโ€™accรจs de type Nodeport offre une solution simple de loadbalancer. De plus, en cas de forte fluctuation du trafic, le systรจme sโ€™ajuste pour rรฉpondre au besoin automatiquement grรขce ร  lโ€™HPA. De ce fait, les dรฉveloppeurs peuvent se concentrer sur les aspects mรฉtiers de leurs applications. La phase dโ€™รฉtude de cette technologie รฉtait assez complexe car cette technologie est en constante รฉvolution et mโ€™รฉtait inconnue. Jโ€™ai dรป passer par une รฉtude de lโ€™architecture de Kubernetes : ses composants et leurs interactions, afin de comprendre le fonctionnement du systรจme global. Cependant, la partie pratique de ce manuscrit est acadรฉmique, le dรฉploiement de services plus complexes sur des machines de production nรฉcessiterait un approfondissement car la technologie est plus vaste que lโ€™รฉchantillon qui a รฉtรฉ dรฉcrit. Heureusement, Kubernetes possรจde une grande communautรฉ dโ€™utilisateurs, trรจs active et une excellente documentation. Si le temps nรฉcessaire ร  maitriser Kubernetes semble long, plusieurs alternatives payantes existent comme : Azure Kubernetes Service [36], Amazon EKS [37], etc. qui facilitent son usage. Pour conclure, je suis trรจs satisfait par les connaissances et compรฉtences acquises lors de la rรฉdaction de ce mรฉmoire. Jโ€™espรจre pouvoir les approfondir lors de mon arrivรฉe chez mon prochain employeur qui sโ€™avรจre utiliser Kubernetes.

Le rapport de stage ou le pfe est un document dโ€™analyse, de synthรจse et dโ€™รฉvaluation de votre apprentissage, cโ€™est pour cela chatpfe.com propose le tรฉlรฉchargement des modรจles complet de projet de fin dโ€™รฉtude, rapport de stage, mรฉmoire, pfe, thรจse, pour connaรฎtre la mรฉthodologie ร  avoir et savoir comment construire les parties dโ€™un projet de fin dโ€™รฉtude.

Table des matiรจres

Montรฉe en puissance des microservices avec Kubernetes
Dรฉclaration
Remerciements
Rรฉsumรฉ
Liste des tableaux
Liste des figures
1. Introduction
1.1 DevOps
1.2 Microservices
1.3 Docker
1.4 Kubernetes
2. Problรฉmatique
2.1 CQRS
2.2 Publish and Subscribe
3. Architecture Kubernetes
3.1 Introduction
3.2 Docker
3.2.1 Docker deamon & docker-cli
3.2.2 Docker Image
3.2.3 Dockerfile
3.2.4 DockerHub
3.3 Pods
3.4 Worker Node
3.5 ReplicationController, ReplicaSet
3.6 HorizontalPodAutoscalling
3.7 Master Node
3.8 Service
3.8.1 NodePort :
3.8.2 LoadBalancer :
3.8.3 Ingress :
4. Accรจs aux services par une requรชte externe
4.1 Introduction
4.2 Networking
4.3.1 Ajustement du nombre de pods vis-ร -vis du trafic
4.3.2 Crรฉation des pods suite ร  une mise-ร -jour de lโ€™etcd
4.3.3 Sรฉlection du worker node
5. Installation
5.1 Docker
5.2 Minikube
5.2.1 Introduction
5.2.2 Prรฉrequis
5.2.3 Virtualisation VT-x ou AMD-v
5.2.4 Hyperviseur
5.2.5 Kubectl
5.2.6 Minikube
6. Case study
6.1 Introduction
6.2 Crรฉation de lโ€™image NBA avec Docker
6.2.1 Dockerfile
6.2.2 Docker CLI
6.3 Publier lโ€™image sur DockerHub
6.4 Crรฉer un container avec lโ€™image NBA
6.5 Essai de montรฉe en puissance
6.5.1 Introduction
6.5.2 Crรฉation minikube
6.5.3 Crรฉation ReplicaSet
6.5.4 Diminution manuelle du nombre de pods ยซ nba ยป
6.5.5 NodePort Service
6.5.6 HPA
7. Conclusion
Bibliographie

Rapport PFE, mรฉmoire et thรจse PDFTรฉlรฉcharger le rapport complet

Tรฉlรฉcharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiรฉe. Les champs obligatoires sont indiquรฉs avec *