Formation Kubernetes

Orchestration de conteneurs - Installation et concepts fondamentaux

Qu'est-ce que Kubernetes ?

Kubernetes (souvent abrégé en K8s) est une plateforme open-source d'orchestration de conteneurs, initialement développée par Google et maintenant maintenue par la Cloud Native Computing Foundation (CNCF).

Kubernetes automatise le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il gère des groupes d'hôtes exécutant des conteneurs Linux et permet de gérer facilement les applications dans des environnements physiques, virtuels ou cloud.

Pourquoi Kubernetes ?

Kubernetes est devenu la norme pour l'orchestration de conteneurs car il résout de nombreux problèmes liés à l'exécution d'applications conteneurisées à grande échelle.

Orchestration automatique

Automatise le déploiement, le redimensionnement et la gestion des applications conteneurisées.

Haute disponibilité

Assure que vos applications sont toujours opérationnelles, même en cas de défaillance des nœuds.

Mise à l'échelle facile

Scale horizontalement vos applications en fonction de la charge, manuellement ou automatiquement.

Portabilité

Fonctionne sur plusieurs environnements (cloud, on-premise, hybride) sans changer votre application.

Architecture de Kubernetes

Kubernetes fonctionne avec une architecture maître-esclave (master-node) :

Nœud Maître (Master)

Gère le cluster Kubernetes et prend les décisions globales (planification, détection et réponse aux événements).

  • API Server: Point d'entrée du cluster
  • Etcd: Base de données clé-valeur pour le stockage des données du cluster
  • Scheduler: Attribue les pods aux nœuds
  • Controller Manager: Régule l'état du cluster

Nœuds de Travail (Worker Nodes)

Exécutent les applications et les charges de travail. Chaque nœud contient :

  • Kubelet: Agent qui communique avec le maître
  • Kube-proxy: Gère les règles réseau
  • Runtime de conteneur: Docker, containerd, etc.
  • Pods: Unités déployables minimales de Kubernetes

Installation de Kubernetes sur Debian/Ubuntu

Cette section explique comment installer Kubernetes sur des systèmes Debian ou Ubuntu. Nous utiliserons kubeadm, l'outil recommandé pour créer des clusters Kubernetes.

Debian
Ubuntu

Prérequis pour Debian

  • Une machine avec au moins 2 Go de RAM (recommandé: 4 Go)
  • 2 CPU ou plus
  • Connexion réseau fonctionnelle
  • Swap désactivé (Kubernetes ne fonctionne pas bien avec swap activé)
  • Docker ou un autre runtime de conteneur compatible
1

Préparation du système

Mettez à jour votre système et installez les paquets nécessaires :

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
2

Désactiver le swap

sudo swapoff -a
# Pour désactiver le swap de manière permanente, commentez la ligne swap dans /etc/fstab
sudo sed -i '/ swap / s/^/#/' /etc/fstab
3

Installer Docker

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker && sudo systemctl start docker

Prérequis pour Ubuntu

  • Une machine avec au moins 2 Go de RAM (recommandé: 4 Go)
  • 2 CPU ou plus
  • Connexion réseau fonctionnelle
  • Swap désactivé (Kubernetes ne fonctionne pas bien avec swap activé)
  • Docker ou un autre runtime de conteneur compatible
1

Préparation du système

Mettez à jour votre système et installez les paquets nécessaires :

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl
2

Désactiver le swap

sudo swapoff -a
# Pour désactiver le swap de manière permanente, commentez la ligne swap dans /etc/fstab
sudo sed -i '/ swap / s/^/#/' /etc/fstab
3

Installer Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker && sudo systemctl start docker
4

Installer kubeadm, kubelet et kubectl

Ajoutez le dépôt Kubernetes et installez les outils nécessaires :

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# apt-mark hold empêche la mise à jour automatique de ces paquets
5

Initialiser le cluster Kubernetes

Sur le nœud maître, initialisez le cluster :

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# Note: L'adresse réseau peut varier selon le réseau de pods choisi

À la fin de l'initialisation, vous verrez des commandes pour configurer kubectl et rejoindre des nœuds au cluster.

6

Configurer kubectl

Exécutez ces commandes en tant qu'utilisateur normal (non root) :

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7

Installer un réseau de pods

Pour que les pods puissent communiquer entre eux, installez un plugin réseau comme Flannel :

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
8

Vérifier l'installation

Vérifiez que tous les pods du système sont en cours d'exécution :

kubectl get pods --all-namespaces

Vérifiez l'état des nœuds :

kubectl get nodes

Commandes Kubernetes essentielles

# Afficher les nœuds du cluster
kubectl get nodes

# Afficher les pods dans tous les namespaces
kubectl get pods --all-namespaces

# Créer un déploiement
kubectl create deployment nginx --image=nginx

# Exposer un déploiement en tant que service
kubectl expose deployment nginx --port=80 --type=NodePort

# Afficher les services
kubectl get services

# Afficher les logs d'un pod
kubectl logs <nom-du-pod>

# Exécuter une commande dans un pod
kubectl exec -it <nom-du-pod> -- /bin/bash

Ressources supplémentaires