
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) → nom → options (-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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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 dans l’écosystème Kubernetes
Section intitulée « kubectl dans l’écosystème Kubernetes »kubectl est la CLI officielle de Kubernetes, mais d’autres outils le complètent :
| Outil | Spécialité | Quand l’utiliser |
|---|---|---|
kubectl | CLI officielle Kubernetes | Toutes les opérations cluster |
k9s | TUI interactif | Navigation et debug en temps réel |
helm | Gestionnaire de paquets | Installer des applications packagées |
kustomize | Overlays YAML | Personnaliser sans templates |
stern | Multi-pod log tailing | Suivre les logs de plusieurs Pods |
kubectx/kubens | Changement de contexte rapide | Naviguer entre clusters/namespaces |
Combinaisons fréquentes :
# kubectl + jq : extraire des données structuréeskubectl get pods -o json | jq '.items[].metadata.name'
# kubectl + stern : logs multi-pods en couleurstern -n production "web-.*"
# kubectl + kustomize : appliquer des overlayskubectl apply -k overlays/production/Comprendre kubectl en 2 min
Section intitulée « Comprendre kubectl en 2 min »🧠 Modèle mental — Comment fonctionne kubectl
kubectl = Verbe → Type de ressource → Nom → Options
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
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.
Syntaxe minimale
Section intitulée « Syntaxe minimale »kubectl [VERBE] [TYPE] [NOM] [OPTIONS]Les 4 parties d’une commande kubectl
Section intitulée « Les 4 parties d’une commande kubectl »| Étape | Question | Exemples | Obligatoire ? |
|---|---|---|---|
| Verbe | Quelle action ? | get, apply, delete, describe | Oui |
| Type | Sur quel type de ressource ? | pod, deployment, service, node | Oui (sauf commandes globales) |
| Nom | Quelle ressource précise ? | my-app, web-7d4f8b6c9 | Non (toutes si omis) |
| Options | Quels paramètres ? | -n staging, -o yaml, -l app=web | Non |
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).
Les verbes essentiels
Section intitulée « Les verbes essentiels »| Catégorie | Verbes | Usage |
|---|---|---|
| Lecture | get, describe, logs, top, explain | Inspecter le cluster |
| Écriture | apply, create, delete, edit, patch, replace | Modifier les ressources |
| Déploiement | rollout, scale, set, autoscale | Gérer les mises à jour |
| Debug | exec, debug, port-forward, cp, attach | Diagnostiquer |
| Nœuds | cordon, uncordon, drain, taint | Maintenance |
| CI/CD | diff, wait, --dry-run=client | Automatisation |
Options incontournables
Section intitulée « Options incontournables »| Option | Usage | Exemple |
|---|---|---|
-n namespace | Cibler un namespace | kubectl get pods -n production |
-A | Tous les namespaces | kubectl get pods -A |
-o yaml/json/wide | Changer le format de sortie | kubectl get svc web -o yaml |
-o jsonpath='{...}' | Extraire un champ | kubectl get pod x -o jsonpath='{.status.podIP}' |
-l key=value | Filtrer par labels | kubectl get pods -l app=nginx |
--dry-run=client | Simuler sans créer | kubectl create deploy x --image=y --dry-run=client -o yaml |
-w / --watch | Suivre en temps réel | kubectl get pods -w |
--field-selector | Filtrer sur un champ objet | --field-selector=status.phase=Running |
Le workflow type en production
Section intitulée « Le workflow type en production »# 1. Vérifier le contextekubectl config current-context
# 2. Prévisualiser les changementskubectl diff -f deployment.yaml
# 3. Appliquerkubectl apply -f deployment.yaml
# 4. Suivre le déploiementkubectl rollout status deployment/web
# 5. Vérifierkubectl get pods -l app=web -o wideErreurs typiques (et solutions)
Section intitulée « Erreurs typiques (et solutions) »| Erreur | Cause | Solution |
|---|---|---|
| Connection refused localhost:8080 | Kubeconfig absent ou cluster non démarré | Vérifier $KUBECONFIG et le cluster |
| ”get all” ne montre pas les Secrets | all est un alias limité | Lister les types spécifiques |
| create échoue “already exists” | create est impératif | Utiliser apply (idempotent) |
| Résultats vides | Mauvais namespace | Ajouter -n NS ou chercher avec -A |
Les Modèles de commandes courants
Section intitulée « Les Modèles de commandes courants »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
kubectl get deploy,rs,po,svc,ing,cm,secret -n <namespace> [-o wide] kubectl get deploy,rs,po,svc,ing,cm,secret -n production -
types— Liste explicite de types (deploy,rs,po,svc,ing,cm,secret) -
namespace— Namespace cible
Diagnostiquer avec describe Base Comprendre pourquoi une ressource est en erreur.
kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging
kubectl describe <type> <nom> -n <namespace> kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging -
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
kubectl logs [-f] [-c <conteneur>] [--previous] <pod> -n <ns> kubectl logs -f -l app=nginx -n production --all-containers -
-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
kubectl create <type> <nom> [options] --dry-run=client -o yaml kubectl create deployment nginx --image=nginx:1.26 --replicas=3 --dry-run=client -o yaml > deploy.yaml -
--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
kubectl apply -f <fichier.yaml> -n <namespace> kubectl apply -f deployment.yaml -n production -
-f— Fichier ou dossier YAML -
-R— Récursif (dossier avec sous-dossiers) -
--prune— Supprime les ressources non déclarées
Extraire un champ avec JSONPath Inter. Récupérer une valeur précise pour scripting.
kubectl get pod nginx -o jsonpath='{.status.podIP}'
kubectl get <type> <nom> -o jsonpath='{.spec.field}' kubectl get pod nginx -o jsonpath='{.status.podIP}' -
jsonpath— Expression JSONPath sur la structure de l'objet -
range— {range .items[*]}{.metadata.name}{"\n"}{end}
Diff avant apply Inter. Voir ce qui va changer AVANT d'appliquer.
kubectl diff -f deployment.yaml
kubectl diff -f <fichier.yaml> kubectl diff -f deployment.yaml -
-f— Fichier ou dossier à comparer avec l'état du cluster
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
kubectl rollout undo deployment/<nom> [--to-revision=N] kubectl rollout undo deployment/web --to-revision=2 -
--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
kubectl exec -it <pod> -n <ns> [-c <conteneur>] -- <commande> kubectl exec -it web-7d4f8b6c9-x2k4m -n production -- /bin/sh -
-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
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
kubectl cordon <noeud> && kubectl drain <noeud> --ignore-daemonsets --delete-emptydir-data kubectl cordon worker-01 && kubectl drain worker-01 --ignore-daemonsets --delete-emptydir-data -
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.
Tunnel local vers un Pod/Service Base Accéder à un service sans Ingress/LoadBalancer.
kubectl port-forward svc/grafana 3000:3000 -n monitoring
kubectl port-forward <type>/<nom> <local>:<distant> -n <ns> kubectl port-forward svc/grafana 3000:3000 -n monitoring -
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
kubectl wait --for=condition=<cond> <type>/<nom> --timeout=<durée> kubectl wait --for=condition=Available deployment/web --timeout=120s -
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
kubectl config current-context && kubectl config use-context <ctx> kubectl config current-context && kubectl config use-context staging-cluster -
ctx— Nom du contexte cible (visible via get-contexts)
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
kubectl apply -f <fichier> --server-side --force-conflicts kubectl apply -f k8s/ --server-side --force-conflicts -
--server-side— Le serveur gère les field managers, pas le client -
--force-conflicts— Prendre possession des champs en conflit
Vérifier les droits RBAC Inter. Savoir ce qu'un utilisateur ou ServiceAccount peut faire.
kubectl auth can-i create deployments -n production
kubectl auth can-i <verbe> <type> -n <namespace> kubectl auth can-i create deployments -n production -
verbe— get, list, create, delete, patch, '*' (tout) -
type— pods, deployments, secrets, '*' (tout) -
--list— Lister tous les droits de l'utilisateur courant
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
kubectl get events -n <ns> --sort-by=.metadata.creationTimestamp kubectl get events -n production --sort-by=.metadata.creationTimestamp | tail -20 -
--sort-by— Trier par date de création -
--field-selector— Filtrer par raison : reason=Failed, reason=FailedScheduling
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
kubectl rollout restart deployment/<nom> -n <ns> kubectl rollout restart deployment/web -n production && kubectl rollout status deployment/web -n production --timeout=120s -
deployment/nom— Le Deployment à redémarrer -
rollout status— Suivre le rolling restart
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
kubectl get <type> -o custom-columns=COL1:.path,COL2:.path kubectl get pod -o custom-columns=NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName -
custom-columns— Liste COL:jsonpath séparée par des virgules
Aucune recette ne correspond à votre recherche.
Les Pièges à éviter
Section intitulée « Les Pièges à éviter »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
Exécuter kubectl delete deployment web en pensant être sur le cluster dev
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
kubectl delete pod stuck-pod --force --grace-period=0 pour débloquer
"get all" ne montre pas tout kubectl get all et croire que le namespace est vide
Attention
kubectl get all et croire que le namespace est vide
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
kubectl create -f deploy.yaml dans un script lancé 2 fois
kubectl apply -f deploy.yaml Oubli du -- dans exec kubectl exec -it pod-name /bin/sh
Attention
kubectl exec -it pod-name /bin/sh
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
kubectl delete pod -l app=web pour "redémarrer" les Pods
kubectl rollout restart deployment/web -n production Conflit de field managers en server-side apply kubectl apply --server-side renvoie "conflict" sur des champs modifiés par un autre outil
Attention
kubectl apply --server-side renvoie "conflict" sur des champs modifiés par un autre outil
kubectl apply -f deploy.yaml --server-side --force-conflicts Erreur Forbidden sans diagnostic Recevoir "Forbidden" sans savoir quel droit manque
Attention
Recevoir "Forbidden" sans savoir quel droit manque
kubectl auth can-i --list -n production Oubli du namespace kubectl get pods ne montre rien alors que l'app tourne
Info
kubectl get pods ne montre rien alors que l'app tourne
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
kubectl drain node1 --delete-local-data
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
kubectl get pods -l app=web,env=prod (espace après la virgule)
kubectl get pods -l app=web,env=prod Logs sans --since sur un Pod ancien kubectl logs pod/web-xxx sans filtre temporel
Info
kubectl logs pod/web-xxx sans filtre temporel
kubectl logs pod/web-xxx --since=10m --tail=200 Cheatsheet
Section intitulée « Cheatsheet » 📋
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 :
kubectl get deploy,rs,po,svc,ing,cm,secret -n production kubectl describe pod my-app-7d4f8b6c9-x2k4m -n staging kubectl logs -f -l app=nginx -n production --all-containers kubectl create deployment nginx --image=nginx:1.26 --replicas=3 --dry-run=client -o yaml > deploy.yaml 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 |