3. Agenda
• Petit rappel de Docker
• Problématique lié à Docker
• Qu’est-ce qu’un orchestrateur de containeur
• Présentation de Kubernetes
• Élément d’un cluster
• Principaux objets dans Kubernetes
• Outils pratiques
4. Petit rappel de Docker
• Permet de créer, gérer et exécuter des images et des containeurs
• Basé sur une structure client <> serveur
• Ne gère que les images et containeurs sur le quel le serveur Docker s’exécute
Docker
client
Docker
server
containerd
runc Containeur
runc Containeur
runc Containeur
REST call gRPC call
5. Problématiques
•Que se passe t’il si le serveur devient indisponible ?
•Que faire quand le serveur manque de ressources ?
Un seul serveur
•Gestion des pannes
•Gestion des mises à jour
•Gestion de la haute disponibilité
•Gestion de la charge et des ressources
Gestion des containeurs
•Comment les services se découvrent ?
•Comment les services se parlent entre eux ?
Gestion réseau
6. Qu’est-ce qu’un orchestrateur de containeur ?
• Déploiement
• Déployer le bon nombre de
containeurs demandé
• Gérer le nombre de containeurs
pouvant être indisponible
• Arrêter le déploiement en cas
d’erreur
• Possibilité de revenir en arrière
• Gérer les ressources disponibles et
allouable par containeurs
• Réseau
• Permettre aux containeurs de
communiquer entre eux
• Permettre aux containeurs de se
découvrir (service discovery) par
nom plutôt que par IP
• Gérer l’équilibrage de charge entre
les containeurs
• Pouvoir exposer des containeurs
sur le réseau externe
7. Qu’est-ce qu’un orchestrateur de containeur ?
• Stockage
• Permettre de donner accès aux
volumes aux containeurs
• Abstraire le stockage réel
• Stockage pouvant être local ou
distant
• Scalability
• Augmenter ou réduire le nombre de
containeur pour une app suivant
différents critères
• Augmenter ou réduire le nombre
d’hôte pour répondre à la demande
• Haute disponibilité
• Gérer les pannes d’un containeur
• Gérer les pannes d’un hôte
• Vérifie l’état fonctionnel des
containeurs suivant nos règles
• Monitoring
• Exposer des métriques standards
pour les containeurs et les hôtes
• Exposer les logs des containeurs de
manière standards
8. Kubernetes
• Projet open source initié par Google
• Donnée à la CNCF en 2014
• Veut dire Capitaine en grec
• Abrégé en k8s (K……..S)
• Orchestrateur de container
• Alternative: Nomad, Mesos
• Système déclaratif et impératif
• Déclaratif: On défini un état voulu et on laisse k8s le
gérer
• Impératif: On peut créer, modifier, supprimer un objet
manuellement
12. Élément
d’un cluster
• Master
• Nommé Control Plane
• Responsable de la gestion du
cluster
• Possibilité d’en avoir
plusieurs
• Workers
• Contiennent les containeurs
du cluster
• Peuvent être regroupé en
plusieurs pools
• Utilisent un container
runtime
13. Master
node
• API Server
• Expose l’API de Kubernetes aux clients et
aux nodes
• Controller Manager
• Node Controller
• Job Controller
• Endpoint controller
• Service Account & Token controller
• Scheduler
• Assigne les pods aux nodes
• etcd
• Key-Value store utilisé pour stocker les
données de Kubernetes
14. Worker
node
• Kube-Proxy
• Maintient les règles réseau
• Règles permettant la communication intra et
extra cluster
• Délègue la gestion des paquets à l’OS
(iptables/vips) quand c’est possible
• Kubelet
• Gère les containeurs créés par Kubernetes
• S’assure de leurs états de santé
• Container Runtime
• Responsable de l’exécution des containeurs
• Peut être containerd, cri-o, rktlet, …
15. Principaux
objets dans
Kubernetes
Pod Représentation d’une application
ReplicaSet Regroupement de Pod identique
Deployment Représentation de l’état voulu de notre application
Service Mettre les pods sur le réseau
Ingress Rend les services disponibles depuis l’externe
Volumes Stockage persistent pour les pods
Namespace Regroupement logique de ressources
16. Tout est
YAML, tout
est dans les
labels
• Les objets sont écrits en YAML (😍/🤢 au choix)
• Les sélecteurs sont basés sur les labels (key-value)
• Chaque objet appel une API Kubernetes et une
version d’API
• Chaque objet possède un nom et un type
17. Pod
• Objet de référence dans Kubernetes
• Représente une application
• Peut être constitué d’un ou plusieurs
containeurs
• Chaque containeur d’un même pod
doivent utiliser des ports différents
• La communication entre les containeurs
d’un même pod utilise localhost
• Chaque pod possède un nom et une IP
unique
18. Pod
API et version à utiliser
Type d’objet
Liste de labels
Spec de l’objet
ici, une liste de containers
19. Replica Set
• Maintient un ensemble stable de Pod à un moment donné
• Possède le nombre de Pod voulue (déclaratif)
• Pour atteindre son objectif, il va supprimer ou créer des Pods
• Le nombre de pod peut être 0
20. Deployment
• Représente notre application
• Responsable des pods qu’il gère indirectement
• Créer des ReplicaSet pour déployer une version de l’application
• Déploie selon 2 modes:
• Rolling Update
• Réduit la taille du ReplicaSet existant
• Créer un nouveau ReplicaSet pour la nouvelle version
• Scale le nouveau / downscale l’ancien pour avoir toujours au moins
un Pod disponible
• Recreate
• L’ancien ReplicaSet sera mis à 0 avant de créer le nouveau
• Possibilité de revenir en arrière (rollback)
• Utilisé pour des services Stateless
Deployment
ReplicaSet ReplicaSet
Deployment
ReplicaSet ReplicaSet
Deployment
ReplicaSet ReplicaSet
22. Autre objet pour déployer des Pods
• StatefulSet
• Comme un déploiement mais pour les services ayant besoin d’un stockage persistant
ou de nom fixe
• DaemonSet
• Déploie l’application sur tous les noeuds
• CronJob
• Exécute un pod suivant une fréquence écrite comme les cronjobs
23. Service
• Abstraction d’un groupe de Pod
• Map un port du service vers un ou port d’un pod
• Peut mapper plus d’un port
• Peut mapper un service hors Kubernetes
• Un service possède un enregistrement DNS (mon-service, mon-service.namespace)
• Différent type de service:
• ClusterIP: expose le service avec une IP interne au cluster, type par défaut
• NodePort: expose le service sur l’IP de chaque node du cluster, sur un port static, rendant le service
disponible à l’extérieur du cluster
• LoadBalancer: expose le service à l’extérieur du cluster à l’aide d’un load balanceur de la plateforme
cloud
25. Ingress
• Expose des services à l’extérieur du cluster
• Le routage du traffic est controllé par des règles
• Basé sur le path, le domaine, etc
• Peut gérer la terminaison SSL
26. Ingress: exemple
Gestion du certificat SSL via Let’s Encrypt
Redirection http -> https
Terminaison SSL
Règle de routage
27. Volumes
• Un containeur ne possède qu’un stockage
éphémère
• Pour persister des fichiers, Docker possède la
notion de Volume
• Kubernetes pousse le concept plus loin
• Représente un dossier pour un/des containeur(s)
d’un pod
• Possibilité de monter un même volume dans
plusieurs pods
29. Volumes: Persistent Volume
• Peut être provisionné statiquement:
• Les volumes doivent être créé à l’avance par un
administrateur
• Ou dynamiquement:
• Si la demande (PVC) n’en trouve pas de libre, il demande au
Storage Class de lui en fournir un
• Une fois le PV créé ou si un est disponible, il sera attaché au
pod le demandant
Persistent Volume
(PV)
Storage Class (SC)
Persistent Volume
Claim (PVC)
Attention !
Le PV possède une propriété qui va déterminer ce qu’il se passe une fois le PVC supprimé:
- Doit-il se supprimer ?
- Doit-il continuer d’exister ?
Le Storage Class peut en définir une par défaut, sinon, par défaut, K8S supprimera le volume
30. Namespace
• Regroupement de ressource Kubernetes
• Par projet
• Par équipe
• Par environnement
• (Presque) tous les objets sont attachés à un namespace
• Supprimer un namespace supprime tous les objets dans le namespace
31. Outils pratiques
• kubectl (https://kubernetes.io/docs/reference/kubectl/)
• Ligne de commande de Kubernetes
• (https://infra.app)
• Application desktop pour visualiser un ou plusieurs cluster kubernetes
• Permet de modifier des objets du cluster mais pas d’en créer
• Made in Canada
• Lens (https://k8slens.dev)
• IDE pour Kubernetes
• (http://helm.sh)
• Packager des applications complexes et les partager