Aller au contenu
Conteneurs & Orchestration medium

Maîtriser kubectl : cheat sheet interactif

6 min de lecture

logo kubernetes

kubectl est l’outil CLI qui parle directement à l’API Server Kubernetes. Chaque commande suit le même schéma : verbe (get, apply, delete) → type (pod, deployment, service) → nomoptions (-n, -o, -l). Que ce soit pour inspecter un cluster, déployer une application ou diagnostiquer un incident, kubectl est votre point d’entrée unique.

  • Inspecter un cluster (get, describe, logs, top, events)
  • Créer et modifier des ressources (apply, create, patch, edit)
  • Déployer et rollback (rollout, scale, set image, autoscale)
  • Déboguer des Pods (exec, debug, port-forward, logs —previous)
  • Maintenir des nœuds (cordon, drain, taint, uncordon)
  • Automatiser dans un pipeline CI/CD (diff, wait, dry-run)

kubectl est la CLI officielle de Kubernetes, mais d’autres outils le complètent :

OutilSpécialitéQuand l’utiliser
kubectlCLI officielle KubernetesToutes les opérations cluster
k9sTUI interactifNavigation et debug en temps réel
helmGestionnaire de paquetsInstaller des applications packagées
kustomizeOverlays YAMLPersonnaliser sans templates
sternMulti-pod log tailingSuivre les logs de plusieurs Pods
kubectx/kubensChangement de contexte rapideNaviguer entre clusters/namespaces

Combinaisons fréquentes :

Fenêtre de terminal
# kubectl + jq : extraire des données structurées
kubectl get pods -o json | jq '.items[].metadata.name'
# kubectl + stern : logs multi-pods en couleur
stern -n production "web-.*"
# kubectl + kustomize : appliquer des overlays
kubectl apply -k overlays/production/

🧠 Modèle mental — Comment fonctionne kubectl

kubectl = Verbe → Type de ressource → Nom → Options

Modèle mental kubectl : Verbe (get, apply, delete) → Type (pod, deploy, svc) → Nom (my-app) → Options (-n, -o, -l)

Points clés

  • kubectl envoie des requêtes à l'API Server Kubernetes
  • Chaque commande suit le pattern : verbe + type de ressource + nom
  • Le contexte (~/.kube/config) définit QUEL cluster tu vises
  • Les options -n (namespace) et -o (output) sont partout
  • --dry-run=client -o yaml génère un manifeste sans rien créer
  • apply est déclaratif (idempotent), create est impératif (erreur si existe)

Règles d'or

1
Toujours vérifier le contexte avant d'agir kubectl config current-context — une commande sur le mauvais cluster peut être catastrophique.
2
Prévisualiser avant d'appliquer en prod kubectl diff -f manifest.yaml montre ce qui va changer, sans rien toucher.
3
Utiliser apply plutôt que create pour la reproductibilité apply est idempotent : relancer la même commande ne casse rien.

Vocabulaire essentiel

get
Lister les ressources (pods, svc, deploy...)
describe
Détails complets + événements d'une ressource
apply -f
Créer ou mettre à jour depuis un fichier YAML
delete
Supprimer une ressource
-n namespace
Cibler un namespace spécifique
-o yaml/json/wide
Changer le format de sortie
📚 Pour aller plus loin — 17 options avancées
explain
Documentation intégrée d'un champ YAML
api-resources
Lister tous les types de ressources disponibles
patch
Modifier un champ sans remplacer toute la ressource
rollout
Gérer les mises à jour progressives (status, undo, restart, history)
drain
Évacuer un nœud avant maintenance
taint/toleration
Contrôler quels Pods vont sur quels nœuds
port-forward
Tunnel local vers un Pod/Service
--dry-run=client
Simuler sans envoyer à l'API Server
jsonpath
Extraire un champ spécifique de la sortie
wait --for=condition
Attendre qu'une ressource atteigne un état
diff -f
Comparer un manifeste avec l'état du cluster
debug
Conteneur éphémère pour déboguer un Pod distroless
auth can-i
Vérifier les droits RBAC d'un utilisateur
--server-side
Apply côté serveur (résout les conflits de champs)
custom-columns
Colonnes personnalisées pour la sortie de get
rollout restart
Redémarrer les Pods d'un Deployment sans downtime
config get-contexts
Lister tous les contextes kubeconfig disponibles

