Kubernetes

Kubernetes (ou K8s) est un système open-source conçu pour automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il a été initialement développé par Google et est maintenant maintenu par la Cloud Native Computing Foundation (CNCF).

Kubernetes

Introduction Ă  Kubernetes

Kubernetes (ou K8s) est un système open-source conçu pour automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il a été initialement développé par Google et est maintenant maintenu par la Cloud Native Computing Foundation (CNCF).

Pourquoi utiliser Kubernetes ?

  • Automatisation du dĂ©ploiement et de la gestion : Kubernetes permet d'automatiser le dĂ©ploiement et la mise Ă  jour des applications.
  • Mise Ă  l'Ă©chelle facile : Il permet de faire Ă©voluer dynamiquement les applications en fonction de la charge.
  • TolĂ©rance aux pannes : Kubernetes redĂ©marre automatiquement les conteneurs qui tombent en panne.
  • PortabilitĂ© et flexibilitĂ© : Kubernetes fonctionne sur divers environnements (on-premise, cloud, hybride).

Architecture de Kubernetes

Composants principaux

1. Le cluster Kubernetes

Un cluster Kubernetes est composé de plusieurs machines (nœuds) qui exécutent les conteneurs. Il se divise en deux parties :

  • Le plan de contrĂ´le (Control Plane) : Gère l’ensemble du cluster.
  • Les nĹ“uds (Nodes) : ExĂ©cutent les applications conteneurisĂ©es.

2. Le Control Plane

  • API Server : Interface RESTful permettant aux utilisateurs et aux composants d'interagir avec Kubernetes.
  • Etcd : Base de donnĂ©es distribuĂ©e stockant l’état du cluster.
  • Scheduler : Planifie l’exĂ©cution des Pods sur les nĹ“uds.
  • Controller Manager : Gère les diffĂ©rents contrĂ´leurs du cluster (ReplicaSet, Node Controller, etc.).
  • Cloud Controller Manager : Interagit avec les fournisseurs cloud (si applicable).

3. Les nœuds (Nodes)

Chaque nœud contient :

  • Kubelet : Agent assurant l’exĂ©cution correcte des conteneurs sur un nĹ“ud.
  • Container Runtime : Moteur d’exĂ©cution des conteneurs (Docker, containerd, CRI-O).
  • Kube Proxy : Assure la communication rĂ©seau entre les Pods et les services.

Concepts fondamentaux

1. Pod

Un Pod est l’unité de base de Kubernetes. Il peut contenir un ou plusieurs conteneurs partageant le même réseau et stockage.

2. Service

Un Service expose un groupe de Pods Ă  travers un endpoint stable, permettant la communication interne et externe.

3. Deployment

Un Deployment gère le déploiement et la mise à jour des Pods, garantissant la haute disponibilité et la résilience des applications.

4. ReplicaSet

Un ReplicaSet garantit qu'un nombre défini de copies identiques d'un Pod sont toujours en cours d'exécution.

5. ConfigMap et Secret

  • ConfigMap : Stocke des configurations sous forme de paires clĂ©-valeur.
  • Secret : Similaire Ă  ConfigMap, mais utilisĂ© pour stocker des donnĂ©es sensibles (mots de passe, clĂ©s API, etc.).

6. Ingress

Un Ingress permet d’exposer des applications HTTP et HTTPS avec un contrôle avancé du routage.

7. Namespace

Les Namespaces permettent d’isoler des groupes de ressources au sein d’un même cluster.

Déploiement d’une application sur Kubernetes

Étape 1 : Créer un fichier YAML pour un Pod

apiVersion: v1 kind: Pod metadata: name: mon-pod spec: containers: - name: mon-container image: nginx ports: - containerPort: 80

Déployer avec :

kubectl apply -f mon-pod.yaml

Étape 2 : Déployer un Deployment

apiVersion: apps/v1 kind: Deployment metadata: name: mon-deployment spec: replicas: 3 selector: matchLabels: app: mon-app template: metadata: labels: app: mon-app spec: containers: - name: mon-container image: nginx ports: - containerPort: 80

Déployer avec :

kubectl apply -f mon-deployment.yaml

Étape 3 : Exposer avec un Service

apiVersion: v1 kind: Service metadata: name: mon-service spec: selector: app: mon-app ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer

Déployer avec :

kubectl apply -f mon-service.yaml

Gestion et surveillance du cluster

Vérifier les ressources

kubectl get pods kubectl get services kubectl get deployments

Afficher les logs d’un Pod

kubectl logs mon-pod

Accéder à un conteneur en mode interactif

kubectl exec -it mon-pod -- /bin/bash

Mise à l'échelle et mises à jour

Mise à l’échelle automatique

kubectl scale deployment mon-deployment --replicas=5

Mise à jour d’une application

spec: template: spec: containers: - name: mon-container image: nginx:1.21

Appliquer avec :

kubectl apply -f mon-deployment.yaml

En résumé

Kubernetes est un outil puissant pour gérer les applications conteneurisées de manière automatisée, scalable et résiliente. Il permet de simplifier le déploiement, la mise à l’échelle et la gestion des applications en production.