Vous êtes sur la page 1sur 12

VIRTUALISATION ET CLOUD COMPUTING | SALAHEDDINE.

HEBABAZE

Compte Rendu : Kubernetes

Les objectifs de TP :
• Installation et gestion de kubernetes
• Application des configurations à partir des fichier yaml
• Création des pods, réplication et déploiement sous kubernetes
• Implémentation et la gestion d'un registre docker localement
• Implémentation de monitoring system influxdB et chronograf via kubernetes

Partie (1) : La Création de Cluster Kind et installation de Kubectl


a.Téléchargement de kind
Kind est un projet permettant de lancer un cluster kubernetes directement via Docker.
# curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-$(uname)-amd64
# chmod +x ./kind

Print scr 1 : téléchargement de kind

b.fichier de création de cluster my-cluster.yml


Création de fichier de configuration my-cluster.yml pour la création de de cluster : 1 master et 2
worker :
cat > my-cluster.yml <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF

c.Création de cluster en ligne de commande :


Lancer la création de cluster avec la commande suivante :
# sudo ./kind create cluster --config my-cluster.yml

CLoudHPC | ENSIAS
Print scr 2 : Le cluster en processus de création

• Vérifier la création de cluster


# sudo ./kind get clusters

Print scr 3: : Afficher les cluster kind

d.Téléchargement de kubectl :

# curl -LO https://storage.googleapis.com/kubernetes-


release/release/v1.18.0/bin/linux/amd64/kubectl

• Rendre le binaire kubectl exécutable.

chmod +x ./kubectl

• spécifier le contexte pour kubectl afin d'interagir avec le cluster kind :

sudo kubectl cluster-info –context kind-kind

Print scr 4 : : Vérification de tâche

e.désactiver la mémoire swap :


sudo swapoff -a

f.afficher la version installée :


# kubectl version

Print scr 5 : afficher la version de kubectl


Partie 2 : Play With Kubernetes
a.Initialisez kubeadm sur le nœud maître :
# sudo kubeadm init --pod-network-cidr=10.1.1.0/24

b.Installation de Chocominer :
• Télécharger Chocominer
sudo git clone https://git.nemunai.re/chocominer.git

• lancer execution de Chocominer


sudo docker-compose up

Print scr 6: création des différents conteneurs

• A partir du lien suivant : http://localhost:8888/sources/1/dashboards/1

Print scr 7 : l’interface de chronograf pour voir l’avancement de recherche de pépites

• Augmenter le nombre des worker


sudo docker-compose up -d --scale worker=2

Print scr 8: Vérification de tâche


• Dans l'image suivante on aperçoit que le nombre de hash est doublé après doubler le nombre
des worker

Print scr 9 : Nombre des pépites après l'augmentation le nombre des worker

Partie 3 : Découverte de Kubectl :


a.l'option get : voir les informations de cluster
sudo kubectl get node

Print scr 10: Vérification de tâche

usor@myhostname:~$ sudo kubectl get nodes -o wide

Print scr 11: affiches les node avec ses adresses IP

b.Kubectl Services :

Print scr 12 : Afficher les services de de cluster en cours

• Pour le moment nous n'avons qu'un service "CLUSTER-IP" qu'est l'adresse IP de service
accessible en interne par les autres node de cluster
• Pour afficher la liste des conteneurs actif on tape la commande suivante :
# kubectl get pods
Print scr 13 : aucun pod dans le name space par défaut

Aucune ressource trouvée dans le namespace par default.


• Pour cela on affiche la liste des 'namespaces' disponible avec la commande :
sudo kubectl get namespaces

Print scr 14 : Afficher la liste des namespaces

Pour voire les conteneurs d'un autre espace de noms :


Kubectl -n kube-system get pods

Print scr 15 : afficher les pods de kube-system

c.Lancer un pod :
• Pour lancer une image en pod en utilise la commande suivante :
sudo kubectl run pingpong --image alpine ping 1.1.1.1

Print scr 16 : Lancement de POD

• Vérification de tâche par la commande suivante qui permet d'afficher la liste des pods :

Print scr 17: Lister touts les Pods

• Pour avoir plus d'informations :


Kubectl get all
Print scr 18: Plus des détails sur les Pods

d.Sortie d'un conteneur :


• pour affiche que passe-t-il (logs) dans le pod on tape la commande suivante :
Kubectl logs deploy/pingpong

Print scr 19: Voir le log de pod pingpong

a. Pour afficher un pod en particulier : on ajoute l'option -f et le nom complet de pod pour
suivre les logs en direct

Print scr 20 :affiche les logs de Pod spécifié

e.Mise à l'échelle :
Pour lancer 8 pings en parallèle on modifier la tâche de déploiement comme ce suit :
Kubectl scale deploy/pingpong –replicas 8

Print scr 21 : création des réplicas

b. Kubernetes duplique le pod existant


Print scr 22 : Les pods dupliqués

c. Si on essaye de tue un pod avec la commande suivante :


