Skip to main content

04-Objets fondamentaux de Kubernetes

Objets fondamentaux de Kubernetes

  • Les pods Kubernetes servent à grouper des conteneurs fortement couplés en unités d’application
  • Les déploiements sont une abstraction pour créer ou mettre à jour (ex : scaler) des groupes de pods.
  • Enfin, les services sont des points d’accès réseau qui permettent aux différents workloads (déploiements) de communiquer entre eux et avec l’extérieur.

Au-delà de ces trois éléments, l’écosystème d’objets de Kubernetes est vaste et complexe

Vue d’ensemble

Vue d’ensemble : nature de chaque concept

Concept Définition en une phrase Commande kubectl associée
Cluster Ensemble de machines qui exécutent Kubernetes kubectl cluster-info
Node Une machine faisant partie du cluster kubectl get nodes
Namespace Espace logique pour organiser et isoler les ressources kubectl get namespaces
Pod Plus petite unité qui exécute un ou plusieurs conteneurs kubectl get pods -A
Deployment Contrôleur qui crée, met à jour et maintient les pods kubectl get deployments -A
Service Point d’accès réseau stable vers un groupe de pods kubectl get services -A

Objets de bases à connaître et comprendre !!

Les namespaces

Tous les objets Kubernetes (sauf les objets cluster-scoped) sont rangés dans différents espaces de travail isolés appelés namespaces.

Cette isolation permet 3 choses :

  • Ne voir que ce qui concerne les namespaces auxquels vous avez droit
  • Créer des limites de ressources (CPU, RAM, etc.) sous forme de quotas de ressources pour le namespace
  • Définir des rôles et permissions sur le namespace qui s’appliquent à toutes les ressources à l’intérieur.

Lorsqu’on lit ou crée des objets sans préciser le namespace, ces objets sont liés au namespace default.

Il y a déjà 4 namespaces initiaux (default, kube-system, kube-public, kube-node-lease).

Les Pods

Un Pod est l’élément de base. Il est éphémère et est l’unité d’exécution de base d’une application Kubernetes que vous créez ou déployez. Un Pod représente des process en cours d’exécution dans votre Cluster.

Il peut contenir un ou plusieurs conteneurs qui partagent réseau et stockage selon sa configuration.

Un Pod a un cycle de vie propre :

  • Pending
  • Running
  • Succeeded / Failed
  • CrashLoopBackOff
  • Terminating

Les Deploiments (Deployment)

Un Deployment est la fiche d’instruction de Kubernetes pour gérer et déployer une application. Au lieu d’installer vos conteneurs un par un dans des pod, vous décrivez l’état idéal souhaité et le Deployment s’occupe du reste.

Il définit l’état souhaité (nombre de Pods, quelle image utiliser, stratégie de mise à jour) et s’assure que le cluster l’applique.

Le Deployment crée et gère un ReplicaSet, qui lui-même gère les Pods.

Il a aussi comme rôles clés :

  • Auto-réparation : Si un conteneur plante, il en relance un immédiatement.
  • Mises à jour progressives (Rollout) : Il remplace progressivement les nouvelles versions des pods sans interruption de service.
  • Retour arrière (Rollback) : En cas de bogue sur la V2, il restaure la V1 en une commande.

Les ReplicaSets

C’est un contrôleur Kubernetes qui maintient le nombre de Pods désiré d’une application. Cette configuration est dans le deployment.

Si un Pod disparaît, il en recrée un; s’il y en a trop, il en supprime. C’est la base de la scalabilité horizontale en augmentant ou en réduisant le nombre de Pods pour absorber plus ou moins de charges.

Le ReplicaSet garantit simplement que l’application reste disponible en maintenant le bon nombre de Pods.

Les services

Un Service expose vos Pods sur le réseau derrière une adresse IP stable. Comme les Pods sont recréés à tout moment, c’est le Service qui garantit un point d’accès permanent.

Dans Kubernetes, un service est un objet qui :

  • Fournit un endpoint réseau pour les requêtes à destination de ces pods.
  • Configure une politique permettant d’y accéder depuis l’intérieur du cluster.
  • Il permet aussi aux pods de communiquer entre eux dans une architecture de microservices

Les Services sont de trois types principaux :

  • ClusterIP: expose le service sur une IP interne au cluster. Les autres pods peuvent alors accéder au service de l’intérieur du cluster, mais il n’est pas l’extérieur.

  • NodePort: expose le service depuis l’IP de chacun des nœuds du cluster en ouvrant un port directement sur le nœud, entre 30000 et 32767. Cela permet d’accéder aux pods internes répliqués.

  • LoadBalancer: Surtout utilisé dans un cluster sur un hébergeur cloud, il permet d’exposer le service en externe à l’aide d’un Loadbalancer du fournisseur de cloud. Ce type de service fait que K8S demande un équilibreur de charge externe fourni et géré par le cloud provider.

Ressources de base

Ces ressources permettent de déployer et exposer vos applications.

Pod
Le Pod est l’unité d’exécution de Kubernetes. Il contient un ou plusieurs conteneurs qui partagent réseau et stockage. Les Pods sont éphémères : ne les créez jamais directement en production.

→ Apprendre les Pods Kubernetes

Deployment
Le Deployment gère le cycle de vie de vos Pods : création, scaling, mises à jour progressives. C’est la ressource que vous utiliserez le plus souvent pour déployer des applications sans état.

→ Créer et mettre à jour des Deployments Kubernetes

ReplicaSet
Le ReplicaSet maintient un nombre défini de Pods identiques. En pratique, vous ne le créez jamais directement, le Deployment le gère pour vous.

→ Comprendre les ReplicaSets Kubernetes

Réseau

Ces ressources définissent comment vos applications communiquent entre elles et avec l’extérieur. Maîtriser le réseau est essentiel pour exposer vos services, sécuriser les flux et comprendre le comportement du cluster.

Service
Un Service expose vos Pods sur le réseau derrière une adresse stable. Comme les Pods sont recréés à tout moment, c’est le Service qui garantit un point d’accès permanent.

→ Exposer vos applications avec les Services Kubernetes

Ingress & Ingress Controller
Un Ingress définit des règles d’entrée HTTP/HTTPS pour exposer vos applications vers l’extérieur. Il nécessite un Ingress Controller (Traefik, Nginx, HAProxy) qui applique ces règles et gère le routage, le TLS, les redirections, etc.

→ Gérer l’accès HTTP/HTTPS avec les Ingress Kubernetes

Stockage

Un Pod est éphémère, donc lorsqu’il redémarre, il perd toutes ses données. On a le concept de volumes éphémères pour les données temporaires, et stockage persistant (PV/PVC) pour les données qui doivent survivre aux Pods.

PersistentVolume (PV)
Un PersistentVolume représente un volume de stockage réel dans le cluster : disque local, NFS, Ceph, EBS, etc. Il est provisionné par l’administrateur ou automatiquement via une StorageClass.

StorageClass
Une StorageClass définit le type de stockage à utiliser : SSD, HDD, réseau distribué, cloud provider, etc. Elle permet le provisionnement dynamique : les volumes sont créés automatiquement quand un PVC est demandé.

Volumes éphémères
Certains volumes ne sont pas persistants :

→ Comprendre les volumes sur Kubernetes

Configuration

Ces ressources permettent de configurer vos applications et d’organiser votre cluster.

Namespace
Un Namespace isole un groupe de ressources dans le cluster. Il permet de séparer les environnements (dev, staging, prod) ou les équipes.

→ Comprendre les Namespaces Kubernetes

ConfigMap
Un ConfigMap stocke la configuration non sensible de votre application : URLs, paramètres, fichiers de config. Il permet de séparer la configuration du code.

→ Utiliser les ConfigMaps Kubernetes

Secret
Un Secret stocke les données sensibles : mots de passe, clés d’API, certificats. Un Secret n’est pas chiffré par défaut, seulement encodé en base64 et cet encodage ne constitue pas une protection

→ Stocker des données sensibles avec les Secrets Kubernetes

Ressources avancées

Ces ressources répondent à des besoins spécifiques : applications avec état, agents système et tâches planifiées.

StatefulSet
Un StatefulSet gère des applications avec état : bases de données, systèmes distribués. Contrairement au Deployment, il garantit :

Des identités stables (pods numérotés : mysql-0, mysql-1, mysql-2) Un ordre de démarrage et d’arrêt déterministe Des volumes persistants liés à chaque pod → Déployer des applications avec état : StatefulSets Kubernetes

DaemonSet
Un DaemonSet garantit qu’un Pod tourne sur chaque nœud du cluster. Utilisé pour :

Les agents de monitoring (Prometheus Node Exporter, Datadog) Les collecteurs de logs (Fluentd, Filebeat) Les agents réseau (CNI plugins, kube-proxy) → Exécuter un Pod sur chaque nœud : DaemonSets Kubernetes

Job et CronJob
Un Job exécute une tâche jusqu’à la complétion : migration de base de données, backup, traitement batch. Un CronJob planifie cette exécution de façon récurrente.

→ Exécuter des tâches avec Jobs et CronJobs Kubernetes

Ref: https://blog.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/architecture/ https://kubernetes.io/fr/docs/concepts/architecture/