Une introduction rapide à Kubernetes

Historique

Kubernetes aussi appelé k8s (un “k” suivi de 8 caractères et d’un “s”) ou simplement kube signifie “Timonier” en grec. C’est un orchestrateur de conteneurs inspiré du système Google Borg qui orchestrait des milliards de conteneurs sur l’infrastructure de Google.

La version v1.0.0 de Kubernetes a été publiée en juillet 2015, la dernière version à ce jour (août 2025) est la v1.34.0. Le cycle de release est assez rapide avec 3 versions mineures par an.

Fonctionnalités principales

Kubernetes est un orchestrateur de conteneurs offrant des fonctionnalités principales, telles que :

  • Gestion des applications s’exécutant dans des conteneurs
  • Self-healing
  • Service discovery
  • Utilisation de Secrets et de Configurations
  • Long-running process et batch
  • Contrôle d’accès basé sur les rôles (RBAC)
  • Orchestration du stockage

Projet majeur dans l’écosystème open-source

Kubernetes est le premier projet gradué au sein de la CNCF, il a été suivi par des acteurs majeurs comme etcd et Prometheus

CNCF

De quoi est composé un cluster Kubernetes ?

Un cluster Kubernetes est composé de Nodes, où un Node est soit une machine virtuelle soit un serveur bare metal. Un Node peut appartenir au Control Plane, qui exécute les processus chargés de gérer le cluster et les applications qui s’y exécutent. Ou, un Node peut être un Worker dédié à l’exécution de Pods, un groupe de conteneurs partageant une stack réseau et du stockage.

cluster

Comment accéder à un cluster

Un cluster est généralement fourni avec un fichier kubeconfig qui contient toutes les informations nécessaires pour communiquer avec l’API Server du cluster. Ce fichier peut être utilisé pour configurer le binaire kubectl standard pour gérer le cluster. Le fichier kubeconfig peut également être utilisé avec des outils comme k9s, Mirantis Lens, … qui donnent une vue de plus haut niveau du cluster.

access

Diverses ressources de charge de travail pour différents cas d’usage

Pour exécuter un Pod, nous nous appuyons souvent sur une ressource de niveau supérieur, au lieu de l’exécuter directement. Les ressources de charge de travail (workload) sont les suivantes:

  • Deployment : permet de déployer des application comme des serveurs web, api, …
  • DaemonSet : permet de lancer un process (on parle d’agent) sur chaque Node du cluster
  • Job / CronJob : permet de lancer des job de type batch
  • StatefulSet : est utilisé pour la gestion d’application avec état, comme une base de données

workload resources

Une requête qui atteint un Service est répartie entre les Pods exposés

service

Un Pod peut utiliser plusieurs ressources

  • ConfigMap : contient des données de configuration
  • Secret : contient des données sensibles
  • PersistentVolumeClaim / PersistentVolume : gestion du stockage

pod resources

Plusieurs types de ressources

Le schema ci-dessous liste les principales resources utilisées pour déployer des applications dans Kubernetes. Il existe de nombreuses autres resources, un cluster Kubernetes de base en compte souvent plus de 100 (cela dépend des composants installés).

Summary

Une application s’exécute dans un Namespace

Lorsque l’on déploie une application dans Kubernetes, celle-ci réside dans un Namespace, c’est une isolation logique (les communications entre les namespaces n’est pas interdite par défaut) qui permet notamment d’organiser les différentes resources.

Namespace

Exposition d’une application

Afin qu’une application soit accessible depuis l’extérieur du cluster, on utilise un Ingress Controller, que l’on configure avec des resources de type Ingress.

Ingress

Création de ressources

Chaque ressource est définie dans une spécification YAML qui est envoyée au serveur API en utilisant le binaire kubectl.

apiVersion: v1
kind: Pod
metadata:
  name: www
spec:
  containers:
  - name: www
    image: nginx:1.24
kubectl apply -f www.yaml

Mise en pratique

Afin de pratiquer les bases de Kubernetes, vous allez tout d’abord installer kubectl sur votre machine locale, puis créer un cluster, et enfin déployer la VotingApp sur celui-ci.