Déployer la plus petite unité de charge de travail possible, co-localisée.
→Définir une ressource `Pod`. Les Pods peuvent contenir un ou plusieurs conteneurs qui partagent le réseau et le stockage.
Pourquoi: Le Pod est l'unité atomique de planification dans Kubernetes. Les conteneurs sont toujours déployés au sein d'un Pod.
Référence↗
S'assurer que l'état du cluster correspond en permanence à un état désiré.
→S'appuyer sur le `kube-controller-manager`. Il exécute des boucles de contrôle qui surveillent les ressources (par exemple, ReplicaSets, Deployments) et réconcilient les différences.
Pourquoi: C'est le mécanisme déclaratif et auto-réparateur essentiel. Si un Pod géré par un ReplicaSet meurt, le contrôleur le remplace automatiquement.
Attribuer automatiquement les Pods nouvellement créés au nœud de travail le plus approprié.
→S'appuyer sur le `kube-scheduler`. Il filtre les nœuds en fonction des exigences des Pods (par exemple, les requêtes de ressources) et les note pour choisir le meilleur ajustement.
Pourquoi: Le scheduler prend des décisions de placement basées sur la politique, l'affinité et la disponibilité, en masquant la sélection des nœuds à l'utilisateur.
S'assurer que les conteneurs spécifiés dans les Pods sont en cours d'exécution et sains sur un nœud de travail donné.
→L'agent `kubelet` s'exécute sur chaque nœud, communique avec le serveur API et gère le cycle de vie des conteneurs (démarrage, arrêt, vérifications de santé) via un runtime de conteneurs.
Pourquoi: Kubelet est le lien entre le plan de contrôle et le nœud de travail ; il exécute les spécifications des Pods.
Persister de manière fiable l'état et la configuration entiers du cluster Kubernetes.
→Utiliser `etcd`, un magasin clé-valeur cohérent et hautement disponible. Il sert de source unique de vérité pour le cluster.
Pourquoi: Tous les objets du cluster (Pods, Services, etc.) sont stockés dans etcd. Seul le serveur API communique directement avec lui.
Implémenter des règles réseau sur chaque nœud pour permettre la communication via les Services Kubernetes.
→Le composant `kube-proxy` sur chaque nœud maintient les règles réseau (par exemple, iptables, IPVS) qui acheminent le trafic d'une IP de Service vers les Pods backend corrects.
Pourquoi: Kube-proxy est le détail d'implémentation derrière l'abstraction Service, gérant l'équilibrage de charge et le routage.
Partitionner logiquement un seul cluster Kubernetes pour plusieurs équipes, projets ou environnements.
→Créer des ressources `Namespace`. Les Namespaces fournissent une portée pour les noms et un moyen d'attacher l'autorisation et les politiques (par exemple, ResourceQuotas).
Pourquoi: Les Namespaces permettent la mutualisation et l'organisation des ressources sans la surcharge de plusieurs clusters.
Fournir un point de terminaison réseau stable (IP et DNS) pour un ensemble de Pods éphémères.
→Définir une ressource `Service` qui cible un ensemble de Pods à l'aide d'un sélecteur d'étiquettes.
Pourquoi: Les Pods sont éphémères et leurs IPs changent. Un Service fournit une abstraction durable qui équilibre la charge du trafic vers les Pods corrects.
Référence↗
Exposer une application s'exécutant dans des Pods à différentes portées réseau.
→Choisir un `type` de Service : `ClusterIP` (interne uniquement, par défaut), `NodePort` (expose sur chaque nœud IP:port), ou `LoadBalancer` (provisionne un équilibreur de charge cloud).
Pourquoi: Le type de Service détermine l'accessibilité de l'application, de purement interne à entièrement externe.
Permettre la découverte réseau directe de Pods individuels, en contournant le proxy du Service.
→Créer un `Service` avec `clusterIP: None`. Cela crée des enregistrements DNS A pour chaque Pod, permettant aux clients de se connecter directement aux Pods.
Pourquoi: Essentiel pour les applications avec état comme les bases de données (souvent avec des StatefulSets) où une communication pair-à-pair ou une identité de Pod stable est requise.
Organiser et sélectionner un sous-ensemble d'objets Kubernetes.
→Attacher des `labels` clé-valeur aux objets (par exemple, `app: my-api`). Utiliser des `label selectors` dans d'autres objets (par exemple, Services, Deployments) pour les cibler.
Pourquoi: Les Labels sont le mécanisme de regroupement central dans Kubernetes, permettant un couplage lâche entre les ressources.
Désolidariser la configuration de l'application de l'image du conteneur.
→Stocker les données de configuration non sensibles dans un `ConfigMap`. Le monter comme un volume ou injecter des clés comme variables d'environnement dans les Pods.
Pourquoi: Cela permet de gérer la configuration indépendamment du code de l'application, suivant les principes de la 12-Factor App.
Stocker des données sensibles comme des mots de passe, des jetons ou des clés API pour l'utilisation de l'application.
→Utiliser un objet `Secret`. Monter comme un volume ou injecter comme une variable d'environnement.
Pourquoi: Les Secrets sont spécifiquement destinés aux données sensibles et sont traités plus sûrement que les ConfigMaps (par exemple, non affichés par défaut dans `kubectl describe`, peuvent être chiffrés au repos).
Fournir aux applications avec état un stockage qui survit aux redémarrages de Pods.
→Un Pod crée une `PersistentVolumeClaim` (PVC) pour demander du stockage. Un administrateur provisionne un `PersistentVolume` (PV) qui satisfait la demande.
Pourquoi: Cela découple la consommation de stockage (PVC) du provisionnement de stockage (PV), permettant des définitions de charge de travail portables.
Gérer l'allocation de CPU et de mémoire pour les conteneurs.
→Définir `resources.requests` pour les ressources garanties (utilisées pour la planification) et `resources.limits` pour l'utilisation maximale autorisée (appliquée à l'exécution).
Pourquoi: Les requêtes garantissent que les Pods disposent de suffisamment de ressources pour fonctionner ; les limites empêchent les Pods de consommer trop de ressources et d'impacter d'autres charges de travail.
Définir des contraintes de ressources agrégées sur un namespace.
→Créer un objet `ResourceQuota` pour limiter la quantité totale de CPU, de mémoire ou le nombre d'objets (Pods, Services) pouvant être créés dans un namespace.
Pourquoi: Les ResourceQuotas sont essentiels pour les environnements mutualisés afin d'assurer un partage équitable des ressources et de prévenir la surconsommation.
Gérer les ressources Kubernetes à l'aide de fichiers de configuration versionnés.
→Utiliser `kubectl apply -f <filename.yaml>`. Cette commande crée ou met à jour des ressources en fonction du contenu du fichier.
Pourquoi: `apply` est déclaratif, ce qui le rend idéal pour GitOps et CI/CD. Il suit les changements et effectue une fusion à trois voies, ce qui est plus sûr que les commandes impératives `create` ou `replace`.
Diagnostiquer pourquoi un Pod ne fonctionne pas correctement (par exemple, bloqué en Pending, ContainerCreating, ou CrashLoopBackOff).
→Utiliser `kubectl describe pod <nom-du-pod>`. Vérifier la section `Events` en bas pour des messages détaillés du scheduler, kubelet ou des contrôleurs.
Pourquoi: `describe` fournit un journal d'événements chronologique qui est l'outil principal pour déboguer les problèmes de cycle de vie des ressources.
Fournir des fonctionnalités réseau pour les conteneurs, permettant la communication de Pod à Pod à travers le cluster.
→Utiliser un plugin Container Network Interface (CNI) (par exemple, Calico, Flannel, Cilium). Le kubelet sur chaque nœud utilise le plugin CNI pour configurer le réseau pour chaque Pod.
Pourquoi: CNI fournit une interface standard, permettant à Kubernetes d'être intégré avec diverses solutions réseau sans modifier les composants centraux.
Contrôler l'accès aux ressources de l'API Kubernetes pour les utilisateurs et les applications.
→Utiliser le contrôle d'accès basé sur les rôles (RBAC). Définir un `Role` (avec portée de namespace) ou un `ClusterRole` (avec portée de cluster) avec des permissions, et le lier à un sujet (Utilisateur, Groupe, ServiceAccount) à l'aide d'un `RoleBinding` ou d'un `ClusterRoleBinding`.
Pourquoi: RBAC est la norme pour sécuriser Kubernetes, permettant le principe du moindre privilège pour toutes les interactions API.
Référence↗