Vous êtes sur la page 1sur 22

CLOUD

COMPUTING

RAPPORT DU TP
KUBERNETES

2022

PRÉPARÉ PAR
HACHHACH MANAL
ZAIMI SOUKAINA
CREATION DE L'INFRASTRUCTURE

Dans cette section, nous avons commencer par créer trois Volumes
dans l'OpenStack avec l'image snap-tpkube-2022 comme Volume
Source. Ensuite, nous avons créer trois machines avec 2 vCPU, 4 Go
de RAM, réseau vlan1383 ou vlan1368 et avec les volumes
précédemment créés comme sources de démarrage .

l'adresse IP du Master Node : 192.168.246.19

DÉPLOIEMENT DU CLUSTER

Dans cette section, nous avons déployer un cluster Kubernetes


avec l'outil RKE (Rancher Kubernetes Engine).

Préparation de nœuds

1.SSH
Nous avons créer une paire de clefs ssh sans passphrase sur le
nœud Master (commande ssh-keygen)

on a ajouté la clef publique (.ssh/id_rsa.pub) du Master au


fichier des clefs autorisées (.ssh/authorized_keys) sur tous les
nœuds (y compris sur le nœud Master).

PAGE 02
Finalement on a testé si le nœud Master arrive à se connecter en
ssh sur tous les nœuds (y compris sur lui-même).

Connection avec la 2ème VM dont l'adresse ip : 192.186.246.85

Connection avec la 3ème VM dont l'adresse ip : 192.168.246.30

2.Proxy
Ajoutez la variable NO_PROXY dans les variables d'environnement
sur toutes les machines
- Ajoutez la ligne à la fin du fichier /etc/environment

PAGE 03
Pour redémarrez toutes les machines : $ sudo reboot , après click
sur R (restart).

Déploiement de Kubernetes avec RKE


nous avons crée un cluster de 3 machines.

La machine Master Node :

La machine n°1 : worker nodes

La machine n°2 : worker nodes

PAGE 03
Démarrez le cluster Kubernetes avec RKE

Installation et configuration de kubectl

Quel est l'état des nœuds ? statut : ready

UTILISATION DU CLUSTER

Création d'un pod


Nous allons commencer par créer un Pod qui est la plus petite
unité que nous pouvons déployer dans le cluster K8s.

Sur quel nœud le Pod a-t-il été lancé ?


sur le noeud : 192.168.246.85

PAGE 04
Vérifiez l'accessibilité du Pod en interrogeant le port 8080 de tous
les nœuds. Que pouvez-vous conclure ? nous pouvons accéder au
pod de n'importe quelle machine en utilisant l'adresse
correspondant

Visualisez les logs du pod

Vous pouvez également exécuter une commande dans n'importe


quel Pod du cluster avec kubectl exec.

Création d'un deployment

Créez cet objet dans le cluster

Quels rôles jouent les labels et les sélecteurs ?


Les labels sont des paires clé/valeur attachées à des objets, tels
que des pods, sont destinées à être utilisées pour spécifier les
attributs d'identification des objets . Elles peuvent être attachées
aux objets au moment de la création, puis ajoutées et modifiées à
tout moment. Chaque objet peut avoir un ensemble d'étiquettes
clé/valeur définies. Chaque clé doit être unique pour un objet
donné.
Les sélecteurs : Via un sélecteur d'étiquettes , le client/utilisateur
peut identifier un ensemble d'objets. Le sélecteur d'étiquettes est
la primitive de regroupement principale dans Kubernetes.
PAGE 05
Sur quelle image seront basés les conteneurs créés ?
image : nginx

Vous pouvez suivre le processus de déploiement et visualiser l'état


des déploiements avec les commandes

Combien de replicas ont été créés par le déploiement ?


3 replicas

Nous allons mettre à l'échelle votre déploiement pour avoir 6


replicas avec la commande $ kubectl scale deployment nginx-
deployment --replicas=6

Que voyez-vous dans la liste des événements de déploiement ?

dans la liste des évenements de déploiement nous voyons


l'historique des actions réalisées (créations des réplicats)

Visualisez les pods lancées par le déploiement


