Slide 1

Slide 1 text

A la découverte de Kubernetes Introduction à Kubernetes et son utilisation

Slide 2

Slide 2 text

Qui suis-je ? • Julien Maitrehenry • DevOps, Cloud Architect, Développeur • Co-fondateur, CEO @Kumojin • Kumojin.com • Github.com/jmaitrehenry • jmaitrehenry.ca

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Variant de Kubernetes: Vanille Minikube

Slide 10

Slide 10 text

Variant de Kubernetes: Cloud Azure AKS Scaleway Kapsule AWS EKS Google GKE

Slide 11

Slide 11 text

Variant de Kubernetes: autres Rancher

Slide 12

Slide 12 text

É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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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, …

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Pod API et version à utiliser Type d’objet Liste de labels Spec de l’objet ici, une liste de containers

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Deployment Nombre de pod voulu Définition du ReplicaSet / Pods

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Service Type de service Port mappé Pod(s) sélectionné(s)

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Ingress: exemple Gestion du certificat SSL via Let’s Encrypt Redirection http -> https Terminaison SSL Règle de routage

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Volumes Persistent Volume Storage Class Persistent Volume Claim Persistent Volume (PV) •Représente le volume Persistent Volume Claim (PVC) •Représente une demande pour un PV Storage Class (SC) •Fournit dynamiquement un PV sur demande •Généralement fournit par le fournisseur cloud

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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