DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesDécouvrir Kubernetes : pods, services et kubectl06 - Projet Capstone : Déployer une application web sur Kubernetes avec Minikube

Détails

  • 45 minutes
  • Intermédiaire

Objectifs

  • Créer et gérer des Pods avec kubectl
  • Exposer une application avec un Service NodePort
  • Utiliser les namespaces et les labels
  • Maîtriser les commandes kubectl essentielles
Module Découvrir Kubernetes : pods, services et kubectl

Exercice 06 : Projet Capstone - Déployer une Application Web sur Kubernetes

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Créer un Pod Kubernetes via un fichier YAML
  • ✅ Exposer l'application avec un Service de type NodePort
  • ✅ Organiser les ressources avec des namespaces et des labels
  • ✅ Déboguer avec kubectl describe, kubectl logs, kubectl exec
  • ✅ Maîtriser le workflow apply → get → describe → delete

Durée estimée : 45 minutes

Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)

Prérequis :

  • Minikube installé et démarré (minikube start)
  • kubectl configuré
  • Module Kubernetes Débutant complété

📖 Contexte

Vous devez déployer une première application web sur un cluster Kubernetes local (Minikube). Vous créerez manuellement les ressources (Pod + Service) en YAML, puis inspecterez et debuggerez l'application. C'est la base de tout déploiement Kubernetes.


📋 Énoncé

Déployez une application Nginx dans un namespace dédié, exposez-la via un Service NodePort, et vérifiez son accessibilité depuis l'hôte.


🧭 Déroulement de l'exercice

Tâche 1 : Préparer l'environnement Minikube

Démarrez Minikube, vérifiez que le cluster est opérationnel, et affichez les informations du nœud.

Indice : minikube start, kubectl cluster-info, kubectl get nodes. Le nœud doit avoir le statut Ready.

Vérification : kubectl get nodes affiche minikube avec le statut Ready.


Tâche 2 : Créer un namespace dédié

Créez un namespace web-app avec une commande impérative, puis appliquez un label team=devops sur ce namespace.

Indice : kubectl create namespace web-app. Pour les labels : kubectl label namespace web-app team=devops. Vérifiez avec kubectl get namespace web-app --show-labels.

Vérification : kubectl get namespace web-app --show-labels affiche team=devops.


Tâche 3 : Créer un Pod Nginx via YAML

Créez un fichier pod.yaml définissant un Pod nommé web dans le namespace web-app, avec :

  • L'image nginx:1.25-alpine
  • Le label app=web
  • Le port container 80 déclaré
  • Une sonde de liveness sur GET / port 80

Indice : La structure de base d'un Pod YAML :

`yaml

apiVersion: v1

kind: Pod

metadata:

name: web

namespace: web-app

labels:

app: web

spec:

containers:

- name: nginx

image: nginx:1.25-alpine

ports:

- containerPort: 80

`

Appliquez avec kubectl apply -f pod.yaml.

Vérification : kubectl get pod web -n web-app affiche Running avec 1/1 containers ready.


Tâche 4 : Exposer le Pod avec un Service NodePort

Créez un fichier service.yaml définissant un Service de type NodePort nommé web-svc dans le namespace web-app, qui sélectionne les pods avec le label app=web et expose le port 80 en NodePort 30080.

Indice :

`yaml

spec:

type: NodePort

selector:

app: web

ports:

- port: 80

targetPort: 80

nodePort: 30080

`

Le selector doit correspondre exactement aux labels du Pod.

Vérification : kubectl get service web-svc -n web-app affiche NodePort et 80:30080/TCP.


Tâche 5 : Accéder à l'application et déboguer

Récupérez l'URL d'accès via Minikube, accédez à l'application dans le navigateur ou via curl. Ensuite, utilisez kubectl describe, kubectl logs, et kubectl exec pour inspecter le Pod.

Indice : minikube service web-svc -n web-app --url retourne l'URL d'accès. Alternativement : curl $(minikube ip):30080.

Vérification : curl $(minikube ip):30080 retourne le HTML de la page Nginx par défaut.


Tâche 6 : Modifier et recréer le Pod

Modifiez pod.yaml pour changer l'image en nginx:1.26-alpine et le label en ajoutant version=v2. Appliquez le changement. Observez que les Pods ne peuvent pas être modifiés à chaud et qu'il faut supprimer + recréer.

Indice : Certaines propriétés d'un Pod sont immuables. kubectl apply retournera une erreur pour les changements interdits. Solution : kubectl delete pod web -n web-app puis kubectl apply -f pod.yaml.

Vérification : kubectl get pod web -n web-app -o jsonpath='{.spec.containers[0].image}' retourne nginx:1.26-alpine.


🗂️ Mini-Projet : Déploiement complet avec inspection

bash
# Démarrage cluster
minikube start
kubectl cluster-info

# Namespace
kubectl create namespace web-app
kubectl label namespace web-app team=devops

# Déploiement
kubectl apply -f pod.yaml
kubectl apply -f service.yaml

# Attendre que le pod soit prêt
kubectl wait --for=condition=Ready pod/web -n web-app --timeout=60s

# Vérification complète
kubectl get all -n web-app
kubectl describe pod web -n web-app
kubectl logs web -n web-app

# Accès
curl $(minikube ip):30080 | head -5

# Inspection avancée
kubectl exec web -n web-app -- nginx -v
kubectl exec web -n web-app -- ls /etc/nginx/

# Nettoyage
kubectl delete namespace web-app
# (supprime toutes les ressources du namespace)

Checkpoints de validation :

  • kubectl get nodes affiche Ready
  • kubectl get namespace web-app --show-labels affiche team=devops
  • kubectl get pod web -n web-app affiche 1/1 Running
  • kubectl get svc web-svc -n web-app affiche NodePort 80:30080/TCP
  • curl $(minikube ip):30080 retourne du HTML
  • kubectl exec web -n web-app -- nginx -v retourne la version de Nginx

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Préparer l'environnement Minikube
  • Tâche 2 : Créer un namespace dédié
  • Tâche 3 : Créer un Pod Nginx via YAML
  • Tâche 4 : Exposer le Pod avec un Service NodePort
  • Tâche 5 : Accéder à l'application et déboguer
  • Tâche 6 : Modifier et recréer le Pod
  • 🗂️ Mini-Projet : Déploiement complet avec inspection