Avant d’attaquer les concepts, vous allez bâtir un terrain d’entraînement reproductible. Au terme de ce module, vous disposerez d’un poste prêt pour exécuter tous les labs et de scripts de réinitialisation rapides, comme le préconisent les plateformes de préparation CKA/CKAD.
Table of Contents
Prérequis rapides
- Un compte utilisateur avec droits administrateur (ou sudo).
- Docker Desktop, Docker Engine ou containerd installés et fonctionnels.
- 1 CPU, 4 Gio de RAM et 10 Gio d’espace disque libres pour le cluster local.
1. Installer la boîte à outils
Commencez par installer kubectl, un moteur de conteneurs (Docker ou containerd) et un orchestrateur local (kind ou minikube). Les commandes ci-dessous ciblent Linux. Pour macOS/Windows, adaptez avec Homebrew, Chocolatey ou le binaire MSI.
kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
kind (recommandé pour la formation)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64
chmod +x kind
sudo mv kind /usr/local/bin/kind
kind version
Alternative : préférez minikube si vous souhaitez tester des add-ons (LoadBalancer, CSI, GPU). Suivez la documentation officielle : Quickstart minikube.
2. Créer un cluster d’entraînement reproductible
Le fichier suivant crée un control plane, deux workers et cartographie les ports 80/443 sur votre machine pour simuler un Ingress Controller.
cat <<'YAML' > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 8080
protocol: TCP
- containerPort: 443
hostPort: 8443
protocol: TCP
- role: worker
- role: worker
YAML
kind create cluster --name=k8s-lab --config kind-config.yaml
Contrôlez l’état du cluster :
kubectl cluster-info
kubectl get nodes -o wide
kubectl get pods -n kube-system
Notez l’adresse IP du control plane et vérifiez que tous les Pods système sont en statut Running.
3. Préparer votre shell et vos alias
- Activez l’autocomplétion Bash :
echo "source <(kubectl completion bash)" >> ~/.bashrcpuis relancez votre terminal. - Créez un alias de productivité :
echo "alias k=kubectl" >> ~/.bashrc. - Installez kubectx/kubens pour basculer entre contextes/namespaces en une commande.
- Pour Zsh :
echo "source <(kubectl completion zsh)" >> ~/.zshrc.
Capturez ces alias dans un fichier partagé (ex. ~/k8s-training/dotfiles.sh) afin de pouvoir les rejouer sur d’autres machines.
4. Script de nettoyage et de réinitialisation
#!/usr/bin/env bash
set -euo pipefail
CLUSTER_NAME="k8s-lab"
if kind get clusters | grep -q "$CLUSTER_NAME"; then
kind delete cluster --name "$CLUSTER_NAME"
fi
rm -f kind-config.yaml
kubectl config delete-context "$CLUSTER_NAME" 2>/dev/null || true
kubectl config delete-cluster "$CLUSTER_NAME" 2>/dev/null || true
kubectl config unset users."${CLUSTER_NAME}" 2>/dev/null || true
echo "✅ Environnement nettoyé"
Rendez le script exécutable (chmod +x reset-lab.sh) et placez-le à la racine de votre dossier de formation.
5. Lab guidé
- Cloner votre dépôt de travail (ou créez
~/k8s-training). - Lancer le script ci-dessus pour partir d’un environnement propre.
- Recréer le cluster en appliquant le manifeste
kind-config.yaml. - Déployer le metrics-server (utile pour les modules suivants) :
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml kubectl -n kube-system patch deployment metrics-server --type='json' -p='[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]' - Vérifier
kubectl top nodesetkubectl top pods.
Challenge (optionnel)
- Créer un makefile avec les cibles
make up,make down,make reset. - Exporter automatiquement le kubeconfig vers
~/k8s-training/kubeconfiget documenter la variableKUBECONFIG. - Tester la création d’un cluster éphémère pour les examens :
kind create cluster --name=cka-practice --image kindest/node:v1.29.2.
Solution détaillée
- Vérifier les versions installées
kubectl version --client --shortdoit afficher une version 1.28+.
kind versionconfirme que le binaire est bien installé. - Créer le cluster
Rejouez le fichierkind-config.yamlpuiskind create cluster --name=k8s-lab --config kind-config.yaml.
Résultat attendu :✓ Ensuring node image (kindest/node:v1.29.2) ✓ Preparing nodes ✓ Writing configuration ✓ Starting control-plane ... ✓ Joining worker nodes ... - Contrôler la santé des nœuds
kubectl get nodes -o widedoit retourner 3 nœuds avec STATUSReady.NAME STATUS ROLES VERSION INTERNAL-IP k8s-lab-control-plane Ready control-plane v1.29.2 172.18.0.2 k8s-lab-worker Readyv1.29.2 172.18.0.3 ... - Tester les alias et l’autocomplétion
Rechargez le shell (source ~/.bashrc) puis saisissezk get no: l’autocomplétion doit s’effectuer et renvoyer la même sortie quekubectl get nodes. - Metrics server
Après l’installation depuis GitHub,kubectl top nodesdoit renvoyer CPU/MEM.
Si le metrics-server n’est pas prêt, vérifiez le patch--kubelet-insecure-tls. - Reset
Exécutez./reset-lab.sh. Attendu :Deleting cluster "k8s-lab" ... ✅ Environnement nettoyékind get clustersne doit plus retournerk8s-lab.
Si une étape échoue, notez l’erreur dans ~/k8s-training/journal.md et corrigez avant d’enchaîner sur le module 1.
Pièges fréquents
- Docker Desktop sur Windows consomme parfois trop de RAM : réduisez le cluster à un control plane + 1 worker en modifiant
kind-config.yaml. - Si le port 8080/8443 est déjà utilisé, adaptez
hostPort(ex. 9080/9443) et mettez à jour votre fichier/etc/hosts. - Sur WSL2, pensez à monter le dossier de projet sur un disque ext4 pour éviter les problèmes de performances.
Journal de formation
Créez un fichier ~/k8s-training/journal.md et notez :
- Les commandes exécutées.
- Les erreurs rencontrées et leurs résolutions.
- Le temps passé par étape.
Ce journal vous servira de base de connaissances et de pense-bête pour l’examen.