Comment sont distribués les pods entre les nœuds Workers?
(utilisez l'option -o wide) => distribution equitable

PAGE 06
Création d'une Service
Quel est l'intérêt de la section selector dans le fichier yaml?
le module contrôleur de Kubernetes va utiliser les paramètres
présents dans la section selector.
À noter que le champ Selector permet des conditions de sélection
multiples qui peuvent être basées sur des logiques combinatoire
le ou les labels que nous utilisons comme selector doivent se
retrouver dans les metadatas du pod… sinon nous risquons d’avoir
un problème.
Que permet de faire un Service de type NodePort?
NodePort : Expose le service sur un port statique sur chaque nœud
du cluster

Créez le service dans le cluster

Détectez quel port est exposé sur les nœuds pour atteindre le
service => port: 32692
Affichez des endpoints du service

Quelles adresses sont affichées dans la liste des ENDPOINTS?


10.42.1.6 - 10.42.1.7 - 10.42.1.8 - 10.42.2.6 - 10.42.2.7 - 10.42.2.8

Vérifiez que le déploiement est bien accessible depuis n'importe


quel nœud du cluster => connexion avec succes

PAGE 07
Vérifier que le service est accessible depuis le Pod nginx-pod créé
précédemment

Rolling Updates

Nous allons modifier les paramètres de déploiement pour faire une


pause de 10 secondes après le déploiement de chaque nouveau Pod
$ kubectl patch deployment nginx-deployment -p '{"spec":
{"minReadySeconds": 10}}'

Rollbacks
nous avons effectué le Rollback de déploiement nginx-deployment
$ kubectl rollout undo deployments nginx-deployment
Suivez le processus de Rollback
$ watch -n 1 curl -I 127.0.0.1:[node_port]
Récupérez l'historique du déploiement
Quelle commande utiliserez-vous ?

PAGE 08
Récupérez l'historique du déploiement
Quelle commande utiliserez-vous ?

Volumes

Créez le Persistent Volume dans le cluster

Que signifie l'accès mode "ReadWriteOnce"?


ReadWriteOnce -- le volume peut être monté en lecture-écriture
par un seul nœud

Visualisez les volumes persistants

Quel est le statut du PV après création ?


statut: available

Quelle est la stratégie de rétention de volume persistant créée


et que signifie-t-elle ?
Retain -- remise en état manuelle
La politique de récupération Retain permet la récupération
manuelle de la ressource. Lorsque le PersistentVolumeClaim est
supprimé, le PersistentVolume existe toujours et le volume est
considéré comme «libéré». Mais il n'est pas encore disponible pour
une autre demande car les données du demandeur précédent
restent sur le volume.

Créez cet objet dans le cluster


Visualisez l'état des Persistant Volumes et Persistant Volume
Claims

Quel est le statut du PV et du PVC après la création de la claim ?


staut du pv et pvc ; Bound
PAGE 09
Est-ce que deux claims peuvent utiliser le même volume
persistant ?
deux claims ne peuvent pas utiliser le même volume persistant

Maintenant, vous pouvez attacher le PersistantVolumeClaim à un


Pod.
Créez cet objet dans le cluster
Vérifiez que votre pod est lancé
Trouvez un moyen de vérifier que le volume persistent fonctionne
correctement
Comment l'avez-vous vérifié ?
d'après le log et le pod , nous voyons qu'il est lié .

Variables d'environnement

Créez le Pod dans le cluster


Visualisez les logs du pod

Que voyez-vous dans les logs du Pod?


username=administrator

Secrets
fichier secret.yml

PAGE 10
Créez le secret dans le cluster

Créez le fichier pod_with_secret.yml

Visualisez les logs du pod

Init containers

Créez cet objet dans le cluster


Surveillez le déploiement du Pod

Sur quel nœud Worker le Pod a-t-il été lancé (utilisez l'option -o
wide ou la commande kubectl describe pods <NOM_DU_POD>)
le pod a été lancé sur la machine 192.168.246.85

PAGE 11
resultat : kubernetes

Sondes de Liveness et Readiness

1.Liveness probe

Nous avons créer cet objet dans le cluster avec la commande


$ kubectl apply -f liveness_pod.yml
Nous avons supprimez le répertoire /usr/share/nginx à l'intérieur du
Pod liveness-pod
$ kubectl exec -it liveness-pod -- rm -r /usr/share/nginx

PAGE 12
Surveillez les événements et le comportement du Pod liveness-pod

Que fait Kubernetes en cas d'échec de la Liveness probe?


Liveness probe : vérifie si l'application est en bon état de
fonctionnement. Elle est utilisée tout le long de la vie de
conteneur. En cas d'échec, Kubernetes supposera que votre
application est bloquée et la redémarrera.
2.Readiness probe

Créez ces objets dans le cluster

Etudiez le comportement des Pods avec une sonde Readiness


Surveillez les pods

Que remarquez-vous?
statut du pod nginx-nogood : imagePullBackOff
L'état ImagePullBackOffsignifie qu'un pod n'a pas pu démarrer, car
Kubernetes n'a pas pu extraire une image de conteneur.

PAGE 13
Surveillez la liste des endpoints du service

Que remarquez-vous?
Dans nginx-readiness , nous remarquons que nous n'avons qu'une
seule adresse 10.42.2.17:80 alors que nous devrions en avoir 2

Est-ce que le service répond aux requêtes?


Oui, car le service dirige toutes les requêtes de port de nœud vers
le pod

Trouvez et corrigez l'erreur


On a exécuté la commande "describe" , et le problème provient
del'image nginx

PAGE 14
Nous avons corrigé l'image avec la comande :
$ kubectl edit pod nginx-nogood

D'après le screen en dessous , le status du pod nginx-nogood a


passé de l'état imagePullBackOff à l'état Running.

Ainsi dans la liste des endpoints de nginx-readiness , nous avons


obtenu 2 adresses .

Création d'un Ingress

Création de DNS

Nous avons crée cet objet dans le cluster et visualisé la liste des
Ingress

Quelles adresses se trouvent dans le colonne ADDRESS ?


192.168.246.30 et 192.168.246.85
Essayez d'accéder au Service en utilisant le nom DNS
précédemment créé à parir de votre navigateur ou en executant
la commande curl

Que pouvez-vous constater ?

PAGE 15
UN DÉPLOIEMENT PLUS COMPLEXE

Service Redis

PersistantVolume

Nous avons créé un volume persistant avec le nom redis-pv , de


type hostPath, avec une capacité de stockage de 500Mi , le mode
d'accès ReadWriteOnce et un point de montage /mnt/redis.

PersistantVolumeClaim

nous avons créé un PersistantVolumeClaim avec le nom redis-pvc


qui demande un stockage avec une capacité de 500Mi et le mode
d'accès ReadWriteOnce.

Et on vérifié que les états de PersistantVolume et


PersistantVolumeClaim sont Bound

Secret

Créez le Secret avec le nom redis-secret qui a un champ nommé


password. Ce champ doit contenir le mot redispassword qui sera
utilisé comme mot de passe d'authetification Redis. N'oubliez pas
que les secrets doivent être encodés en base64.

PAGE 16
Deployment

Créez un déploiement avec le nom redis-deployment

Verifiez le Deployement et le Pod crée


$ kubectl get deployments
$ kubectl get pods

PAGE 17
Service

Créez un service de type ClusterIP avec le nom redis-service qui


Utilise un selector sur le label app: redis
Transfére le trafic envoyé au port TCP 6379 du Service sur le
port 6379 du Pod

Vous avez créé le service Redis, vous devez maintenant vérifier s'il
fonctionne correctement.
Connectez-vous avec telnet sur le Redis à partir de Pod busybox et
testez si Redis fonctionne correctement

PAGE 18
Service Redis

Deployment

Service

Verifiez le Service et les Endpoints


$ kubectl get services
$ kubectl get endpoints

Ingress
Créez un Ingress avec le nom counter-ingress et Verifiez

PAGE 19
Verification de l'application

Pour vérifier le fonctionnement de l'application, vous pouvez


essayer d'y accéder avec votre navigateur en utilisant le nom DNS
créé précédemment et le préfixe /counter.

fichier couter deployment

PAGE 20
fichier ingress

PAGE 21

Vous aimerez peut-être aussi