Cluster Multinoeuds
Cluster Multinoeuds
Cluster Multinoeuds
RECHERCHE SCIENTIFIQUE
----------------------------------------------------
UNIVERSITE DE MONASTIR
Ines.Matmati
M2 EXPERT_RESEAUX
Dans ce rapport en va décrit les étapes requises pour configurer un cluster Kubernetes à nœuds
multiples à des fins de développement. Cette configuration fournit un cluster de type production
qui peut être configuré sur votre machine locale.
Introduction
Le déploiement de systèmes d'application complexes n'est pas un problème nouveau. Au cours des
dernières décennies, le besoin de configuration et de gestion automatisées, ou orchestration, des logiciels
a été identifié à plusieurs reprises. Dans l'espace des systèmes d'exploitation, des outils de gestion de la
configuration tels que Chef, Puppet, Salt et enfin Ansible orchestrent la configuration des applications
natives du système d'exploitation. Des outils comme AWS CloudFormation, OpenStack Heat et
Terraform, orchestrent le déploiement de ressources virtuelles d'infrastructure en tant que service (IaaS),
y compris des machines, des périphériques de stockage par blocs ou des réseaux définis par logiciel
(SDN). L'ordre dans lequel ces outils ont été créés illustre à quel point les solutions complexes et
orientées serveur se sont estompées, créant de l'espace pour des outils sans serveur spécialisés capables
d'exécuter un type de tâche particulièrement bien (et rapidement).
Ces avantages permettent aux équipes de résoudre les problèmes plus rapidement, ce qui les
rend plus agiles
p. 1
Ansible est un moteur d'automatisation d'infrastructure qui automatise la gestion de la
configuration logicielle. Il est sans agent et nous permet d'utiliser des clés SSH pour nous
connecter à des machines distantes. Les playbooks Ansible sont écrits en yaml et offrent une
gestion des stocks dans de simples fichiers texte.
Conditions préalables
Vagrant doit être installé sur votre machine pour créer et provisionner nos
machines virtuelles à l'aide de l'hyperviseur VirtualBox
Ansible doit être installé sur votre machine qui sera utilisé pour installer et
configurer l'environnement Kubernetes
p. 2
Nous avons trois rôles Ansible et un Vagrantfile dans notre projet qui mène à la création d'un
cluster kubernetes multi-nœud solide
Figure 2 Vagrantfile
p. 3
Vous pouvez personnaliser votre cluster Kubernetes depuis le fichier Vagrantfile à partir des
variables de configuration, par exemple vous pouvez agrandir le nombre de nœuds en changeant
la variable WORKER_NBR, voire attribuer davantage de ressources à vos nœuds en revalorisant
les variables CPU et/ou RAM, etc.
Comme vu précédemment, le Vagrantfile fait appel au playbook main.yml, voici son contenu
p. 4
Figure 3 main.yml
Ainsi, soit la machine est de type master, dans ce cas on lance le rôle roles/master, dans le cas
contraire on lance le rôle roles/worker.
Ces deux rôles inclus tous les deux dans leur dossier, plutôt dans les fichiers
roles/worker/meta/main.yml
roles/master/meta/main.yml
Figure 4 dépendances
Nous avons vu le rôle de ansible de notre projet on va passer maintenant au rôle du commun qui relier
avec les nœuds et le master
C. Le rôle commun
Au sein du rôle roles/commun, plus précisément dans le fichier roles/common/defaults/main.yml, on
peut retrouver les multiples clés gpg, dépôts et paquets qui seront ajoutés et installés sur les nœuds du
cluster, soit :
p. 5
Figure 5 rôles/common
Kubectl : permet d'exécuter des commandes sur les clusters Kubernetes afin de créer et gérer des objets
k8s et interagir avec l'API Kubernetes
Kubadm : nous permettre tout simplement d'initialiser notre cluster Kubernetes et de joindre des machines
à notre cluster k8s
Kubelet : Il s’agit d’un agent qui s'exécute dans chaque nœud chargé de relayer les informations au Master.
Il interagit avec la base de données etcd du Master pour récupérer des informations afin de connaître les
tâches à effectuer.
Nous avons vu le rôle de common de notre projet on va passer maintenant au rôle du master
p. 6
Figure 6 main.yml du master
La première tâche exécutée kubeadm init, initialise le nœud maître Kubernetes ou il est spécifié
en tant que paramètres, l'IP du serveur API, le nom du cluster, et la plage IP des pods.
Une fois le nœud master initialisé, l'étape suivante consiste à gérer la partie réseau du cluster de
manière à connecter les divers modules sur les différents nœuds du cluster. Pour cela, nous devons
inclure un plugin CNI1 .L'objectif de ce projet est de créer une norme conçue pour faciliter la
configuration réseau des conteneurs que ça soit pendant leurs créations ou lors de leurs
destructions, le tout basée sur un plugin.
Ces plugins permettent de s'assurer que les exigences réseau de Kubernetes sont satisfaites et
fournissent les fonctionnalités réseau requises pour assurer le bon fonctionnement du cluster.
Différents plugins existent dont le plugin flannel, qui est celui utilisé dans notre rôle.
L'étape finale réside sur la génération d'un token, qui sera utilisé plus tard par les workers afin de
les autoriser à rejoindre le cluster. Ce token est par la suite copié dans un fichier qui est ensuite
transféré sur notre machine locale dans le but d'être utilisé dans la suite par le rôle roles/workers.
1
CNI signifie "Container Networking Interface" c'est un projet de la CNCF (Cloud Native Computing Foundation),
qui est une organisation qui gère également le projet Kubernetes.
p. 7
E.Le rôle worker
Les tâches dans le rôle du worker n'ont rien de compliqué, et sont disponibles dans le
fichier roles/worker/tasks/main.yml
Figure 7 Worker/tasks
Ici, il ne fait que récupérer et exécuter le fichier généré par le master contenant le token permettant
de rejoindre notre cluster kubernetes.
A.Installation de Vagrant
Pour installer vagrant téléchargez-le package correspondant à notre système d'exploitation et à
notre architecture. Dans notre cas, ma machine est sous la distribution Ubuntu
B. Installation d'Ansible
Configurer le PPA sur votre machine et installer Ansible, exécutez ces commandes :
p. 8
Figure 9 Installation Ansible
C.Exécution du projet
Une fois tous les prérequis satisfaits, on peut dorénavant commencer par lancer notre projet.
Placez-vous d'abord dans la racine du projet au même niveau que le fichier Vagrantfile et lancez
ensuite la commande suivante :
Une fois que Playbook et Vagrantfile sont prêts, exécutez la commande vagrant up pour
démarrer la machine virtuelle.
p. 9
Figure 10 start Vagrant
p. 10
Figure 11 VirtualBox
Une fois toutes les étapes ci-dessus terminées notre nœuds, master sont bien installer dans
VirtualBox, le cluster Kubernetes doit être opérationnel. Nous pouvons nous connecter aux
nœuds maître ou worker en utilisant Vagrant comme suit :
p. 11
On va récupérer le dossier .kube de votre master, en le positionnant dans votre dossier utilisateur,
comme suit
Dès à présent votre kubectl est configuré pour communiquer à votre API k8s, récupérerons alors
la liste des nœuds disponibles dans notre cluster :
Conclusion
Les applications multi-cluster réduiront la charge de travail des équipes d'exploitation et
permettront de déployer et de mettre à niveau les applications rapidement et de manière fiable
sur tous les clusters.
p. 12
p. 13