
Cheatsheet centrée sur la vitesse d’exécution. Examen 100% pratique avec plusieurs tâches à résoudre rapidement en ligne de commande. Cette page couvre les commandes les plus rentables, organisées par domaine CKAD.
Tableau “besoin → commande”
Section intitulée « Tableau “besoin → commande” »| Besoin | Commande |
|---|---|
| Générer un Pod YAML | k run nginx --image=nginx $do > pod.yaml |
| Générer un Deployment YAML | k create deploy webapp --image=nginx $do > deploy.yaml |
| Exposer rapidement un Deployment | k expose deploy webapp --port=80 |
| Mettre à jour l’image d’un Deployment | k set image deploy webapp webapp=nginx:1.28 |
| Voir pourquoi un Pod ne démarre pas | k describe pod <nom> |
| Lire les logs d’un crash | k logs <pod> --previous |
| Trouver la syntaxe d’un champ | k explain pod.spec.containers |
| Changer de namespace rapidement | kn <namespace> (alias ci-dessous) |
| Voir les événements récents | k get events --sort-by='.lastTimestamp' |
| Rollback d’un Deployment | k rollout undo deploy webapp |
Bootstrap de session
Section intitulée « Bootstrap de session »Vérifiez ces éléments dès le début de l’examen :
# Vérifier les alias disponiblesalias
# L'alias k doit existeralias k=kubectl
# Variable pour génération YAML (LA plus importante)export do="--dry-run=client -o yaml"
# Alias pour changer de namespace rapidementalias kn='kubectl config set-context --current --namespace'
# Autocomplétionsource <(kubectl completion bash)complete -F __start_kubectl k
# Éditeurexport KUBE_EDITOR="vim"Piège fréquent : Oublier de vérifier le namespace. Chaque question peut cibler un namespace différent.
# Voir le namespace actuelk config view --minify | grep namespace
# Changer de namespacekn productionApplication Design and Build (20%)
Section intitulée « Application Design and Build (20%) »Créer un Pod
Section intitulée « Créer un Pod »k run nginx --image=nginxBut : Créer un Pod simple. Quand : Test rapide, Pod éphémère. Piège : Oublier de générer le YAML si vous devez ajouter des volumes ou probes.
# Générer le YAML pour modificationk run nginx --image=nginx $do > pod.yamlOptions utiles pour kubectl run
Section intitulée « Options utiles pour kubectl run »| Option | Usage |
|---|---|
--port=80 | Expose un port (documentation) |
--labels="app=web" | Ajoute des labels |
--env="DB_HOST=mysql" | Variable d’environnement |
--requests="cpu=100m,memory=128Mi" | Ressources minimales |
--limits="cpu=200m,memory=256Mi" | Ressources maximales |
--command -- sleep 3600 | Remplace ENTRYPOINT |
Créer un Deployment
Section intitulée « Créer un Deployment »k create deploy webapp --image=nginx --replicas=3But : Déployer une application avec réplicas.
Quand : Application stateless avec scaling.
Piège : Le label app=webapp est ajouté automatiquement.
# Générer le YAMLk create deploy webapp --image=nginx --replicas=3 $do > deploy.yamlJob et CronJob
Section intitulée « Job et CronJob »# Job ponctuelk create job backup --image=busybox -- tar -czf /backup/data.tar.gz /data
# CronJob planifiék create cronjob daily-backup --image=busybox --schedule="0 2 * * *" -- /scripts/backup.shSyntaxe cron rapide : */5 * * * * = 5 min, 0 * * * * = 1h, 0 2 * * * = 2h du matin.
Application Deployment (20%)
Section intitulée « Application Deployment (20%) »Mettre à jour l’image
Section intitulée « Mettre à jour l’image »k set image deploy webapp webapp=nginx:1.28But : Déclencher un rolling update.
Syntaxe : <conteneur>=<nouvelle-image>.
Piège : Le nom du conteneur doit correspondre à celui défini dans le Deployment.
Suivre et annuler un rollout
Section intitulée « Suivre et annuler un rollout »# Suivre le rolloutk rollout status deploy webapp
# Voir l'historiquek rollout history deploy webapp
# Rollback immédiatk rollout undo deploy webapp
# Rollback à une révision spécifiquek rollout undo deploy webapp --to-revision=1Piège : Pas de message d’erreur si le rollback échoue silencieusement. Vérifiez avec rollout status.
Scaler un Deployment
Section intitulée « Scaler un Deployment »k scale deploy webapp --replicas=5Autoscaling
Section intitulée « Autoscaling »k autoscale deploy webapp --min=2 --max=10 --cpu-percent=80Application Observability and Maintenance (15%)
Section intitulée « Application Observability and Maintenance (15%) »k logs <pod>k logs <pod> -c <conteneur> # Multi-conteneurk logs <pod> --previous # Après un crashk logs <pod> -f # Suivre en temps réelk logs -l app=webapp # Tous les Pods d'un labelPiège : Après un crash, les logs disparaissent. Utilisez --previous immédiatement.
Describe
Section intitulée « Describe »k describe pod <nom>But : Voir l’état complet + Events. Quand : Pod en Pending, ImagePullBackOff, CrashLoopBackOff.
Les Events révèlent :
ImagePullBackOff: image inexistanteCrashLoopBackOff: l’app crash au démarrageFailedScheduling: pas de node disponibleOOMKilled: limite mémoire dépassée
Events du cluster
Section intitulée « Events du cluster »k get events --sort-by='.lastTimestamp'Exec dans un conteneur
Section intitulée « Exec dans un conteneur »k exec -it <pod> -- /bin/shk exec <pod> -- ls -la /appk exec -it <pod> -c <conteneur> -- /bin/sh # Multi-conteneurDans le conteneur :
env # Variables d'environnementcat /etc/resolv.conf # Config DNSwget -qO- localhost:80 # Test localApplication Environment, Configuration and Security (25%)
Section intitulée « Application Environment, Configuration and Security (25%) »ConfigMap
Section intitulée « ConfigMap »# Créer depuis littérauxk create cm app-config --from-literal=DB_HOST=mysql --from-literal=LOG_LEVEL=debug
# Créer depuis fichierk create cm app-config --from-file=config.properties
# Vérifierk describe cm app-configPiège : --from-literal pour valeurs simples, --from-file pour fichiers entiers.
k create secret generic db-creds --from-literal=username=admin --from-literal=password=secret123Piège : Les secrets sont encodés base64, pas chiffrés.
ServiceAccount
Section intitulée « ServiceAccount »k create sa my-saServices and Networking (20%)
Section intitulée « Services and Networking (20%) »Exposer un Deployment
Section intitulée « Exposer un Deployment »# ClusterIP (défaut, interne)k expose deploy webapp --port=80
# NodePort (externe via port du node)k expose deploy webapp --port=80 --type=NodePort
# Avec target-port différentk expose deploy webapp --port=8080 --target-port=80Rappel : port = port du Service, targetPort = port du conteneur.
Vérifier un Service
Section intitulée « Vérifier un Service »k get svc webappk get endpoints webapp # Voir les Pods sélectionnésPiège : Si ENDPOINTS est vide, les labels du Service ne matchent aucun Pod.
Tester un Service depuis le cluster
Section intitulée « Tester un Service depuis le cluster »k run test --image=busybox --rm -it -- wget -qO- webapp:80Exploration de l’API
Section intitulée « Exploration de l’API »kubectl explain
Section intitulée « kubectl explain »k explain pod.spec.containersk explain pod.spec.containers.livenessProbek explain deployment.spec.strategyBut : Trouver la syntaxe exacte d’un champ sans mémoriser. Quand : Toujours, avant d’écrire du YAML complexe.
# Vue récursive + grepk explain pod.spec --recursive | grep -i volumeapi-resources
Section intitulée « api-resources »k api-resourcesShort names utiles : po (pods), svc (services), deploy (deployments), cm (configmaps), pvc (persistentvolumeclaims).
Outputs et filtrage
Section intitulée « Outputs et filtrage »# Vue étendue (IP, node)k get pods -o wide
# Exporter en YAMLk get pod nginx -o yaml > pod.yaml
# JSONPathk get pod nginx -o jsonpath='{.status.podIP}'k get pods -o jsonpath='{.items[*].metadata.name}'
# Filtrer par labelk get pods -l app=nginxk get pods -l 'app in (nginx,redis)'
# Tous les namespacesk get pods -A
# Trier par datek get pods --sort-by='.metadata.creationTimestamp'Commandes à connaître par cœur
Section intitulée « Commandes à connaître par cœur »k run ... $do # Générer Pod YAMLk create deploy ... $do # Générer Deployment YAMLk expose deploy ... # Créer Servicek set image deploy ... # Mettre à jour imagek rollout status deploy ... # Suivre rolloutk rollout undo deploy ... # Rollbackk logs ... --previous # Logs après crashk describe pod ... # État + Eventsk explain ... # Syntaxe YAMLk get events # Événements clusterÀ retrouver vite dans la doc
Section intitulée « À retrouver vite dans la doc »Ne perdez pas de temps à mémoriser ces éléments, retrouvez-les avec kubectl explain ou dans la doc :
- Détails d’Ingress (
k explain ingress.spec) - Champs avancés des probes (
k explain pod.spec.containers.livenessProbe) - Options de
securityContext(k explain pod.spec.securityContext) - Syntaxe exacte d’un CronJob (
k explain cronjob.spec) - Règles de NetworkPolicy (
k explain networkpolicy.spec)
Dépannage rapide
Section intitulée « Dépannage rapide »| Symptôme | Commande | Cause probable |
|---|---|---|
Pending | k describe pod | Pas de node, requests trop élevées |
ImagePullBackOff | k describe pod | Image inexistante |
CrashLoopBackOff | k logs --previous | L’app crash au démarrage |
| Service ne répond pas | k get endpoints | Labels incorrects (aucun Pod sélectionné) |
| ConfigMap absent | k get cm | Mauvais namespace |
À retenir
Section intitulée « À retenir »$dogénère le YAML sans créer — toujours commencer par là- Vérifiez le namespace avant chaque question
kubectl explainpour la syntaxe, pas la mémoirekubectl describepour comprendre les erreurs--previouspour les logs d’un crashset image+rolloutpour les mises à jour- Labels = sélection (Services, Deployments)
- Events = diagnostic rapide du cluster