05-Mode impératif-Kubectl
L’API et les Objets Kubernetes
Utiliser Kubernetes consiste à déclarer des objets grâce à l’API Kubernetes pour décrire l’état souhaité d’un cluster.
On définit des objets généralement via l’interface en ligne de commande et kubectl de deux façons :
-
De manière impérative : en lançant une commande
kubectl run <conteneur> ...,kubectl expose ... -
De manière déclarative : en décrivant un objet dans un fichier (manifeste) YAML ou JSON et en le passant au client
kubectl apply -f monpod.yml
Définition de l’état souhaité d’un cluster dans Kubernetes
L’état souhaité représente la description exacte de ce que doit être ton cluster. Exemple, le nombre de pods, leur configuration, les images utilisées, les ressources, les règles réseau, etc.
Kubernetes compare en permanence l’état actuel du cluster avec l’état souhaité défini dans les manifestes YAML. S’il détecte un écart, il corrige automatiquement pour revenir à l’état demandé.
C’est le principe fondamental de l’orchestration déclarative.
Kubectl la manière impérative
kubectl est la CLI officielle de Kubernetes. Chaque commande fait une requête REST vers l’API Server. Cette commande permet d’inspecter, déployer, déboguer et maintenir les ressources du cluster.
Toutes les commandes kubectl suivent le même schéma : kubectl [VERBE] [TYPE] [NOM] [OPTIONS]
- Verbe : get, apply, delete, describe, logs
- Type : pod, deployment, service, node, configmap
- Nom : optionnel (sans nom = toutes les ressources)
- Options : -n, -o, -l, –watch, –dry-run, etc.
Guide en 12 points avec kubectl pour être opérationnel
1. Informations générales sur le cluster
# Voir les infos du cluster
kubectl cluster-info
# Lister les nodes
kubectl get nodes
# Voir les détails d’un node
kubectl describe node <nom>
2. Namespaces
# Lister les namespaces
kubectl get namespaces
# Lister les Pods d’un namespace
kubectl get pods -n <namespace>
# Créer un namespace
kubectl create namespace <nom>
3. Pods
# Lister les Pods
kubectl get pods
# Lister les Pods dans tous les namespaces
kubectl get pods -A
# Voir les détails d’un Pod
kubectl describe pod <nom>
# Voir les logs d’un Pod
kubectl logs <pod>
# Voir les logs d’un Pod avec plusieurs conteneurs
kubectl logs <pod> -c <container>
# Exécuter une commande dans un Pod
kubectl exec -it <pod> -- bash
# Supprimer un Pod
kubectl delete pod <nom>
4. Deployments
# Lister les Deployments
kubectl get deployments
# Créer un Deployment
kubectl create deployment nginx --image=nginx
# Mettre à jour l’image d’un Deployment
kubectl set image deployment/nginx nginx=nginx:1.25
# Scaler un Deployment
kubectl scale deployment/nginx --replicas=3
# Voir l’état du rollout
kubectl rollout status deployment/nginx
# Faire un rollback
kubectl rollout undo deployment/nginx
# Supprimer un Deployment
kubectl delete deployment <nom>
5. ReplicaSets
# Lister les ReplicaSets
kubectl get rs
# Voir les détails d’un ReplicaSet
kubectl describe rs <nom>
6. Services
# Lister les Services
kubectl get svc
# Créer un Service NodePort
kubectl expose deployment nginx --port=80 --type=NodePort
# Voir les endpoints associés
kubectl get endpoints
# Supprimer un Service
kubectl delete svc <nom>
7. Ingress
# Lister les Ingress
kubectl get ingress
# Voir les détails d’un Ingress
kubectl describe ingress <nom>
8. ConfigMaps
# Lister les ConfigMaps
kubectl get configmaps
# Créer un ConfigMap depuis un fichier
kubectl create configmap monconfig --from-file=config.yaml
# Créer un ConfigMap depuis une valeur
kubectl create configmap monconfig --from-literal=env=prod
9. Debug & Troubleshooting
# Décrire un objet (super utile)
kubectl describe <type> <nom>
# Voir les événements du cluster
kubectl get events --sort-by=.metadata.creationTimestamp
# Port-forward (accès local)
kubectl port-forward pod/<pod> 8080:80
10. Stockage (PV / PVC / StorageClass)
# Lister les PersistentVolumes
kubectl get pv
# Lister les PersistentVolumeClaims
kubectl get pvc
# Lister les StorageClasses
kubectl get storageclass
11. Fichiers YAML (apply / delete / output)
# Appliquer un fichier YAML
kubectl apply -f fichier.yaml
# Supprimer un fichier YAML
kubectl delete -f fichier.yaml
# Afficher un objet en YAML
kubectl get deployment nginx -o yaml
12. Raccourcis utiles
# Raccourcis kubectl
kubectl get po # Pods
kubectl get deploy # Deployments
kubectl get svc # Services
kubectl get ns # Namespaces
kubectl get rs # ReplicaSets
kubectl get cm # ConfigMaps
kubectl get secret # Secrets