Aller au contenu

Cheat-sheet kubectl

k9s va vite, mais kubectl reste indispensable (scripts, CI, ce que k9s ne fait pas).

Lecture

bash kubectl get pods # pods du namespace courant kubectl get pods -A # tous les namespaces kubectl get pods -o wide # + IP et nœud kubectl get pods -w # watch (temps réel) kubectl get all -n mon-ns # tout dans un namespace kubectl describe pod mon-pod # détails + events (debug !) kubectl get pod mon-pod -o yaml # YAML complet kubectl api-resources # liste des types de ressources

Logs & exec

bash kubectl logs mon-pod # logs kubectl logs mon-pod -f # suivre (follow) kubectl logs mon-pod --previous # logs du conteneur précédent (crash) kubectl logs deploy/web # logs d'un deployment kubectl exec -it mon-pod -- sh # shell dans le pod kubectl cp mon-pod:/chemin ./local # copier un fichier

Créer / modifier

bash kubectl create deployment web --image=nginx --replicas=3 kubectl apply -f manifest.yaml # appliquer (idempotent) kubectl delete -f manifest.yaml kubectl edit deploy web # éditer en live kubectl scale deploy web --replicas=5 kubectl rollout restart deploy web # redémarrer les pods kubectl rollout status deploy web kubectl rollout undo deploy web # rollback

Debug

bash kubectl get events --sort-by=.lastTimestamp kubectl describe pod mon-pod # cause d'un CrashLoop / Pending kubectl top pods # conso CPU/mémoire (metrics-server requis) kubectl get pod mon-pod -o jsonpath='{.status.phase}' kubectl run debug --rm -it --image=busybox -- sh # pod jetable de debug

Réseau

bash kubectl port-forward svc/web 8080:80 # exposer un service en local kubectl get svc # services + ClusterIP kubectl get ingress kubectl get endpoints web # à quels pods pointe le service

RBAC & contexte

bash kubectl auth can-i create pods # ai-je le droit ? kubectl auth can-i '*' '*' --as=system:serviceaccount:default:monsa kubectl config get-contexts kubectl config use-context mon-cluster kubectl config set-context --current --namespace=mon-ns

Raccourcis bien pratiques

bash alias k=kubectl kubectl explain pod.spec.containers # doc intégrée d'un champ kubectl get pods --field-selector status.phase=Running kubectl label pod mon-pod env=test kubectl get pods -l app=web # filtrer par label