
Kubernetes pour les débutants : concepts fondamentaux
Kubernetes pour les débutants : concepts fondamentaux
Kubernetes (souvent abrégé K8s) est devenu le standard de facto pour l’orchestration de conteneurs. Mais pour les débutants, il peut sembler complexe et intimidant. Dans cet article, nous allons démystifier Kubernetes en expliquant ses concepts fondamentaux de manière simple et accessible.
Qu’est-ce que Kubernetes ?
Kubernetes est une plateforme open-source d’orchestration de conteneurs initialement développée par Google. Elle permet d’automatiser le déploiement, la mise à l’échelle et la gestion des applications conteneurisées.
En d’autres termes, Kubernetes vous aide à :
- Déployer vos applications conteneurisées
- Mettre à l’échelle automatiquement vos applications en fonction de la demande
- Gérer la santé de vos applications et redémarrer celles qui échouent
- Équilibrer la charge entre différentes instances de vos applications
Architecture de Kubernetes
Un cluster Kubernetes se compose de deux types principaux de composants :
Le plan de contrôle (Control Plane)
Le plan de contrôle est le cerveau de Kubernetes. Il comprend plusieurs composants :
- API Server : Point d’entrée pour toutes les commandes REST
- etcd : Base de données clé-valeur qui stocke toutes les données du cluster
- Scheduler : Décide sur quels nœuds exécuter les pods
- Controller Manager : Surveille l’état du cluster et réagit aux changements
Les nœuds (Nodes)
Les nœuds sont les machines (physiques ou virtuelles) qui exécutent vos applications. Chaque nœud exécute :
- Kubelet : Agent qui s’assure que les conteneurs fonctionnent dans un pod
- Kube-proxy : Gère le réseau et les communications
- Container Runtime : Logiciel qui exécute les conteneurs (Docker, containerd, etc.)
Concepts clés de Kubernetes
Pods
Le pod est l’unité de base de Kubernetes. C’est un groupe d’un ou plusieurs conteneurs qui partagent du stockage et des ressources réseau. Les pods sont éphémères - ils peuvent être créés, détruits et recréés à tout moment.
apiVersion: v1
kind: Pod
metadata:
name: mon-pod
spec:
containers:
- name: mon-conteneur
image: nginx:latest
ports:
- containerPort: 80
Deployments
Les deployments sont un niveau d’abstraction au-dessus des pods. Ils permettent de :
- Déclarer l’état souhaité de vos pods
- Mettre à jour les pods de manière contrôlée
- Revenir à des versions précédentes (rollback)
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-conteneur
image: nginx:latest
ports:
- containerPort: 80
Services
Les services sont des abstractions qui définissent un ensemble logique de pods et une politique pour y accéder. Ils permettent de découpler les pods des services qui les utilisent.
apiVersion: ```yaml
apiVersion: v1
kind: Service
metadata:
name: mon-service
spec:
selector:
app: mon-app
ports:
- port: 80
targetPort: 80
type: ClusterIP
Namespaces
Les namespaces permettent de diviser un cluster Kubernetes en plusieurs clusters virtuels. Ils sont utiles pour séparer les environnements (dev, test, prod) ou les équipes.
apiVersion: v1
kind: Namespace
metadata:
name: mon-namespace
ConfigMaps et Secrets
- ConfigMaps : Stockent des données de configuration non sensibles
- Secrets : Stockent des données sensibles comme les mots de passe et les tokens
Premiers pas avec Kubernetes
Installation d’un cluster local
Pour commencer avec Kubernetes, vous pouvez installer un cluster local avec :
- Minikube : Crée un cluster Kubernetes à nœud unique sur votre machine
- kind (Kubernetes IN Docker) : Exécute des nœuds Kubernetes dans des conteneurs Docker
- k3s : Distribution Kubernetes légère pour les environnements à ressources limitées
Commandes kubectl essentielles
kubectl
est l’outil en ligne de commande pour interagir avec Kubernetes. Voici quelques commandes essentielles :
# Afficher les nœuds du cluster
kubectl get nodes
# Créer des ressources à partir d'un fichier YAML
kubectl apply -f mon-fichier.yaml
# Afficher les pods
kubectl get pods
# Afficher les logs d'un pod
kubectl logs mon-pod
# Exécuter une commande dans un pod
kubectl exec -it mon-pod -- /bin/bash
# Supprimer une ressource
kubectl delete pod mon-pod
Cas d’usage courants
Déploiement d’une application web
Voici un exemple simple de déploiement d’une application web avec Kubernetes :
- Créer un deployment pour l’application
- Créer un service pour exposer l’application
- Configurer un ingress pour gérer le trafic externe
Mise à l’échelle automatique
Kubernetes peut automatiquement ajuster le nombre de pods en fonction de la charge :
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: mon-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: mon-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Conclusion
Kubernetes est un outil puissant qui peut sembler complexe au premier abord, mais qui devient plus accessible une fois que vous comprenez ses concepts fondamentaux. En maîtrisant les pods, les deployments, les services et les autres ressources de base, vous serez en mesure de déployer et gérer efficacement vos applications conteneurisées.
Chez Whims, nous proposons des formations et des services de conseil pour vous aider à adopter Kubernetes et à tirer le meilleur parti de cette technologie. N’hésitez pas à nous contacter pour en savoir plus !
Vous avez aimé cet article ?
Découvrez d'autres contenus similaires