Module 0 – Préparer son environnement Kubernetes

Installez kubectl, Docker, kind et un script de reset pour disposer d’un labo Kubernetes reproductible avant d’entamer la formation.

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.

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)" >> ~/.bashrc puis 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é

  1. Cloner votre dépôt de travail (ou créez ~/k8s-training).
  2. Lancer le script ci-dessus pour partir d’un environnement propre.
  3. Recréer le cluster en appliquant le manifeste kind-config.yaml.
  4. 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"}]'
    
  5. Vérifier kubectl top nodes et kubectl top pods.

Challenge (optionnel)

  • Créer un makefile avec les cibles make up, make down, make reset.
  • Exporter automatiquement le kubeconfig vers ~/k8s-training/kubeconfig et documenter la variable KUBECONFIG.
  • 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

  1. Vérifier les versions installées
    kubectl version --client --short doit afficher une version 1.28+.
    kind version confirme que le binaire est bien installé.
  2. Créer le cluster
    Rejouez le fichier kind-config.yaml puis kind 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 ...
    
  3. Contrôler la santé des nœuds
    kubectl get nodes -o wide doit retourner 3 nœuds avec STATUS Ready.

    NAME                 STATUS   ROLES           VERSION   INTERNAL-IP
    k8s-lab-control-plane Ready   control-plane   v1.29.2   172.18.0.2
    k8s-lab-worker         Ready             v1.29.2   172.18.0.3
    ...
  4. Tester les alias et l’autocomplétion
    Rechargez le shell (source ~/.bashrc) puis saisissez k get no : l’autocomplétion doit s’effectuer et renvoyer la même sortie que kubectl get nodes.
  5. Metrics server
    Après l’installation depuis GitHub, kubectl top nodes doit renvoyer CPU/MEM.
    Si le metrics-server n’est pas prêt, vérifiez le patch --kubelet-insecure-tls.
  6. Reset
    Exécutez ./reset-lab.sh. Attendu :

    Deleting cluster "k8s-lab" ...
    ✅ Environnement nettoyé
    

    kind get clusters ne doit plus retourner k8s-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.

Ressources complémentaires