Référence kubectl organisée par contexte. Alias recommandé : alias k=kubectl.
Configuration et contextes
| Description | Commande |
|---|---|
| Voir la config active | kubectl config view --minify |
| Lister les contextes | kubectl config get-contexts |
| Changer de contexte | kubectl config use-context mon-cluster |
| Changer de namespace par défaut | kubectl config set-context --current --namespace=mon-ns |
| Voir le namespace actif | kubectl config view --minify --output 'jsonpath={..namespace}' |
Namespaces
| Description | Commande |
|---|---|
| Lister | kubectl get namespaces |
| Créer | kubectl create namespace mon-app |
| Supprimer (et tout son contenu) | kubectl delete namespace mon-app |
| Travailler dans un namespace | kubectl get pods -n mon-app |
| Voir toutes ressources d'un namespace | kubectl get all -n mon-app |
| Scope global (tous namespaces) | kubectl get pods -A |
Pods
Lister et inspecter
| Description | Commande |
|---|---|
| Lister les pods | kubectl get pods |
| Avec IP et nœud | kubectl get pods -o wide |
| Surveiller en temps réel | kubectl get pods -w |
| Filtrer par label | kubectl get pods -l app=nginx |
| Format YAML complet | kubectl get pod mon-pod -o yaml |
| Inspecter (événements inclus) | kubectl describe pod mon-pod |
Logs
| Description | Commande |
|---|---|
| Logs d'un pod | kubectl logs mon-pod |
| Suivre en temps réel | kubectl logs -f mon-pod |
| Dernières N lignes | kubectl logs --tail=100 mon-pod |
| Depuis N temps | kubectl logs --since=1h mon-pod |
| Logs du crash précédent | kubectl logs mon-pod --previous |
| Pod multi-conteneurs | kubectl logs mon-pod -c nom-conteneur |
| Tous les pods d'un label | kubectl logs -l app=nginx --all-containers |
Interaction
| Description | Commande |
|---|---|
| Shell dans un pod | kubectl exec -it mon-pod -- bash |
| Shell (image Alpine) | kubectl exec -it mon-pod -- sh |
| Commande unique | kubectl exec mon-pod -- cat /etc/hosts |
| Copier pod → local | kubectl cp mon-pod:/chemin ./local |
| Copier local → pod | kubectl cp ./local mon-pod:/chemin |
| Port-forward sur un pod | kubectl port-forward pod/mon-pod 8080:80 |
| Port-forward sur un service | kubectl port-forward svc/mon-svc 8080:80 |
Pods de debug
| Description | Commande |
|---|---|
| Pod éphémère de debug | kubectl 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œud | kubectl debug node/mon-node -it --image=ubuntu |
| Tester la résolution DNS | kubectl run dns-test --image=busybox --rm -it --restart=Never -- nslookup kubernetes.default |
Deployments
Opérations courantes
| Description | Commande |
|---|---|
| Créer un deployment | kubectl create deployment nginx --image=nginx:alpine --replicas=3 |
| Lister | kubectl get deployments |
| Inspecter | kubectl describe deployment nginx |
| Modifier le nombre de réplicas | kubectl scale deployment nginx --replicas=5 |
| Mettre à jour l'image | kubectl set image deployment/nginx nginx=nginx:1.25-alpine |
| Statut du rollout | kubectl rollout status deployment/nginx |
| Redémarrer tous les pods | kubectl rollout restart deployment/nginx |
| Éditer directement | kubectl edit deployment nginx |
| Patcher en JSON | kubectl patch deployment nginx -p '{"spec":{"replicas":3}}' |
Rollout et rollback
| Description | Commande |
|---|---|
| Historique des révisions | kubectl rollout history deployment/nginx |
| Détail d'une révision | kubectl rollout history deployment/nginx --revision=2 |
| Rollback à la révision précédente | kubectl rollout undo deployment/nginx |
| Rollback à une révision spécifique | kubectl rollout undo deployment/nginx --to-revision=2 |
| Pauser un rollout | kubectl rollout pause deployment/nginx |
| Reprendre un rollout | kubectl rollout resume deployment/nginx |
Services
| Description | Commande |
|---|---|
| Créer un ClusterIP | kubectl expose deployment nginx --port=80 --type=ClusterIP |
| Créer un NodePort | kubectl expose deployment nginx --port=80 --type=NodePort |
| Créer un LoadBalancer | kubectl expose deployment nginx --port=80 --type=LoadBalancer |
| Lister les services | kubectl get svc |
| Inspecter | kubectl describe svc mon-svc |
| Supprimer | kubectl delete svc mon-svc |
Types de services
| Type | Usage | Accessibilité |
|---|---|---|
ClusterIP | Communication interne entre pods | Interne au cluster uniquement |
NodePort | Exposer sur un port du nœud (30000–32767) | Via <IP_NODE>:<NodePort> |
LoadBalancer | Exposer via un LB cloud ou MetalLB | IP externe assignée |
ExternalName | Aliaser un DNS externe | Via CNAME DNS |
ConfigMaps et Secrets
| Description | Commande |
|---|---|
| Créer un ConfigMap (valeurs) | kubectl create configmap app-config --from-literal=ENV=prod --from-literal=LOG=info |
| Créer depuis un fichier | kubectl create configmap nginx-conf --from-file=nginx.conf |
| Lire un ConfigMap | kubectl 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 TLS | kubectl create secret tls mon-tls --cert=cert.crt --key=cert.key |
| Décoder un secret | kubectl get secret app-secrets -o jsonpath='{.data.DB_PASS}' | base64 -d |
| Lister les secrets | kubectl get secrets |
Nœuds
| Description | Commande |
|---|---|
| Lister les nœuds | kubectl get nodes -o wide |
| Inspecter un nœud | kubectl describe node mon-node |
| Ressources allouées sur un nœud | kubectl describe node mon-node | grep -A10 "Allocated" |
| Empêcher de scheduler sur un nœud | kubectl cordon mon-node |
| Remettre en service | kubectl uncordon mon-node |
| Vider un nœud (maintenance) | kubectl drain mon-node --ignore-daemonsets --delete-emptydir-data |
| Ajouter un label | kubectl label node mon-node type=worker |
| Supprimer un label | kubectl label node mon-node type- |
Ressources et monitoring
| Description | Commande |
|---|---|
| Consommation CPU/RAM des nœuds | kubectl top nodes |
| Consommation CPU/RAM des pods | kubectl top pods |
| Tous namespaces, triés par CPU | kubectl top pods -A --sort-by=cpu |
| Évènements triés par date | kubectl get events -A --sort-by='.lastTimestamp' |
| Derniers évènements d'un namespace | kubectl get events -n mon-ns --sort-by='.lastTimestamp' | tail -20 |
Diagnostic et debug
| Description | Commande |
|---|---|
| Vérifier ses permissions | kubectl auth can-i create pods |
| Vérifier les permissions d'un SA | kubectl auth can-i create pods --as=system:serviceaccount:default:mon-sa |
| Valider un manifest YAML | kubectl apply --dry-run=client -f manifest.yaml |
| Diff avant apply | kubectl diff -f manifest.yaml |
| API resources disponibles | kubectl 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 YAML | kubectl get all -n mon-ns -o yaml > dump.yaml |
Labels et annotations
| Description | Commande |
|---|---|
| Ajouter un label | kubectl label pod mon-pod env=production |
| Modifier un label | kubectl label pod mon-pod env=staging --overwrite |
| Supprimer un label | kubectl label pod mon-pod env- |
| Sélectionner par label | kubectl get pods -l app=nginx |
| Sélection multiple | kubectl get pods -l 'app in (nginx,apache)' |
| Ajouter une annotation | kubectl annotate pod mon-pod description="Pod de prod" |
Apply, delete, get - patterns généraux
| Description | Commande |
|---|---|
| Appliquer un manifest | kubectl apply -f manifest.yaml |
| Appliquer un dossier | kubectl apply -f ./manifests/ |
| Appliquer depuis une URL | kubectl apply -f https://example.com/manifest.yaml |
| Supprimer par manifest | kubectl delete -f manifest.yaml |
| Supprimer une ressource | kubectl delete deployment nginx |
| Supprimer tout dans un namespace | kubectl delete all --all -n mon-ns |
| Get en JSON | kubectl get pod mon-pod -o json |
| Extraire un champ avec jsonpath | kubectl get pod mon-pod -o jsonpath='{.status.podIP}' |
Ressources
- Cheatsheet officielle : https://kubernetes.io/docs/reference/kubectl/cheatsheet/
- Référence kubectl : https://kubernetes.io/docs/reference/kubectl/
- Playground : https://labs.play-with-k8s.com