Avant tout (dans l'ordre)
kubectl config current-context: bon cluster ? Sinon, s'arrêter.- Lire d'abord (
get,describe,logs), puis prévisualiser (--dry-run=client,diff), puis seulement appliquer. - Un seul espace de noms visé (
-n <ESPACE-DE-NOMS>), jamais « tous » pour une action à effet. - Cluster d'essai jetable pour s'exercer ; jamais de kubeconfig de production sur un poste partagé.
Attention : les Secrets sont non chiffrés par défaut dans etcd (simple base64) ; un kubeconfig et un fichier YAML de Secret sont des secrets : jamais dans un dépôt, un message, une capture ni un prompt.
Schéma de repère
Le plan de contrôle (API, etcd, scheduler, controllers) décide ; chaque nœud (kubelet, kube-proxy, runtime) exécute les Pods. On modifie un état souhaité dans l'API, les contrôleurs le réalisent.
Composants
| Composant | Rôle |
|---|---|
kube-apiserver | API HTTP, point d'entrée unique |
etcd | magasin clé-valeur de tout l'état (Secrets compris) |
kube-scheduler | choisit le nœud d'un Pod |
kube-controller-manager | contrôleurs : état réel vers état souhaité |
cloud-controller-manager | lien avec le cloud (optionnel) |
kubelet | fait tourner les Pods sur le nœud |
kube-proxy | règles réseau des Services (optionnel) |
Objets
| Objet | En bref |
|---|---|
| Pod | un ou plusieurs conteneurs, éphémère |
| Deployment | N copies de Pods, mise à jour progressive (via ReplicaSet) |
| Service | point d'accès stable ; ClusterIP, NodePort, LoadBalancer, ExternalName |
| Ingress | règles HTTP(S) vers des Services ; inutile sans contrôleur ; API gelée, Gateway API recommandée |
| ConfigMap | configuration non confidentielle |
| Secret | donnée sensible, base64 ≠ chiffrement |
| Namespace | découpage logique (noms, droits, quotas), pas une frontière réseau |
| PV / PVC / StorageClass | stockage / demande de stockage / catalogue pour le provisionnement dynamique |
| Labels, sélecteurs | clé-valeur sur les objets ; un Service, un Deployment ou une NetworkPolicy retrouvent leurs Pods par labels |
Le spec.selector d'un Deployment est immuable après création.
kubectl en lecture (sans risque)
| Commande | Rôle |
|---|---|
kubectl config current-context | contexte actif |
kubectl config get-contexts | liste des contextes |
kubectl get nodes | nœuds et leur état |
kubectl get pods -n <ESPACE-DE-NOMS> -o wide | Pods avec nœud et IP |
kubectl get pods -A | tous les espaces de noms |
kubectl describe pod <NOM> -n <ESPACE-DE-NOMS> | détail et événements |
kubectl logs <NOM> -n <ESPACE-DE-NOMS> | journaux (peuvent contenir des données) |
kubectl api-resources | types d'objets disponibles |
kubectl explain pods.spec.containers | documentation d'un champ |
kubectl auth can-i <verbe> <ressource> | ai-je ce droit ? |
kubectl diff -f <fichier> | ce qui changerait |
kubectl top pod | consommation (nécessite un serveur de métriques : non vérifié) |
-o yaml sur un Secret affiche ses valeurs encodées : à éviter. Options exactes selon la version : non vérifié.
Agir (à effet : prudence)
| Commande | Effet | Prudence |
|---|---|---|
kubectl apply --dry-run=client -f <fichier> | prévisualise | sans effet sur le cluster |
kubectl apply -f <fichier> | crée ou modifie | prévisualiser, contexte vérifié, cluster d'essai |
kubectl rollout status deployment/<NOM> | suit une mise à jour | lecture |
kubectl rollout history deployment/<NOM> | historique des révisions | lecture |
kubectl rollout undo deployment/<NOM> | revient à la révision précédente | nouvelle mise à jour progressive |
kubectl delete -f <fichier> | supprime les objets du fichier | relire le fichier ; données des Pods perdues |
kubectl delete pvc <NOM> | supprime la demande de stockage | selon la politique Delete, données détruites |
kubectl drain <NŒUD> / kubectl taint ... | évacue un nœud / en change le placement | non étudiées ici : non vérifié, jamais hors cluster d'essai |
- Contexte : cluster d'essai jetable, contexte vérifié, fichier relu. Droits : selon RBAC (ne pas élargir pour « faire marcher »). Vérification :
kubectl getetrollout statusaprès chaque action. Retour arrière :rollout undopour un Deployment ; sinon recréer depuis le fichier (les données non persistantes sont perdues).
Mise à jour progressive
- Stratégie par défaut RollingUpdate :
maxUnavailable(Pods indisponibles au maximum) etmaxSurge(Pods en surplus au maximum) ; valeurs par défaut : non relevées. - Changer le modèle de Pod (image...) crée un nouveau ReplicaSet et une révision.
- Étiquette d'image précise plutôt que
latest(conseil de pratique, non relu sur la page).
Sondes
| Sonde | Échec = |
|---|---|
| Liveness | conteneur redémarré |
| Readiness | Pod retiré du Service |
| Startup | protège un démarrage lent |
Méthodes : httpGet (200 à 399), tcpSocket, exec, grpc. Défauts : periodSeconds 10, failureThreshold 3, initialDelaySeconds 0, successThreshold 1. Liveness agressive = pannes en cascade.
Ressources
| Notion | Repère |
|---|---|
requests | garanti, sert au placement par le scheduler |
limits | plafond ; CPU : bridage ; mémoire : arrêt possible (OOMKilled) |
| Unités | 500m = 0,5 cœur ; 128Mi, 1Gi |
Sécurité de base
| Sujet | Repère |
|---|---|
| RBAC | Role/ClusterRole (permissions) + RoleBinding/ClusterRoleBinding (à qui) ; additif, pas de refus ; moindre privilège |
| Pod Security | profils Privileged, Baseline, Restricted ; labels d'espace de noms pod-security.kubernetes.io/enforce, audit, warn ; commencer par warn |
| NetworkPolicy | Pods non isolés par défaut ; sans plugin réseau compatible, aucun effet |
| Secrets | chiffrement au repos à activer, RBAC strict, montage minimal, coffre externe envisagé |
Attention : ne jamais donner cluster-admin « pour tester » ; qui peut créer un Pod dans un espace peut lire les Secrets de cet espace.
Cluster local jetable et services gérés
- kind (
kind create cluster,kind delete cluster) : nœuds en conteneurs, Docker ou Podman requis ; contexte ajouté au kubeconfig. minikube (minikube start,minikube delete) : 2 CPU, 2 Go, 20 Go libres. Les installer modifie le poste ; ne jamais exécuter un script téléchargé sans l'avoir lu. - EKS, AKS, GKE, OKE : plan de contrôle géré par le fournisseur ; offres, versions et prix non repris ici : voir la section Cloud.
Pièges fréquents
| Symptôme | Piste de lecture |
|---|---|
| Service sans réponse | sélecteur sans correspondance de labels ; Pods non prêts (readiness) |
| Pod redémarre en boucle | kubectl describe pod, kubectl logs, liveness trop sévère, OOMKilled |
Pod en attente (Pending) | requêtes trop grandes pour les nœuds, PVC non lié |
| Ingress sans effet | aucun contrôleur Ingress installé |
| NetworkPolicy sans effet | plugin réseau sans prise en charge |
Forbidden | RBAC : vérifier avec kubectl auth can-i |
Ces pistes sont des repères de diagnostic de bon sens, non tous relus sur une page officielle.
Sources
Consultées le 18 octobre 2026 (documentation v1.37 ; version de Stéphane inconnue).
- Kubernetes Components (s’ouvre dans un nouvel onglet) · Releases (s’ouvre dans un nouvel onglet)
- Deployments (s’ouvre dans un nouvel onglet) · Service (s’ouvre dans un nouvel onglet) · Ingress (s’ouvre dans un nouvel onglet)
- Secrets (s’ouvre dans un nouvel onglet) · Persistent Volumes (s’ouvre dans un nouvel onglet)
- Probes (s’ouvre dans un nouvel onglet) · Resource Management (s’ouvre dans un nouvel onglet)
- RBAC (s’ouvre dans un nouvel onglet) · Pod Security Standards (s’ouvre dans un nouvel onglet) · Network Policies (s’ouvre dans un nouvel onglet)
- kubectl Quick Reference (s’ouvre dans un nouvel onglet) · kind (s’ouvre dans un nouvel onglet) · minikube (s’ouvre dans un nouvel onglet)