$30 off During Our Annual Pro Sale. View Details »

A la découverte de Kubernetes

A la découverte de Kubernetes

Julien Maitrehenry

June 10, 2022
Tweet

More Decks by Julien Maitrehenry

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  9. Variant de Kubernetes: Vanille
    Minikube

    View Slide

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

    View Slide

  11. Variant de Kubernetes: autres
    Rancher

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  28. 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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide