Démystifions le fonctionnement interne de Kubernetes

~$ whoami

Denis Germain 👨‍💻🧙🔥🏃‍♂️

@zwindler(@framapiaf.org)


Pourquoi Kubernetes

(et pourquoi ce talk ) ?

  • Haute disponibilité native
  • Gestion du cycle de vie des applications et de leur mise à l'échelle
  • Gestion de l'infra avec des APIs / du YAML
  • Extensibilité
  • C'est✨ auto-magique ✨ 🤩 (nope )

Comment ça marche,

sous le capot 🚗 ?

But du jeu

  • Déployer un serveur web en V(lang) à l'aide de manifests YAML
  • Déployer Kubernetes 1.31.0-alpha.0 (l'amour du risque), binaire par binaire



github.com/zwindler/demystifions-kubernetes

En YAML, ça donne quoi, un app dans kube ?

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

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

Backup slides

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

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 :

API server

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

etcd

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

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

Promis, il manque plus qu'un bout 🙃

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)

Sources

Dépôts / articles

Talks / conférences sur le même sujet