Démystifions le fonctionnement interne de Kubernetes

~$ whoami

Denis GERMAIN

@zwindler(@framapiaf.org)

#geek 👨‍💻 #SF 🤖👽 #courseAPied 🏃‍♂️


*Les slides de ce talk sont sur le blog

Démystifions le fonctionnement interne de Kubernetes

Petites questions 🚨

C'est quoi, un container ?

C'est une boite !

  • Processus (ou logiciel)
  • Exécuté par un "runtime"
  • Isolé des autres processus de l'hôte
  • Pas forcément !
    (microVMs, container , WASM ...)

C'est quoi, Kubernetes ?

  • Orchestrateur de containers
  • Inspiré par un outil interne de Google
  • Open sourcé et donné à la CNCF en 2015
  • A gagné la "guerre des orchestrateurs"
    • Docker swarm
    • Mesos Marathon

Pourquoi Kubernetes

(et pourquoi ce talk ) ?

  • C'est ✨ auto-magique ✨ 🤩 (non)
  • Gérer l'infra avec des APIs et du code YAML
  • Avantages selon ChatGPT 🤖
    • Haute disponibilité native
    • Gestion du cycle de vie des applications et de leur mise à l'échelle
    • Extensibilité

Quelques notions

Node ou Worker : Serveur informatique qui héberge les Pods

Pod : Unité de compute Kubernetes. Ensemble de containers qui partagent une IP et des volumes.

Déployer une application

3 APIs :

Et en YAML, ça donne quoi ?

Super ! Mais comment ça marche,

sous le capot 🚗 ?

But du jeu

  • Déployer ce support HTML à l'aide de manifests YAML
  • Déployer Kubernetes 1.27.0, binaire par binaire


github.com/zwindler/demystifions-kubernetes

API server

  • Centralise les APIs disponibles (extensible)
  • Abstractions de l'infra

etcd

  • Base de données clé/valeur
  • Distribuée / fault-tolerant (raft)

It's time to D-D-D-D-D-DEMO !

center

"C'est bien, mais pas suffisant."

Controller Manager

Les controllers sont des boucles de contrôles :

  • Abonnement à des événements
  • Actions en conséquences

center

Quelques controllers

Mais aussi :

  • CRDs / operators
  • Fournisseurs de stockage (CSI)

Ajoutons un controller-manager

center

Scheduler

Où positionner un nouveau Pod en fonction de contraintes :

  • Réservations CPUs & RAM / Affinité & anti-affinité / nodeSelector / taints &toleration (doc officielle)

center

Ajoutons un scheduler

center

Le control plane est OK

Mais on a toujours pas de Nodes !

kubelet

  • Envoie/réception des informations sur le Node
  • Pilotage du container runtime
    • ajout/suppression de Pods
    • surveillance de l'état de santé des Pods

Documentation officielle - kubelet

Container runtime

Pour exécuter le(s) container(s) du Pod, il faut un container runtime

Historiquement,
(dockershim plus supporté depuis Kubernetes 1.24)

Souvent containerd, mais il y a plein d'alternatives !

Réseau interne

On utilise iptables, ipvs, ou eBPF pour simuler le réseau (virtuel)

center

Cette IP n'existe pas, Néo

CNI plugin

  • Container Network Interface
  • Réseau interne de Kubernetes
  • CNI plugins = implém. du CNI

kube-proxy (optionnel)

Gérer les règles iptables dynamiques pour router le traffic depuis les Services vers les Pods qui sont vivants

center

On ajoute ce qu'il manque

center

IngressController

Router des requêtes HTTP(S)

  • l'IngressController est un logiciel tiers qui gère des Ingress

Note: Ingress API en cours de remplacement par la Gateway API (plus puissante et plus agnostique)

Fin de la démo

center

Au final, , c'est juste

  • un serveur d'API
  • un ordonnanceur
  • des boucles de contrôles
  • un container runtime
  • un réseau virtuel

@zwindler(@framapiaf.org)

Slides et sources sur blog.zwindler.fr/conférences

Sources

Dépôts / articles

Talks / conférences sur le même sujet