Aller au contenu
Sommaire

Fiche mémo Kubernetes (architecture, objets, kubectl en lecture, sondes, ressources, RBAC et sécurité de base)

Fiche mémo · environ 6 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. Sources

Avant tout (dans l'ordre)

  1. kubectl config current-context : bon cluster ? Sinon, s'arrêter.
  2. Lire d'abord (get, describe, logs), puis prévisualiser (--dry-run=client, diff), puis seulement appliquer.
  3. Un seul espace de noms visé (-n <ESPACE-DE-NOMS>), jamais « tous » pour une action à effet.
  4. 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

ComposantRôle
kube-apiserverAPI HTTP, point d'entrée unique
etcdmagasin clé-valeur de tout l'état (Secrets compris)
kube-schedulerchoisit le nœud d'un Pod
kube-controller-managercontrôleurs : état réel vers état souhaité
cloud-controller-managerlien avec le cloud (optionnel)
kubeletfait tourner les Pods sur le nœud
kube-proxyrègles réseau des Services (optionnel)

Objets

ObjetEn bref
Podun ou plusieurs conteneurs, éphémère
DeploymentN copies de Pods, mise à jour progressive (via ReplicaSet)
Servicepoint d'accès stable ; ClusterIP, NodePort, LoadBalancer, ExternalName
Ingressrègles HTTP(S) vers des Services ; inutile sans contrôleur ; API gelée, Gateway API recommandée
ConfigMapconfiguration non confidentielle
Secretdonnée sensible, base64 ≠ chiffrement
Namespacedécoupage logique (noms, droits, quotas), pas une frontière réseau
PV / PVC / StorageClassstockage / demande de stockage / catalogue pour le provisionnement dynamique
Labels, sélecteursclé-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)

CommandeRôle
kubectl config current-contextcontexte actif
kubectl config get-contextsliste des contextes
kubectl get nodesnœuds et leur état
kubectl get pods -n <ESPACE-DE-NOMS> -o widePods avec nœud et IP
kubectl get pods -Atous 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-resourcestypes d'objets disponibles
kubectl explain pods.spec.containersdocumentation d'un champ
kubectl auth can-i <verbe> <ressource>ai-je ce droit ?
kubectl diff -f <fichier>ce qui changerait
kubectl top podconsommation (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)

CommandeEffetPrudence
kubectl apply --dry-run=client -f <fichier>prévisualisesans effet sur le cluster
kubectl apply -f <fichier>crée ou modifieprévisualiser, contexte vérifié, cluster d'essai
kubectl rollout status deployment/<NOM>suit une mise à jourlecture
kubectl rollout history deployment/<NOM>historique des révisionslecture
kubectl rollout undo deployment/<NOM>revient à la révision précédentenouvelle mise à jour progressive
kubectl delete -f <fichier>supprime les objets du fichierrelire le fichier ; données des Pods perdues
kubectl delete pvc <NOM>supprime la demande de stockageselon la politique Delete, données détruites
kubectl drain <NŒUD> / kubectl taint ...évacue un nœud / en change le placementnon é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 get et rollout status après chaque action. Retour arrière : rollout undo pour 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) et maxSurge (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 =
Livenessconteneur redémarré
ReadinessPod retiré du Service
Startupprotè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

NotionRepère
requestsgaranti, sert au placement par le scheduler
limitsplafond ; CPU : bridage ; mémoire : arrêt possible (OOMKilled)
Unités500m = 0,5 cœur ; 128Mi, 1Gi

Sécurité de base

SujetRepère
RBACRole/ClusterRole (permissions) + RoleBinding/ClusterRoleBinding (à qui) ; additif, pas de refus ; moindre privilège
Pod Securityprofils Privileged, Baseline, Restricted ; labels d'espace de noms pod-security.kubernetes.io/enforce, audit, warn ; commencer par warn
NetworkPolicyPods non isolés par défaut ; sans plugin réseau compatible, aucun effet
Secretschiffrement 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ômePiste de lecture
Service sans réponsesélecteur sans correspondance de labels ; Pods non prêts (readiness)
Pod redémarre en bouclekubectl 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 effetaucun contrôleur Ingress installé
NetworkPolicy sans effetplugin réseau sans prise en charge
ForbiddenRBAC : 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).