Cheatsheets

Kubernetes / kubectl

Aide-mémoire kubectl complet - commandes pods, déploiements, services, ConfigMap, secrets, RBAC, debug et troubleshooting. Référence rapide pour DevOps et SRE.

Référence kubectl organisée par contexte. Alias recommandé : alias k=kubectl.


Configuration et contextes

DescriptionCommande
Voir la config activekubectl config view --minify
Lister les contexteskubectl config get-contexts
Changer de contextekubectl config use-context mon-cluster
Changer de namespace par défautkubectl config set-context --current --namespace=mon-ns
Voir le namespace actifkubectl config view --minify --output 'jsonpath={..namespace}'

Namespaces

DescriptionCommande
Listerkubectl get namespaces
Créerkubectl create namespace mon-app
Supprimer (et tout son contenu)kubectl delete namespace mon-app
Travailler dans un namespacekubectl get pods -n mon-app
Voir toutes ressources d'un namespacekubectl get all -n mon-app
Scope global (tous namespaces)kubectl get pods -A

Pods

Lister et inspecter

DescriptionCommande
Lister les podskubectl get pods
Avec IP et nœudkubectl get pods -o wide
Surveiller en temps réelkubectl get pods -w
Filtrer par labelkubectl get pods -l app=nginx
Format YAML completkubectl get pod mon-pod -o yaml
Inspecter (événements inclus)kubectl describe pod mon-pod

Logs

DescriptionCommande
Logs d'un podkubectl logs mon-pod
Suivre en temps réelkubectl logs -f mon-pod
Dernières N ligneskubectl logs --tail=100 mon-pod
Depuis N tempskubectl logs --since=1h mon-pod
Logs du crash précédentkubectl logs mon-pod --previous
Pod multi-conteneurskubectl logs mon-pod -c nom-conteneur
Tous les pods d'un labelkubectl logs -l app=nginx --all-containers

Interaction

DescriptionCommande
Shell dans un podkubectl exec -it mon-pod -- bash
Shell (image Alpine)kubectl exec -it mon-pod -- sh
Commande uniquekubectl exec mon-pod -- cat /etc/hosts
Copier pod → localkubectl cp mon-pod:/chemin ./local
Copier local → podkubectl cp ./local mon-pod:/chemin
Port-forward sur un podkubectl port-forward pod/mon-pod 8080:80
Port-forward sur un servicekubectl port-forward svc/mon-svc 8080:80

Pods de debug

DescriptionCommande
Pod éphémère de debugkubectl run debug --image=busybox --rm -it --restart=Never -- sh
Debug réseau (netshoot)kubectl run debug --image=nicolaka/netshoot --rm -it --restart=Never -- bash
Debug d'un nœudkubectl debug node/mon-node -it --image=ubuntu
Tester la résolution DNSkubectl run dns-test --image=busybox --rm -it --restart=Never -- nslookup kubernetes.default

Deployments

Opérations courantes

DescriptionCommande
Créer un deploymentkubectl create deployment nginx --image=nginx:alpine --replicas=3
Listerkubectl get deployments
Inspecterkubectl describe deployment nginx
Modifier le nombre de réplicaskubectl scale deployment nginx --replicas=5
Mettre à jour l'imagekubectl set image deployment/nginx nginx=nginx:1.25-alpine
Statut du rolloutkubectl rollout status deployment/nginx
Redémarrer tous les podskubectl rollout restart deployment/nginx
Éditer directementkubectl edit deployment nginx
Patcher en JSONkubectl patch deployment nginx -p '{"spec":{"replicas":3}}'

Rollout et rollback

DescriptionCommande
Historique des révisionskubectl rollout history deployment/nginx
Détail d'une révisionkubectl rollout history deployment/nginx --revision=2
Rollback à la révision précédentekubectl rollout undo deployment/nginx
Rollback à une révision spécifiquekubectl rollout undo deployment/nginx --to-revision=2
Pauser un rolloutkubectl rollout pause deployment/nginx
Reprendre un rolloutkubectl rollout resume deployment/nginx

Services

DescriptionCommande
Créer un ClusterIPkubectl expose deployment nginx --port=80 --type=ClusterIP
Créer un NodePortkubectl expose deployment nginx --port=80 --type=NodePort
Créer un LoadBalancerkubectl expose deployment nginx --port=80 --type=LoadBalancer
Lister les serviceskubectl get svc
Inspecterkubectl describe svc mon-svc
Supprimerkubectl delete svc mon-svc

Types de services

TypeUsageAccessibilité
ClusterIPCommunication interne entre podsInterne au cluster uniquement
NodePortExposer sur un port du nœud (30000–32767)Via <IP_NODE>:<NodePort>
LoadBalancerExposer via un LB cloud ou MetalLBIP externe assignée
ExternalNameAliaser un DNS externeVia CNAME DNS

ConfigMaps et Secrets

DescriptionCommande
Créer un ConfigMap (valeurs)kubectl create configmap app-config --from-literal=ENV=prod --from-literal=LOG=info
Créer depuis un fichierkubectl create configmap nginx-conf --from-file=nginx.conf
Lire un ConfigMapkubectl get configmap app-config -o yaml
Créer un Secret (valeurs)kubectl create secret generic app-secrets --from-literal=DB_PASS=secret
Créer un Secret TLSkubectl create secret tls mon-tls --cert=cert.crt --key=cert.key
Décoder un secretkubectl get secret app-secrets -o jsonpath='{.data.DB_PASS}' | base64 -d
Lister les secretskubectl get secrets

Nœuds

DescriptionCommande
Lister les nœudskubectl get nodes -o wide
Inspecter un nœudkubectl describe node mon-node
Ressources allouées sur un nœudkubectl describe node mon-node | grep -A10 "Allocated"
Empêcher de scheduler sur un nœudkubectl cordon mon-node
Remettre en servicekubectl uncordon mon-node
Vider un nœud (maintenance)kubectl drain mon-node --ignore-daemonsets --delete-emptydir-data
Ajouter un labelkubectl label node mon-node type=worker
Supprimer un labelkubectl label node mon-node type-

Ressources et monitoring

DescriptionCommande
Consommation CPU/RAM des nœudskubectl top nodes
Consommation CPU/RAM des podskubectl top pods
Tous namespaces, triés par CPUkubectl top pods -A --sort-by=cpu
Évènements triés par datekubectl get events -A --sort-by='.lastTimestamp'
Derniers évènements d'un namespacekubectl get events -n mon-ns --sort-by='.lastTimestamp' | tail -20

Diagnostic et debug

DescriptionCommande
Vérifier ses permissionskubectl auth can-i create pods
Vérifier les permissions d'un SAkubectl auth can-i create pods --as=system:serviceaccount:default:mon-sa
Valider un manifest YAMLkubectl apply --dry-run=client -f manifest.yaml
Diff avant applykubectl diff -f manifest.yaml
API resources disponibleskubectl api-resources --namespaced=true
Forcer la suppression d'un pod bloquékubectl delete pod mon-pod --force --grace-period=0
Dump d'un namespace en YAMLkubectl get all -n mon-ns -o yaml > dump.yaml

Labels et annotations

DescriptionCommande
Ajouter un labelkubectl label pod mon-pod env=production
Modifier un labelkubectl label pod mon-pod env=staging --overwrite
Supprimer un labelkubectl label pod mon-pod env-
Sélectionner par labelkubectl get pods -l app=nginx
Sélection multiplekubectl get pods -l 'app in (nginx,apache)'
Ajouter une annotationkubectl annotate pod mon-pod description="Pod de prod"

Apply, delete, get - patterns généraux

DescriptionCommande
Appliquer un manifestkubectl apply -f manifest.yaml
Appliquer un dossierkubectl apply -f ./manifests/
Appliquer depuis une URLkubectl apply -f https://example.com/manifest.yaml
Supprimer par manifestkubectl delete -f manifest.yaml
Supprimer une ressourcekubectl delete deployment nginx
Supprimer tout dans un namespacekubectl delete all --all -n mon-ns
Get en JSONkubectl get pod mon-pod -o json
Extraire un champ avec jsonpathkubectl get pod mon-pod -o jsonpath='{.status.podIP}'

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic