k3s est une distribution Kubernetes allégée, entièrement certifiée par la CNCF (Cloud Native Computing Foundation).
k3s est bien une distribution certifiée par la CNCF, conçue pour être très légère et adaptée aux environnements contraints (IoT, Edge) ainsi qu'au développement local.
Un Service de type ClusterIP est directement accessible depuis l'Internet public sans configuration supplémentaire.
Un Service ClusterIP n'attribue qu'une IP interne au cluster. Pour l'exposer à l'extérieur, il faut utiliser un Service de type NodePort, LoadBalancer ou une ressource Ingress.
Lors d'un déploiement avec mise à jour progressive (RollingUpdate), Kubernetes supprime tous les anciens pods avant de lancer les nouveaux.
C'est la stratégie Recreate qui supprime tout avant de recréer. Le RollingUpdate remplace les pods de manière progressive sans interruption de service.
Un DaemonSet s'assure qu'un nombre précis de réplicas de pods est réparti équitablement entre les nœuds via le rééquilibrage de charge.
C'est le rôle du Deployment / ReplicaSet. Un DaemonSet veille à exécuter une copie du Pod sur chaque nœud (ou un sous-ensemble sélectionné) du cluster.
Si une sonde livenessProbe échoue, Kubernetes retire temporairement le pod des endpoints du Service sans redémarrer le conteneur.
En cas d'échec de la livenessProbe, Kubernetes tue et redémarre le conteneur. C'est la readinessProbe qui retire le pod des endpoints du Service sans le redémarrer.
La commande kubectl describe pod <nom_pod> permet de consulter les logs applicatifs générés sur la sortie standard (stdout) du conteneur.
Pour consulter les logs applicatifs (stdout/stderr), on utilise kubectl logs <nom_pod>. kubectl describe affiche les événements et détails de configuration de la ressource.
Un Service Headless (clusterIP: None) n'alloue pas d'IP de cluster globale et s'appuie sur le DNS pour retourner directement les IP des pods ciblés.
Le service Headless permet la découverte directe des IP des pods via les enregistrements DNS A/AAAA, utile pour les architectures d'état (StatefulSet).
Les étiquettes (labels) et sélecteurs (selectors) sont le mécanisme fondamental utilisé par un Service pour identifier les Pods vers lesquels router le trafic.
Le couplage est lâche dans Kubernetes : le Service utilise son spec.selector pour filtrer les Pods possédant les labels correspondants.
Les conteneurs d'un même Pod possèdent chacun leur propre adresse IP distincte au sein du réseau du cluster.
Tous les conteneurs situés au sein d'un même Pod partagent la même adresse IP et l'espace de noms réseau (network namespace), et communiquent entre eux via localhost.
k3s réunit l'API Server, le Controller Manager, le Scheduler et le Kubelet au sein d'un unique processus binaire optimisé en Go.
C'est l'une des innovations de k3s : encapsuler les composants du control plane et de l'agent dans un binaire unique pour réduire la consommation de ressources.
La métrique maxSurge dans un Deployment indique le nombre maximal de pods qui peuvent être indisponibles pendant le processus de mise à jour.
maxSurge indique le nombre maximal de pods autorisés au-dessus du nombre de réplicas cible. C'est maxUnavailable qui définit le nombre maximal de pods indisponibles pendant la mise à jour.
kube-proxy gère le routage réseau de couche 7 (HTTP/HTTPS) vers les pods à l'intérieur du cluster.
kube-proxy s'occupe de la couche 3/4 (TCP, UDP, SCTP) via iptables ou IPVS. Le routage applicatif couche 7 est pris en charge par l'Ingress Controller (ex. Traefik).