kubectl transforme chaque commande en requête REST vers l’API Server. Le fichier ~/.kube/config (kubeconfig) définit quel cluster, quel utilisateur et quel namespace sont ciblés.

Fenêtre de terminal
kubectl [VERBE] [TYPE] [NOM] [OPTIONS]
ÉtapeQuestionExemplesObligatoire ?
VerbeQuelle action ?get, apply, delete, describeOui
TypeSur quel type de ressource ?pod, deployment, service, nodeOui (sauf commandes globales)
NomQuelle ressource précise ?my-app, web-7d4f8b6c9Non (toutes si omis)
OptionsQuels paramètres ?-n staging, -o yaml, -l app=webNon

Verbe — L’action à effectuer. get pour lister, describe pour les détails, apply pour créer/mettre à jour, delete pour supprimer.

Type — Le type de ressource Kubernetes. On peut utiliser les formes courtes : po (pods), svc (services), deploy (deployments), ns (namespaces).

Nom — Cible une ressource précise. Sans nom, la commande s’applique à toutes les ressources du type.

Options — Modifient le comportement : -n (namespace), -o (format), -l (sélecteur de labels), --watch (suivre en temps réel).

CatégorieVerbesUsage
Lectureget, describe, logs, top, explainInspecter le cluster
Écritureapply, create, delete, edit, patch, replaceModifier les ressources
Déploiementrollout, scale, set, autoscaleGérer les mises à jour
Debugexec, debug, port-forward, cp, attachDiagnostiquer
Nœudscordon, uncordon, drain, taintMaintenance
CI/CDdiff, wait, --dry-run=clientAutomatisation
OptionUsageExemple
-n namespaceCibler un namespacekubectl get pods -n production
-ATous les namespaceskubectl get pods -A
-o yaml/json/wideChanger le format de sortiekubectl get svc web -o yaml
-o jsonpath='{...}'Extraire un champkubectl get pod x -o jsonpath='{.status.podIP}'
-l key=valueFiltrer par labelskubectl get pods -l app=nginx
--dry-run=clientSimuler sans créerkubectl create deploy x --image=y --dry-run=client -o yaml
-w / --watchSuivre en temps réelkubectl get pods -w
--field-selectorFiltrer sur un champ objet--field-selector=status.phase=Running
Fenêtre de terminal
# 1. Vérifier le contexte
kubectl config current-context
# 2. Prévisualiser les changements
kubectl diff -f deployment.yaml
# 3. Appliquer
kubectl apply -f deployment.yaml
# 4. Suivre le déploiement
kubectl rollout status deployment/web
# 5. Vérifier
kubectl get pods -l app=web -o wide
ErreurCauseSolution
Connection refused localhost:8080Kubeconfig absent ou cluster non démarréVérifier $KUBECONFIG et le cluster
”get all” ne montre pas les Secretsall est un alias limitéLister les types spécifiques
create échoue “already exists”create est impératifUtiliser apply (idempotent)
Résultats videsMauvais namespaceAjouter -n NS ou chercher avec -A

Maintenant que vous avez une bonne compréhension de kubectl, voici des patterns prêts à l’emploi pour les opérations les plus fréquentes.

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Lister les ressources (commande réaliste) Base

Vue d'ensemble complète d'un namespace — remplace le réflexe trompeur "get all".

