Chapitre 1.5 - Concepts Fondamentaux
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre ce qu'est un Pod
- Expliquer le rôle d'un Deployment
- Comprendre les Services et leurs types
- Utiliser les Namespaces pour l'organisation
Introduction
Kubernetes utilise plusieurs concepts fondamentaux que vous utiliserez constamment. Ce chapitre présente les plus importants: Pods, Deployments, Services et Namespaces.
Pods: L'Unité Atomique
Définition
Un Pod est la plus petite unité déployable dans Kubernetes.
Caractéristiques d'un Pod
Points clés:
- Un Pod = 1 ou plusieurs conteneurs
- Conteneurs dans un Pod partagent:
- L'adresse IP
- Les volumes
- L'espace de noms réseau
- Les Pods sont éphémères (peuvent être recréés)
Exemple de Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Deployments: Gestion du Cycle de Vie
Définition
Un Deployment décrit l'état désiré de votre application.
Fonctionnalités d'un Deployment
Avantages:
- Gère les réplicas automatiquement
- Rolling updates (sans interruption)
- Rollback en cas de problème
- Auto-guérison
Exemple de Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Services: Exposition des Applications
Définition
Un Service expose un ensemble de Pods comme un service réseau stable.
Problème résolu:
- Les Pods ont des IPs éphémères
- Les Pods peuvent être recréés
- Comment maintenir une adresse stable?
Solution: Le Service fournit une IP stable et un nom DNS
Types de Services
1. ClusterIP (Par défaut)
- Service interne au cluster
- Accessible uniquement depuis le cluster
- Utilise le DNS interne
2. NodePort
- Expose sur un port (30000-32767) de chaque node
- Accessible depuis l'extérieur
- Port unique sur tous les nodes
3. LoadBalancer
- Expose via un load balancer cloud
- IP publique automatique
- Disponible sur AWS, Azure, GCP
Exemple de Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Namespaces: Isolation Logique
Définition
Les Namespaces permettent de diviser un cluster en plusieurs environnements virtuels.
Avantages des Namespaces
Cas d'usage:
- Séparer dev/staging/prod
- Isoler les équipes
- Gérer les quotas de ressources
- Appliquer des politiques de sécurité
Namespaces par Défaut
Kubernetes crée plusieurs namespaces par défaut:
- default: Namespace par défaut pour vos ressources
- kube-system: Composants système Kubernetes
- kube-public: Ressources publiques
- kube-node-lease: Heartbeats des nodes
Exemple d'Utilisation
# Créer un namespace
kubectl create namespace production
# Déployer dans un namespace
kubectl apply -f deployment.yaml -n production
# Lister les pods dans un namespace
kubectl get pods -n production
Relations Entre les Concepts
Vue d'Ensemble
Hiérarchie:
- Namespace: Contient tout
- Deployment: Gère les Pods
- ReplicaSet: Maintient le nombre de réplicas
- Pods: Exécutent les conteneurs
- Service: Expose les Pods
Résumé du Chapitre
Dans ce chapitre, vous avez appris:
Pod: Plus petite unité déployable, 1+ conteneurs
Deployment: Gère le cycle de vie, réplicas, updates
Service: Expose les Pods avec une IP stable
Types de Services: ClusterIP, NodePort, LoadBalancer
Namespaces: Isolation logique, organisation
Relations: Namespace → Deployment → Pods → Service
Prochaines Étapes
Maintenant que vous maîtrisez les concepts fondamentaux:
Lab 1.1: Premier Déploiement (mise en pratique)
Quiz Module 1: Valider vos connaissances
Chapitre créé le: Décembre 2024