kubectl delete pod pingpong-58558f7d47-zc62j

le pod se recrée une nouvelle fois


d. pour supprimer complètement le pod :
kubectl delete deploy/pingpong

Print scr 23 : Le pod est supprimé

f.Exposer le conteneur :
Pour tester l'exposition on a déployé l'image youp0m avec la commande suivante :
kubectl create deployment youp0m --image=nemunaire/youp0m

e. commençons par créer un service ClusterIP :


kubectl expose deployment youp0m –port 8080

Print scr 24 : exposition de pod sur le port 8080

Alors un nouveau service de type Cluster IP est lancée, on vérifie la tache par la commande
suivantes :

Print scr 25 : afficher les services de cluser

g.Cookies dans Kube


f. Déploiement d'un registre Docker :
Kubectl create deployment registry –image=registry

Print scr 26 déploiement de l'image de registre

kubectl expose deploy/registry --port=5000 --type=NodePort


Print scr 27: exposer le registre local

g. Pour tester la création de registre ,on va créer deux variables d'environnement :


NODEPORT qui stockera le port de service registre et le variable REGISTRY qui sera
notre registre local.
NODEPORT=$(kubectl get svc/registry -o json | jq .spec.port[0].nodePort)

h. Verification :

Print scr 28 : Vérifier la valeur de NODEPORT

REGISTRY=127.0.0.1/:$NODEPORT

i. Télécharger l'image busybox


Docker pull busybox

j. Créer un tag pour l'image


Docker tag busybox $REGISTRY/busybox

k. Stocker l'image dans notre registre local


Docker push $REGISTRY/busybox

l. Deployer l'image chronograf


kubectl create deployment chronograf --image=chronograf

Print scr 29 : afficher les Pods créer – l'image est bien déployée

Partie 4 : Lançons les images standards


a. déployer influxdp à partir d'un fichier yaml :
kubectl apply -f https://virli.nemunai.re/influxdb.yaml

Print scr 30 : afficher les Pods crées - l'image est bien déployé à partir de le fichier yaml

b. Notre Application:
Créer trois services hasher , rng et worker avec les commandes suivantes:
TAG=v0.1
kubectl create deployment hasher –image=nemunaire/hasher:$TAG
kubectl create deployment rng –image=nemunaire/rng:$TAG
Kubectl create deployment worker –image=nemunaire/worker:$TAG

Print scr 31 : Les pods sont bien crées

c. Exposition des Pods :


kubectl expose deployment influxdb --port 8086

Print scr 32 : exposition de influxdb sur le port 8086

Print scr 33 : exposé le pod rng sur le port 80

Print scr 34 : exposé le pod rng hasher le port 80

d. Exposé chronograf sur le port 30001


kubectl create service nodeport chronograf --tcp=8888 --node-port=30001

Print scr 35 : le service est assigné au port 30001

e. Accès Web :
A partir de l'interface web on peut accéder au chronograf interface on tapant l'adresse IP de worker
chargé d'exécuter le pod chronograf dans notre exemple l'adresse ip de kind-worker2 est 172.18.0.3
avec le port 30001.
f. Répliquer Les Pods et augmenter la charger :
kubectl scale deploy/worker --replicas=4

Print scr 36 : création de 4 réplication à partir worker

Print scr 37 : les quatre réplication sont crées

g. création de Daemon sets :


• On a créé un daemon depuis le fichier daemonset. yaml :
kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml

Print scr 38 : la commande pour déployer l'image

h. Daemonset rng :
On export la configuration existante pour réaliser un Daemonset de pod rng
kubectl get deploy/rng -o yaml --export >rng.yml

Print scr 39 : extrait de fichier rng.yml


• Dans le fichier rng.yml on modifier le type décrit dans le champ kind en Daemonset
• Après on exécute la commande suivante pour créer le daemonset pour rng pod

i. Kubernetes Dashboard
On peut vérifier aussi la création des Pods, réplicas et daemon ..etc à partir de l'interface
Web

Print scr 40 : Kubernetes Dashboard

j. Afficher les daemons

Print scr 41 : List des Daemonsets

k. Trop de pods :
On aperçoit l'exécution de plusieurs Pods sachant que j'ai créé 4 réplicas de worker

Print scr 42 : Liste des Pods rng crées


l. les pépites

Print scr 43 : les pépites Chronograf après d'augmenter le nombre des réplicas

Conclusion :
C'était un TP très riche au niveau d'informations et de nouveautés c'était ma
première occasion d'affronter le fameux kubernetes et connaitre plusieurs notions
comme pod, control plan ,worker et cluster ..etc.
les questions que je pose actuellement sont :
1. Est-il possible de migrer tout le cluster avec ses pods et services et toutes sa
configuration vers une autre machine .
2. Comment le cluster manager distribué les ressources matérielles au nodes,
est-il possible d'élaboré une politique de quota pour chaque node et pod
3. Comment mettre en place le cluster en utilisant des machines réelles
comme workers.

Vous aimerez peut-être aussi