RousselTMLEARNING

Article · Kubernetes : de la découverte à l'expertise

Aide-mémoire kubectl

1. Configuration et contextes #

Où suis-je connecté ?

Contextes et namespaces #

kubectl version --short 2>/dev/null || kubectl version
kubectl config get-contexts
kubectl config current-context
kubectl config use-context prod-eu
kubectl config set-context --current --namespace=production      # namespace par défaut
alias k=kubectl; source <(kubectl completion bash); complete -o default -F __start_kubectl k

# Utiliser un fichier kubeconfig spécifique
export KUBECONFIG=~/.kube/config:~/.kube/cluster2
kubectl --kubeconfig=./staging.yaml get nodes

2. Lire l'état du cluster #

get, describe, top, events.

Afficher les ressources #

Exemple de sortie de kubectl get pods
Un pod en CrashLoopBackOff nécessite logs et describe.
kubectl get pods|svc|deploy|ing|pvc|cm|secret|nodes|ns -A          # -A = tous les namespaces
kubectl get pods -o wide                       # IP et nœud
kubectl get pods -o yaml                       # manifeste complet
kubectl get pods --show-labels
kubectl get pods -l app=web,env=prod           # sélecteur de labels
kubectl get pods --field-selector status.phase!=Running -A
kubectl get pods --sort-by=.status.startTime
kubectl get all -n production

kubectl describe pod <pod>                     # événements, état, sondes
kubectl top nodes && kubectl top pods -A --sort-by=memory     # nécessite metrics-server
kubectl get events -A --sort-by=.lastTimestamp | tail -20

Extraire des champs avec JSONPath et custom-columns #

kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'
kubectl get nodes -o custom-columns=NOM:.metadata.name,CPU:.status.capacity.cpu,MEM:.status.capacity.memory
kubectl get secret db -o jsonpath='{.data.password}' | base64 -d
kubectl get pods -o json | jq -r '.items[] | select(.status.phase!="Running") | .metadata.name'

3. Créer, modifier, supprimer #

Cycle de vie des objets.

Commandes impératives et déclaratives #

kubectl apply -f deploy.yaml                 # déclaratif (recommandé)
kubectl apply -k overlays/prod/                # Kustomize
kubectl diff -f deploy.yaml                    # voir ce qui changerait
kubectl create deployment web --image=nginx:1.27 --replicas=2 --dry-run=client -o yaml > deploy.yaml
kubectl run debug --image=busybox -it --rm --restart=Never -- sh
kubectl expose deployment web --port=80 --target-port=8080 --type=ClusterIP
kubectl scale deployment web --replicas=5
kubectl set image deployment/web nginx=nginx:1.27.2
kubectl label pod <pod> env=prod --overwrite
kubectl annotate pod <pod> owner=equipe-a
kubectl edit deployment web                    # édition directe (à éviter en prod)
kubectl patch deployment web -p '{"spec":{"replicas":3}}'
kubectl delete -f deploy.yaml
kubectl delete pod <pod> --grace-period=0 --force     # dernier recours

Mises à jour progressives #

kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web                    # retour arrière
kubectl rollout undo deployment/web --to-revision=2
kubectl rollout restart deployment/web                 # redémarrage progressif
kubectl rollout pause deployment/web && kubectl rollout resume deployment/web

4. Déboguer #

Logs, exec, port-forward, debug.

Diagnostiquer un pod #

kubectl logs <pod>                                  # logs du conteneur
kubectl logs <pod> -c <conteneur> -f --tail=100 --since=10m
kubectl logs <pod> --previous                       # logs avant le dernier crash
kubectl logs -l app=web --all-containers --prefix   # tous les pods d'un label
kubectl exec -it <pod> -- sh                        # shell dans le pod
kubectl exec <pod> -- env | sort
kubectl port-forward svc/web 8080:80                # http://localhost:8080
kubectl port-forward pod/<pod> 5432:5432
kubectl cp <pod>:/var/log/app.log ./app.log
kubectl debug -it <pod> --image=nicolaka/netshoot --target=<conteneur>    # conteneur éphémère de debug
kubectl debug node/<noeud> -it --image=busybox      # inspecter un nœud

Droits et ressources #

kubectl auth can-i create deployments -n production
kubectl auth can-i --list --as=system:serviceaccount:prod:app
kubectl api-resources --namespaced=true
kubectl explain pod.spec.containers.resources
kubectl get --raw /metrics | head                    # métriques de l'API server
Bonne Pratique : Activez la complétion et l'alias k, et installez kubectx/kubens pour changer de contexte et de namespace en une commande.

📄 Aide-mémoire kubectl : les commandes essentielles →

Mon suivi

  • ⏱ Durée estimée : ≈ 11 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Articles recommandés

Aide-mémoire Docker : Les commandes essentielles

Un guide pratique regroupant toutes les commandes indispensables pour manipuler les images, les c...

Kubernetes : architecture et composants (control plane, nœuds, objets)

Comprendre l'architecture de Kubernetes : API server, etcd, scheduler, controller manager, kubele...

Kubernetes : Pods, ReplicaSets et Deployments (déployer et mettre à jour)

Maîtriser les workloads Kubernetes : anatomie d'un pod, ReplicaSet, Deployment, stratégies Rollin...

Kubernetes : exposer ses applications (Services, Ingress et Gateway API)

Exposer des applications dans Kubernetes : Services ClusterIP/NodePort/LoadBalancer, Ingress, Ing...

Kubernetes : sécuriser son cluster (RBAC, ServiceAccounts, NetworkPolicies, Pod Security)

Sécuriser Kubernetes : RBAC (Role, ClusterRole, bindings), ServiceAccounts, NetworkPolicies, Pod ...

Kubernetes : fiabilité et mise à l'échelle (probes, ressources, HPA, PDB)

Rendre une application résiliente dans Kubernetes : liveness, readiness et startup probes, reques...

Docker : vue d'ensemble, architecture et premiers pas

Découvrir Docker : conteneurs vs machines virtuelles, architecture client/daemon/registre, images...

Bonnes pratiques Docker : images, exécution, sécurité et exploitation

Les bonnes pratiques Docker : Dockerfile et builds multi-étapes, images minimales et reproductibl...