Aller au contenu principal

Kubernetes : kubectl

· 3 minutes de lecture

Kubectl est l'outil en ligne de commande officiel pour interagir avec les clusters Kubernetes. Il couvre l'intégralité des opérations courantes : déploiement, débogage, inspection, mise à l'échelle.

Configuration et contextes

Kubectl utilise des contextes pour basculer entre différents clusters :

# Lister tous les contextes disponibles
kubectl config get-contexts

# Afficher le contexte actuel
kubectl config current-context

# Changer de contexte
kubectl config use-context mon-cluster-prod

# Définir le namespace par défaut pour le contexte actuel
kubectl config set-context --current --namespace=production

Commandes de base

Gestion des ressources

# Créer ou mettre à jour une ressource depuis un fichier YAML
kubectl apply -f deployment.yaml

# Créer plusieurs ressources depuis un répertoire
kubectl apply -f ./manifests/

# Supprimer une ressource
kubectl delete -f deployment.yaml
kubectl delete deployment mon-deployment

Consultation des ressources

# Lister les ressources
kubectl get pods
kubectl get pods -o wide # avec IP et nœud
kubectl get pod mon-pod -o yaml # manifest complet

# Tous les namespaces
kubectl get pods -A

# Filtrer par labels
kubectl get pods -l app=nginx
kubectl get pods -l environment=production,tier=frontend

# Trier les résultats
kubectl get pods --sort-by=.metadata.creationTimestamp

Informations détaillées

# Description complète + événements
kubectl describe pod mon-pod
kubectl describe deployment mon-deployment
kubectl describe node mon-node

# Logs
kubectl logs mon-pod
kubectl logs -f mon-pod # temps réel
kubectl logs mon-pod -c mon-conteneur # conteneur spécifique
kubectl logs mon-pod --tail=100
kubectl logs mon-pod --since=5m
kubectl logs mon-pod --previous # conteneur précédent (crash)

Commandes avancées

Exécution dans les pods

# Exécuter une commande
kubectl exec mon-pod -- ls /app

# Shell interactif
kubectl exec -it mon-pod -- /bin/bash
kubectl exec -it mon-pod -c mon-conteneur -- /bin/sh

# Copier des fichiers
kubectl cp mon-pod:/app/config.json ./config.json
kubectl cp ./config.json mon-pod:/app/config.json

Port-forwarding

kubectl port-forward pod/mon-pod 8080:80
kubectl port-forward service/mon-service 8080:80
kubectl port-forward --address 0.0.0.0 pod/mon-pod 8080:80

Débogage

# Événements du cluster
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events --field-selector type=Warning

# Utilisation des ressources
kubectl top nodes
kubectl top pods
kubectl top pods --containers

# Pods en erreur
kubectl get pods --field-selector=status.phase=Failed

Rollout et mise à l'échelle

# Mise à jour d'image
kubectl set image deployment/mon-deployment nginx=nginx:1.21

# Mise à l'échelle
kubectl scale deployment mon-deployment --replicas=5

# Rollout
kubectl rollout status deployment/mon-deployment
kubectl rollout history deployment/mon-deployment
kubectl rollout pause deployment/mon-deployment
kubectl rollout resume deployment/mon-deployment
kubectl rollout undo deployment/mon-deployment
kubectl rollout undo deployment/mon-deployment --to-revision=2

Filtrage avancé

JSONPath

# Noms des pods
kubectl get pods -o jsonpath='{.items[*].metadata.name}'

# IPs des pods
kubectl get pods -o jsonpath='{.items[*].status.podIP}'

# Noms et IPs tabulés
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'

# Images des conteneurs
kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'

Custom columns

kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,IP:.status.podIP

kubectl get deployments -o custom-columns=NAME:.metadata.name,DESIRED:.spec.replicas,CURRENT:.status.replicas