Exercice 04 : Organiser avec les Namespaces et les Labels
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer des namespaces pour isoler les environnements
- ✅ Déployer des ressources dans un namespace spécifique (
-n) - ✅ Ajouter des labels et filtrer avec
-l - ✅ Lister les pods de tous les namespaces (
--all-namespaces)
Durée estimée : 15 minutes
Difficulté : ⭐☆☆☆☆ (Débutant)
Prérequis : minikube démarré, exercices 01-03 terminés
📖 Contexte
Les namespaces permettent de diviser un cluster en environnements virtuels isolés (dev, staging, prod). Les labels sont des paires clé/valeur libres qui permettent d'organiser et de sélectionner les ressources. Ces deux mécanismes sont complémentaires et incontournables en production.
📋 Énoncé
Vous allez créer deux namespaces (dev et staging), y déployer des pods avec des labels, puis pratiquer la sélection par labels et le filtrage par namespace.
Résultat attendu :
- Deux namespaces
devetstagingavec des pods déployés - Maîtrise du filtrage par label et par namespace
🧭 Déroulement de l'exercice
Tâche 1 : Créer des namespaces
Créez deux namespaces : dev et staging, puis listez tous les namespaces existants.
Indice :
kubectl create namespace devou via un manifest YAML aveckind: Namespace
Vérification : kubectl get namespaces affiche dev et staging avec le statut Active.
Tâche 2 : Déployer des pods dans les namespaces
Créez un pod nginx dans le namespace dev et un pod apache dans le namespace staging.
Indice : Utilisez le champ
metadata.namespacedans le YAML, ou l'option-n devaveckubectl apply.
Vérification : kubectl get pods -n dev affiche le pod nginx, kubectl get pods -n staging le pod apache.
Tâche 3 : Ajouter des labels
Ajoutez le label tier=frontend au pod nginx dans dev et tier=backend au pod apache dans staging.
Indice :
kubectl label pod <nom> tier=frontend -n dev
Vérification : kubectl get pods --show-labels -n dev affiche les labels mis à jour.
Tâche 4 : Filtrer par label selector
Listez tous les pods de tous les namespaces qui ont le label tier=frontend.
Indice :
kubectl get pods -A -l tier=frontend
Vérification : Seul le pod nginx de dev apparaît.
Tâche 5 : Explorer kube-system
Listez les pods du namespace kube-system et identifiez les composants du control plane (kube-apiserver, etcd, coredns).
Indice :
kubectl get pods -n kube-system
Vérification : Vous identifiez au moins 4 composants système.
🗂️ Mini-Projet : Environnements isolés
Simulez une organisation multi-environnement avec les namespaces dev, staging et prod. Chaque namespace doit avoir un pod avec des labels cohérents.
# pods-multi-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-frontend
namespace: dev
labels:
app: monapp
tier: frontend
env: dev
version: "1.0"
spec:
containers:
- name: nginx
image: nginx:1.25
---
apiVersion: v1
kind: Pod
metadata:
name: app-frontend
namespace: staging
labels:
app: monapp
tier: frontend
env: staging
version: "1.1"
spec:
containers:
- name: nginx
image: nginx:1.25Checkpoints :
kubectl get namespaceslistedev,stagingetprodkubectl get pods -A -l app=monappaffiche les pods des deux namespaceskubectl get pods -A -l env=devretourne uniquement les pods de devkubectl get pods -A --show-labelsaffiche tous les labelskubectl delete namespace dev staging prodsupprime proprement les namespaces et leurs ressources