kubectl get deploy,rs,po,svc,ing,cm,secret -n production
Formule kubectl get deploy,rs,po,svc,ing,cm,secret -n <namespace> [-o wide]
Exemple
kubectl get deploy,rs,po,svc,ing,cm,secret -n production
Paramètres
  • types — Liste explicite de types (deploy,rs,po,svc,ing,cm,secret)
  • namespace — Namespace cible
Éviter si : "get all" ne montre PAS tout (manque ConfigMaps, Secrets, Ingress, PVC...). Toujours lister explicitement.
Alternative : kubectl api-resources --verbs=list -o name | xargs -I {} kubectl get {} -n NS --no-headers 2>/dev/null
Diagnostiquer avec describe Base

Comprendre pourquoi une ressource est en erreur.

kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging
Formule kubectl describe <type> <nom> -n <namespace>
Exemple
kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging
Paramètres
  • type — Type : pod, svc, deploy, node...
  • nom — Nom de la ressource
Logs multi-conteneurs Base

Suivre les logs d'un Pod ou d'un ensemble de Pods.

kubectl logs -f -l app=nginx -n production --all-containers
Formule kubectl logs [-f] [-c <conteneur>] [--previous] <pod> -n <ns>
Exemple
kubectl logs -f -l app=nginx -n production --all-containers
Paramètres
  • -f — Suivre en temps réel (tail -f)
  • -c — Conteneur spécifique (multi-conteneur)
  • --previous — Logs du conteneur précédent (crash)
  • -l — Sélecteur de labels (tous les pods matchant)
Générer un manifeste YAML Base

Créer un squelette YAML sans toucher au cluster.

kubectl create deployment nginx --image=nginx:1.26 --replicas=3 --dry-run=client -o yaml > deploy.yaml
Formule kubectl create <type> <nom> [options] --dry-run=client -o yaml
Exemple
kubectl create deployment nginx --image=nginx:1.26 --replicas=3 --dry-run=client -o yaml > deploy.yaml
Paramètres
  • --dry-run=client — Simule côté client, sans appel API
  • -o yaml — Formate la sortie en YAML
Appliquer un manifeste (déclaratif) Base

Créer ou mettre à jour une ressource de manière idempotente.

kubectl apply -f deployment.yaml -n production
Formule kubectl apply -f <fichier.yaml> -n <namespace>
Exemple
kubectl apply -f deployment.yaml -n production
Paramètres
  • -f — Fichier ou dossier YAML
  • -R — Récursif (dossier avec sous-dossiers)
  • --prune — Supprime les ressources non déclarées
Éviter si : Ne pas mélanger create et apply sur la même ressource
Extraire un champ avec JSONPath Inter.

Récupérer une valeur précise pour scripting.

kubectl get pod nginx -o jsonpath='{.status.podIP}'
Formule kubectl get <type> <nom> -o jsonpath='{.spec.field}'
Exemple
kubectl get pod nginx -o jsonpath='{.status.podIP}'
Paramètres
  • jsonpath — Expression JSONPath sur la structure de l'objet
  • range — {range .items[*]}{.metadata.name}{"\n"}{end}
Alternative : kubectl get ... -o go-template ou jq
Diff avant apply Inter.

Voir ce qui va changer AVANT d'appliquer.

kubectl diff -f deployment.yaml
Formule kubectl diff -f <fichier.yaml>
Exemple
kubectl diff -f deployment.yaml
Paramètres
  • -f — Fichier ou dossier à comparer avec l'état du cluster
Éviter si : Appliquer sans vérifier en production
Rollback d'un déploiement Inter.

Revenir à la version précédente après un déploiement raté.

kubectl rollout undo deployment/web --to-revision=2
Formule kubectl rollout undo deployment/<nom> [--to-revision=N]
Exemple
kubectl rollout undo deployment/web --to-revision=2
Paramètres
  • --to-revision — Numéro de révision cible (optionnel, défaut: N-1)
Shell dans un conteneur Base

Inspecter un conteneur en cours d'exécution.

kubectl exec -it web-7d4f8b6c9-x2k4m -n production -- /bin/sh
Formule kubectl exec -it <pod> -n <ns> [-c <conteneur>] -- <commande>
Exemple
kubectl exec -it web-7d4f8b6c9-x2k4m -n production -- /bin/sh
Paramètres
  • -it — Mode interactif + terminal
  • -n — Namespace du Pod (toujours le préciser)
  • -c — Conteneur cible (si multi-conteneur)
  • -- — Sépare les options kubectl de la commande
Éviter si : Pods distroless (pas de shell) : utiliser kubectl debug
Alternative : kubectl debug -it pod/<pod> -n <ns> --image=busybox --target=<conteneur>
Maintenance d'un nœud Avancé

Préparer un nœud pour maintenance (upgrade, reboot).

kubectl cordon worker-01 && kubectl drain worker-01 --ignore-daemonsets --delete-emptydir-data
Formule kubectl cordon <noeud> && kubectl drain <noeud> --ignore-daemonsets --delete-emptydir-data
Exemple
kubectl cordon worker-01 && kubectl drain worker-01 --ignore-daemonsets --delete-emptydir-data
Paramètres
  • cordon — Marque le nœud comme non-schedulable
  • drain — Évacue les Pods vers d'autres nœuds
  • --ignore-daemonsets — Ne pas bloquer sur les DaemonSets
  • --delete-emptydir-data — ⚠️ DESTRUCTIF : supprime les volumes emptyDir. À utiliser consciemment.
Éviter si : --delete-emptydir-data détruit les données emptyDir (caches, fichiers temporaires). S'assurer qu'aucun Pod ne stocke de données critiques en emptyDir avant de drainer.
Tunnel local vers un Pod/Service Base

Accéder à un service sans Ingress/LoadBalancer.

kubectl port-forward svc/grafana 3000:3000 -n monitoring
Formule kubectl port-forward <type>/<nom> <local>:<distant> -n <ns>
Exemple
kubectl port-forward svc/grafana 3000:3000 -n monitoring
Paramètres
  • type/nom — pod/, svc/, ou deploy/
  • local:distant — Port local : port du conteneur/service
Attendre une condition (CI/CD) Inter.

Bloquer un pipeline jusqu'à ce qu'une ressource soit prête.

kubectl wait --for=condition=Available deployment/web --timeout=120s
Formule kubectl wait --for=condition=<cond> <type>/<nom> --timeout=<durée>
Exemple
kubectl wait --for=condition=Available deployment/web --timeout=120s
Paramètres
  • condition — Ready, Available, Complete...
  • --timeout — Durée max (défaut: 30s). 0 = infini
Vérifier et changer de contexte Base

Éviter d'exécuter une commande sur le mauvais cluster.

kubectl config current-context && kubectl config use-context staging-cluster
Formule kubectl config current-context && kubectl config use-context <ctx>
Exemple
kubectl config current-context && kubectl config use-context staging-cluster
Paramètres
  • ctx — Nom du contexte cible (visible via get-contexts)
Éviter si : Agir sans vérifier le contexte courant, surtout pour delete/drain
Alternative : kubectl --context=staging-cluster get pods (sans changer le contexte global)
Apply server-side (production) Avancé

Appliquer des manifestes en résolvant les conflits de champs côté serveur.

kubectl apply -f k8s/ --server-side --force-conflicts
Formule kubectl apply -f <fichier> --server-side --force-conflicts
Exemple
kubectl apply -f k8s/ --server-side --force-conflicts
Paramètres
  • --server-side — Le serveur gère les field managers, pas le client
  • --force-conflicts — Prendre possession des champs en conflit
Éviter si : Mélanger apply client-side et server-side sur la même ressource
Alternative : kubectl apply -f k8s/ --dry-run=server pour tester d'abord
Vérifier les droits RBAC Inter.

Savoir ce qu'un utilisateur ou ServiceAccount peut faire.

kubectl auth can-i create deployments -n production
Formule kubectl auth can-i <verbe> <type> -n <namespace>
Exemple
kubectl auth can-i create deployments -n production
Paramètres
  • verbe — get, list, create, delete, patch, '*' (tout)
  • type — pods, deployments, secrets, '*' (tout)
  • --list — Lister tous les droits de l'utilisateur courant
Alternative : kubectl auth can-i --list -n production (voir tout d'un coup)
Déboguer avec les Events Base

Voir ce qui s'est passé récemment dans un namespace.

kubectl get events -n production --sort-by=.metadata.creationTimestamp | tail -20
Formule kubectl get events -n <ns> --sort-by=.metadata.creationTimestamp
Exemple
kubectl get events -n production --sort-by=.metadata.creationTimestamp | tail -20
Paramètres
  • --sort-by — Trier par date de création
  • --field-selector — Filtrer par raison : reason=Failed, reason=FailedScheduling
Alternative : kubectl get events -A --field-selector reason=Failed (erreurs partout)
Redémarrer un Deployment proprement Inter.

Relancer tous les Pods sans changer le manifeste (rotation de secrets, refresh).

kubectl rollout restart deployment/web -n production && kubectl rollout status deployment/web -n production --timeout=120s
Formule kubectl rollout restart deployment/<nom> -n <ns>
Exemple
kubectl rollout restart deployment/web -n production && kubectl rollout status deployment/web -n production --timeout=120s
Paramètres
  • deployment/nom — Le Deployment à redémarrer
  • rollout status — Suivre le rolling restart
Éviter si : Supprimer les Pods un par un (downtime possible)
Sortie personnalisée avec custom-columns Inter.

Extraire exactement les colonnes dont on a besoin.

kubectl get pod -o custom-columns=NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName
Formule kubectl get <type> -o custom-columns=COL1:.path,COL2:.path
Exemple
kubectl get pod -o custom-columns=NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName
Paramètres
  • custom-columns — Liste COL:jsonpath séparée par des virgules
Alternative : kubectl get pod -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

Mauvais contexte actif

Exécuter kubectl delete deployment web en pensant être sur le cluster dev

Danger
Le piège : Exécuter kubectl delete deployment web en pensant être sur le cluster dev
Symptôme : Ressource supprimée en production
Cause : Le contexte courant pointe sur le cluster de production
Correction : Toujours vérifier : kubectl config current-context avant toute action destructrice
kubectl config current-context && kubectl delete deployment web
delete --force sans comprendre

kubectl delete pod stuck-pod --force --grace-period=0 pour débloquer

Danger
Le piège : kubectl delete pod stuck-pod --force --grace-period=0 pour débloquer
Symptôme : Le Pod disparaît de l'API mais le conteneur tourne peut-être encore sur le nœud
Cause : --force supprime l'objet API immédiatement, sans attendre l'arrêt réel du conteneur
Correction : Utiliser --force seulement si le nœud est définitivement mort. Sinon, diagnostiquer d'abord.
"get all" ne montre pas tout

kubectl get all et croire que le namespace est vide

Attention
Le piège : kubectl get all et croire que le namespace est vide
Symptôme : ConfigMaps, Secrets, Ingress, PVC... ne sont pas listés
Cause : "all" est un alias limité : pods, services, deployments, replicasets, jobs
Correction : Lister explicitement : kubectl get deploy,rs,po,svc,ing,cm,secret -n NS
kubectl get deploy,rs,po,svc,ing,cm,secret -n NS
create échoue si la ressource existe

kubectl create -f deploy.yaml dans un script lancé 2 fois

Attention
Le piège : kubectl create -f deploy.yaml dans un script lancé 2 fois
Symptôme : Error: already exists
Cause : create est impératif : il refuse de recréer quelque chose qui existe
Correction : Utiliser apply (idempotent) pour les scripts reproductibles
kubectl apply -f deploy.yaml
Oubli du -- dans exec

kubectl exec -it pod-name /bin/sh

Attention
Le piège : kubectl exec -it pod-name /bin/sh
Symptôme : Erreur ou comportement inattendu
Cause : Sans --, kubectl peut interpréter les arguments de la commande comme ses propres options
Correction : Toujours mettre -- avant la commande à exécuter
kubectl exec -it pod-name -- /bin/sh
Supprimer les Pods au lieu de rollout restart

kubectl delete pod -l app=web pour "redémarrer" les Pods

Attention
Le piège : kubectl delete pod -l app=web pour "redémarrer" les Pods
Symptôme : Downtime potentiel si tous les Pods sont supprimés en même temps
Cause : delete supprime instantanément, pas de rolling update
Correction : Utiliser kubectl rollout restart pour un redémarrage sans interruption
kubectl rollout restart deployment/web -n production
→ Voir le pattern qui résout
Conflit de field managers en server-side apply

kubectl apply --server-side renvoie "conflict" sur des champs modifiés par un autre outil

Attention
Le piège : kubectl apply --server-side renvoie "conflict" sur des champs modifiés par un autre outil
Symptôme : Apply failed: conflict with "kubectl-client-side-apply" using ...
Cause : Un autre outil (Helm, Argo, kubectl client-side) possède certains champs
Correction : Ajouter --force-conflicts pour prendre possession, ou corriger la source de vérité
kubectl apply -f deploy.yaml --server-side --force-conflicts
Erreur Forbidden sans diagnostic

Recevoir "Forbidden" sans savoir quel droit manque

Attention
Le piège : Recevoir "Forbidden" sans savoir quel droit manque
Symptôme : Error from server (Forbidden): pods is forbidden
Cause : Le ServiceAccount n'a pas le Role/ClusterRole nécessaire
Correction : Vérifier les droits avec auth can-i, puis lister les bindings
kubectl auth can-i --list -n production
→ Voir le pattern qui résout
Oubli du namespace

kubectl get pods ne montre rien alors que l'app tourne

Info
Le piège : kubectl get pods ne montre rien alors que l'app tourne
Symptôme : Aucun résultat ou résultats du mauvais namespace
Cause : Sans -n, kubectl utilise le namespace "default"
Correction : Toujours préciser -n ou changer le namespace par défaut du contexte
kubectl get pods -n production  # ou: kubectl config set-context --current --namespace=production
--delete-local-data est déprécié

kubectl drain node1 --delete-local-data

Info
Le piège : kubectl drain node1 --delete-local-data
Symptôme : Warning: --delete-local-data is deprecated
Cause : L'option a été renommée dans les versions récentes
Correction : Utiliser --delete-emptydir-data à la place
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
Sélecteur de labels mal formé

kubectl get pods -l app=web,env=prod (espace après la virgule)

Info
Le piège : kubectl get pods -l app=web,env=prod (espace après la virgule)
Symptôme : Erreur de parsing ou résultats incorrects
Cause : Les sélecteurs n'acceptent pas d'espaces autour de la virgule
Correction : Pas d'espace : -l app=web,env=prod
kubectl get pods -l app=web,env=prod
Logs sans --since sur un Pod ancien

kubectl logs pod/web-xxx sans filtre temporel

Info
Le piège : kubectl logs pod/web-xxx sans filtre temporel
Symptôme : Défilement interminable de logs anciens, terminal bloqué
Cause : Par défaut, logs affiche TOUT l'historique disponible
Correction : Toujours ajouter --since ou --tail pour limiter la sortie
kubectl logs pod/web-xxx --since=10m --tail=200

📋 Cheatsheet kubectl

📝 Syntaxe :

kubectl [verbe] [type] [nom] [options] Format général
-n NS Cibler un namespace
-A / --all-namespaces Tous les namespaces
-o yaml/json/wide/name Format de sortie
-o jsonpath='{...}' Extraire un champ
-o custom-columns=COL:.path,... Colonnes personnalisées
-o jsonpath='{range .items[*]}{...}{end}' Boucle sur tous les objets
--context CTX Cibler un contexte sans changer
--kubeconfig FILE Config alternative (CI/debug)
--request-timeout=DURÉE Timeout API (clusters lents)

🚀 Commandes types :

Lister les ressources (commande réaliste) Vue d'ensemble complète d'un namespace — remplace le réflexe trompeur "get all".
kubectl get deploy,rs,po,svc,ing,cm,secret -n production
Diagnostiquer avec describe Comprendre pourquoi une ressource est en erreur.
kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging
Logs multi-conteneurs Suivre les logs d'un Pod ou d'un ensemble de Pods.
kubectl logs -f -l app=nginx -n production --all-containers
Générer un manifeste YAML Créer un squelette YAML sans toucher au cluster.
kubectl create deployment nginx --image=nginx:1.26 --replicas=3 --dry-run=client -o yaml > deploy.yaml
Appliquer un manifeste (déclaratif) Créer ou mettre à jour une ressource de manière idempotente.
kubectl apply -f deployment.yaml -n production

🧭 Contexte

config get-contexts Lister tous les contextes kubectl config get-contexts
config use-context CTX Changer de cluster actif kubectl config use-context staging
config current-context Quel cluster suis-je ? kubectl config current-context
config set-context --current --namespace=NS Namespace par défaut kubectl config set-context --current --namespace=prod
config view --minify Config du contexte actif uniquement kubectl config view --minify
cluster-info URL de l'API Server et services kubectl cluster-info
version --short Version client + serveur (1 ligne) kubectl version --short

📖 Commandes

get TYPE [-o wide] Lister les ressources kubectl get deploy,svc,pods -n prod
get deploy,rs,po,svc,ing,cm,secret -n NS Liste réaliste (remplace "get all") kubectl get deploy,rs,po,svc,ing,cm,secret -n prod
describe TYPE NOM Détails complets + events kubectl describe pod my-app -n prod
api-resources Lister les types disponibles kubectl api-resources --verbs=list
api-resources --namespaced=true Uniquement les types namespacés kubectl api-resources --namespaced=true -o name
explain TYPE.champ --recursive Doc intégrée arborescente kubectl explain deploy.spec.template.spec --recursive
get events --sort-by=.metadata.creationTimestamp Événements récents triés kubectl get events -n prod --sort-by=.metadata.creationTimestamp
top pod -n NS CPU/mémoire des Pods kubectl top pod -n prod --sort-by=memory
top node CPU/mémoire des nœuds kubectl top node
apply -f FICHIER Créer/maj déclaratif (idempotent) kubectl apply -f deploy.yaml
create TYPE NOM Créer impératif (erreur si existe) kubectl create ns staging
delete TYPE NOM Supprimer une ressource kubectl delete pod my-pod --grace-period=30
edit TYPE NOM Éditer dans $EDITOR kubectl edit deploy web -n prod
patch TYPE NOM -p JSON Modifier un champ ciblé kubectl patch deploy web -p '{"spec":{"replicas":5}}'
replace -f FICHIER Remplacer entièrement kubectl replace -f deploy.yaml

⚙️ Options

--dry-run=client -o yaml Générer YAML sans créer kubectl create deploy x --image=y --dry-run=client -o yaml
--dry-run=server Valider côté serveur sans créer kubectl apply -f deploy.yaml --dry-run=server
diff -f FICHIER Comparer avec le cluster kubectl diff -f manifest.yaml
apply --server-side --force-conflicts Apply SSA (prod, multi-outils) kubectl apply -f k8s/ --server-side --force-conflicts
apply --prune -l LABEL Supprimer les ressources absentes kubectl apply -f k8s/ --prune -l app=myapp
wait --for=condition=COND Attendre un état (CI/CD) kubectl wait --for=condition=Ready pod/x --timeout=60s
--watch / -w Surveiller les changements kubectl get pods -w
--grace-period=N Délai avant suppression forcée kubectl delete pod x --grace-period=0 --force

🔍 Filtres

-l key=value Sélecteur de labels (égalité) -l app=nginx,env=prod
-l 'key in (a,b)' Sélecteur ensembliste -l 'env in (staging,prod)'
--field-selector CHAMP=VAL Filtre sur champs objet --field-selector=status.phase=Running
--field-selector status.phase!=Running Pods en erreur (incident) kubectl get pod -n prod --field-selector=status.phase!=Running
--sort-by=.CHEMIN Trier la sortie --sort-by=.metadata.creationTimestamp
--sort-by=.status.startTime Trier par heure de démarrage kubectl get pod -n prod --sort-by=.status.startTime

🔐 Permissions

auth can-i VERBE TYPE -n NS Ai-je le droit de... ? kubectl auth can-i create pods -n production
auth can-i '*' '*' -n NS Suis-je admin du namespace ? kubectl auth can-i '*' '*' -n production
auth can-i --list -n NS Tous mes droits dans un namespace kubectl auth can-i --list -n production

⚡ Actions

scale --replicas=N Changer le nombre de réplicas kubectl scale deploy web --replicas=5
set image DEPLOY CONT=IMG Mettre à jour une image kubectl set image deploy/web nginx=nginx:1.26
rollout restart Redémarrer sans changer le YAML kubectl rollout restart deploy/web -n prod
rollout status [--timeout] Suivre un déploiement kubectl rollout status deploy/web --timeout=120s
rollout undo [--to-revision=N] Rollback kubectl rollout undo deploy/web --to-revision=3
rollout history Historique des révisions kubectl rollout history deploy/web
autoscale --min --max --cpu Créer un HPA kubectl autoscale deploy web --min=2 --max=10 --cpu-percent=80

🏷️ Drapeaux

logs POD -f Suivre en temps réel (tail -f) kubectl logs deploy/web -f -n prod
logs --since=DURÉE Filtrer par ancienneté kubectl logs deploy/web --since=10m -n prod
logs --tail=N N dernières lignes kubectl logs pod/web-xxx --tail=200
logs --all-containers Tous les conteneurs du Pod kubectl logs pod/web-xxx --all-containers
logs -c CONTENEUR Un conteneur spécifique kubectl logs pod/web-xxx -c sidecar
logs --previous Logs du conteneur crashé (N-1) kubectl logs pod/web-xxx --previous
logs -l app=NOM --since=5m Logs par label + filtre temps kubectl logs -n prod -l app=web --all-containers --since=5m

🔗 Composition

exec -it POD -c CONT -- CMD Shell dans un conteneur kubectl exec -it pod/web -c nginx -- /bin/sh
debug -it POD --image=IMG --target=CONT Conteneur éphémère (distroless) kubectl debug -it pod/api --image=busybox --target=api
port-forward TYPE/NOM LOCAL:DIST Tunnel local kubectl port-forward svc/web 8080:80 -n prod
cp POD:SRC DEST Copier depuis/vers un Pod kubectl cp pod/web:/var/log/app.log ./app.log
cordon / uncordon NOEUD Bloquer/débloquer le scheduling kubectl cordon worker-01
drain NOEUD --ignore-daemonsets --delete-emptydir-data --force Évacuer un nœud (maintenance) kubectl drain worker-01 --ignore-daemonsets --delete-emptydir-data
taint nodes NOEUD key=val:EFFET Contrainte de scheduling kubectl taint nodes n1 gpu=true:NoSchedule
label TYPE NOM key=val Ajouter/modifier un label kubectl label pod web env=prod --overwrite
annotate TYPE NOM key=val --overwrite Ajouter/modifier une annotation kubectl annotate pod/web note="deployed v2" --overwrite

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn