Kubernetes est une plateforme open-source pour automatiser le déploiement, la mise à l'échelle, le réseau et la gestion des applications conteneurisées. Elle fournit une couche de contrôle cohérente pour exécuter des charges de travail sur des clusters de machines, tout en permettant aux équipes de définir l'état souhaité de leurs applications.
Kubernetes est largement utilisé dans des environnements cloud-native, mais ce n'est pas une exigence pour chaque application conteneurisée. Sa valeur dépend de l'échelle, des besoins opérationnels, des capacités de l'équipe et de la complexité des charges de travail gérées.
Qu'est-ce que Kubernetes ?
Kubernetes, souvent abrégé en K8s, est une plateforme d'orchestration de conteneurs initialement développée chez Google et maintenant maintenue en tant que projet open-source sous la Cloud Native Computing Foundation. Il coordonne les conteneurs à travers un cluster et fournit des mécanismes pour la planification, la découverte de services, la mise à l'échelle, la configuration et la récupération des charges de travail.
Au lieu de dire manuellement aux serveurs individuels exactement quoi exécuter, les administrateurs décrivent l'état souhaité de l'application. Les contrôleurs Kubernetes travaillent en continu pour faire évoluer l'environnement réel vers cet état.
Comment fonctionne Kubernetes
- Une équipe définit les exigences de l'application dans les ressources Kubernetes.
- Le plan de contrôle Kubernetes stocke et traite l'état souhaité.
- Le planificateur sélectionne des nœuds de travail appropriés pour les charges de travail.
- Les agents Kubelet sur les nœuds de travail garantissent que les charges de travail assignées fonctionnent.
- Les contrôleurs surveillent les ressources et réagissent lorsque l'état réel diffère de l'état souhaité.
- Les composants réseau rendent les services accessibles à l'intérieur ou à l'extérieur du cluster.
Ce modèle déclaratif est l'une des idées centrales de Kubernetes. Si un conteneur échoue ou si une charge de travail a besoin de répliques supplémentaires, Kubernetes peut prendre des mesures correctives selon sa configuration.
Composants principaux de Kubernetes
Cluster
Un cluster Kubernetes est l'environnement global dans lequel les charges de travail s'exécutent. Il contient le plan de contrôle et un ou plusieurs nœuds de travail.
Plan de contrôle
Le plan de contrôle gère l'état souhaité du cluster et coordonne les principales fonctions d'orchestration. Les composants clés incluent le serveur API, le planificateur, le gestionnaire de contrôleurs et le stockage de l'état du cluster.
Nœuds
Les nœuds de travail fournissent les ressources de calcul où les charges de travail d'application s'exécutent. Chaque nœud a des composants qui communiquent avec le plan de contrôle et gèrent les conteneurs.
Pods
Un Pod est l'unité déployable de base de Kubernetes. Il peut contenir un ou plusieurs conteneurs étroitement liés qui partagent des ressources de réseau et de stockage.
Services
Un Service Kubernetes fournit un moyen stable d'accéder à un ensemble de Pods. Cette abstraction aide les applications à communiquer même lorsque les Pods individuels sont remplacés.
Déploiements
Un Déploiement gère les Pods d'application répliqués et prend en charge les mises à jour contrôlées et les rollbacks pour de nombreuses charges de travail sans état.
Kubernetes vs. Docker
| Zone | Kubernetes | Docker |
|---|---|---|
| Rôle principal | Orchestration des conteneurs et gestion des charges de travail | Outils de développement et d'exécution des conteneurs |
| Planification | Programme les charges de travail à travers les nœuds du cluster | Docker lui-même n'est pas un orchestrateur de cluster complet |
| Mise à l'échelle | Prend en charge les mécanismes de mise à l'échelle des charges de travail | Dépend de la plateforme environnante |
| Découverte de services | Fournit des abstractions de mise en réseau et de services dans le cluster | Principalement axé sur les conteneurs et les images |
| Portée typique | Environnements d'applications multi-nœuds | Flux de travail de construction et d'exécution des conteneurs |
Docker et Kubernetes ne sont pas des substituts directs. Les développeurs peuvent utiliser des outils compatibles avec Docker pour construire et empaqueter des images et Kubernetes pour orchestrer des charges de travail, bien que Kubernetes prenne en charge plusieurs environnements d'exécution de conteneurs et flux de travail d'images.
Fonctionnalités clés de Kubernetes
- Configuration déclarative : Les équipes décrivent l'état souhaité des charges de travail et des ressources.
- Planification : Kubernetes place les charges de travail sur les nœuds disponibles selon les règles de ressources et de planification.
- Auto-réparation : Les contrôleurs peuvent remplacer les Pods défaillants et maintenir les répliques demandées.
- Découverte de services : Les services fournissent des points de terminaison de mise en réseau stables pour les charges de travail.
- Mise à l'échelle : Les charges de travail peuvent être mises à l'échelle manuellement ou par le biais de mécanismes d'autoscaling pris en charge.
- Mises à jour progressives : Les déploiements peuvent remplacer progressivement les versions des applications.
- Gestion de la configuration : Les ConfigMaps et les Secrets fournissent des mécanismes pour la configuration des applications et les valeurs sensibles.
Pourquoi les organisations utilisent Kubernetes
Kubernetes peut standardiser la façon dont les équipes déploient et opèrent des applications conteneurisées. Une plateforme commune peut fournir des modèles partagés pour la planification, le réseau, l'observabilité, la sécurité et l'automatisation du déploiement.
Il peut également prendre en charge des applications nécessitant plusieurs répliques, des déploiements fréquents ou le placement de charges de travail sur différents nœuds. Cependant, ces avantages doivent être pesés par rapport à la complexité opérationnelle de l'exécution et de la sécurisation d'un environnement Kubernetes.
Kubernetes et informatique en nuage
Les principaux fournisseurs de cloud proposent des services Kubernetes gérés. Les plans de contrôle gérés peuvent réduire certaines responsabilités d'infrastructure, bien que les équipes doivent toujours comprendre les charges de travail, le réseau, l'identité, la sécurité, le stockage, les coûts et les opérations de cluster.
Kubernetes peut également fonctionner sur une infrastructure privée ou dans des environnements hybrides. La portabilité est possible, mais les applications peuvent tout de même développer des dépendances vis-à-vis des services et de l'infrastructure spécifiques au fournisseur.
Réseautage Kubernetes
Le réseau Kubernetes permet aux Pods et aux Services de communiquer au sein d'un cluster. Le modèle de mise en réseau de la plateforme repose sur une mise en œuvre de l'interface de réseau de conteneurs et peut être étendu avec des politiques de réseau et d'autres composants réseau.
Pour le trafic externe, les équipes peuvent utiliser des mécanismes tels que l'Ingress ou les approches basées sur l'API Gateway plus récentes, selon la plateforme et la pile réseau. Les politiques de réseau peuvent restreindre les charges de travail autorisées à communiquer.
Stockage Kubernetes
Les conteneurs sont souvent considérés comme remplaçables, donc les applications nécessitant des données persistantes requièrent une conception de stockage explicite. Kubernetes fournit des abstractions telles que les PersistentVolumes et les PersistentVolumeClaims pour demander un stockage persistant.
Le comportement du stockage dépend de l'infrastructure sous-jacente et du pilote de stockage. Les équipes devraient tester les sauvegardes, la récupération, les performances et les scénarios de défaillance plutôt que de supposer que le stockage persistant est automatiquement protégé.
Sécurité Kubernetes
La sécurité Kubernetes implique le cluster, les charges de travail, les identités, les images, les chemins réseau, les secrets et l'infrastructure sous-jacente. Une configuration sécurisée devrait appliquer le principe du moindre privilège et réduire l'accès inutile.
- Utilisez le contrôle d'accès basé sur les rôles avec les autorisations appropriées.
- Protégez l'accès à l'API Kubernetes.
- Scannez les images de conteneur et les dépendances pour détecter les vulnérabilités.
- Utilisez des sources d'images de confiance et des registres contrôlés.
- Protégez les Secrets et évitez d'exposer les identifiants dans le code source.
- Appliquez les politiques de réseau là où cela est approprié.
- Maintenez Kubernetes et les composants de nœud à jour.
- Surveillez l'activité du cluster et des charges de travail.
Observabilité Kubernetes
La surveillance d'un environnement Kubernetes nécessite une visibilité à la fois sur l'infrastructure et le comportement des applications. Les équipes collectent communément des métriques, des journaux et des traces distribuées.
Les signaux utiles incluent l'utilisation des ressources des nœuds, les redémarrages de Pods, la santé des déploiements, l'activité du serveur API, la latence de l'application, les taux d'erreur et la saturation des ressources. Une observabilité standardisée peut faciliter l'investigation des défaillances distribuées.
Comment commencer avec Kubernetes
- Apprenez les fondamentaux des conteneurs avant d'adopter l'orchestration.
- Construisez une petite image d'application et exécutez-la localement.
- Apprenez les Pods, Déploiements, Services, ConfigMaps et Secrets.
- Déployez l'application sur un cluster de développement.
- Configurez les demandes et limites de ressources.
- Ajoutez des vérifications de santé et une observabilité de base.
- Appliquez des contrôles d'accès et des politiques de sécurité.
- Automatiser le déploiement et tester les scénarios d'échec avant la production.
Conseils d'experts
- Commencez avec l'architecture de cluster la plus simple qui répond aux exigences de charge de travail.
- Définissez les demandes et limites de CPU et de mémoire basées sur le comportement mesuré.
- Utilisez les sondes de disponibilité et de vivacité avec précaution.
- Conservez les manifestes dans un contrôle de version et préférez la gestion déclarative.
- Automatisez la sécurité et l'analyse des images dans le pipeline de livraison.
- Surveillez les coûts du cluster à mesure que les charges de travail augmentent.
- Documentez la propriété des clusters, espaces de noms, charges de travail et services critiques.
Erreurs courantes de Kubernetes
- Adopter Kubernetes lorsqu'une plateforme d'hébergement plus simple suffirait.
- Exécution de workloads sans demandes et limites de ressources.
- Exposer des services publiquement sans contrôles d'accès appropriés.
- Ignorer la sauvegarde et la récupération du stockage persistant.
- Utiliser des autorisations administratives excessives.
- Échouer à surveiller les échecs de Pod et la saturation des ressources.
- Assumer que Kubernetes géré élimine toute responsabilité opérationnelle.
Foire aux questions
Qu'est-ce que Kubernetes en termes simples ?
Kubernetes est une plateforme qui automatise le déploiement, l'évolutivité, la mise en réseau et la gestion des applications conteneurisées sur un cluster de machines.
Pourquoi Kubernetes est-il appelé K8s ?
K8s est une abréviation courante pour Kubernetes. Le chiffre 8 représente les huit lettres entre la première et la dernière lettre du mot.
Kubernetes est-il un conteneur ?
Non. Kubernetes est une plateforme d'orchestration. Elle gère les charges de travail conteneurisées plutôt que d'être un conteneur en soi.
Kubernetes est-il le même que Docker ?
Non. Docker fournit des outils de développement et d'exécution de conteneurs, tandis que Kubernetes coordonne les charges de travail conteneurisées à travers des clusters.
Toutes les applications ont-elles besoin de Kubernetes ?
Non. Des petites applications et des charges de travail simples peuvent être mieux servies par des plateformes de déploiement plus simples. Kubernetes devient plus pertinent lorsque les capacités d'orchestration justifient sa complexité.
Qu'est-ce qu'un Pod Kubernetes ?
Un Pod est l'unité déployable de base dans Kubernetes et peut contenir un ou plusieurs conteneurs partageant des ressources de mise en réseau et de stockage.
Kubernetes peut-il mettre à l'échelle les applications automatiquement ?
Oui. Kubernetes prend en charge plusieurs mécanismes d'évolutivité, y compris des répliques de charge de travail et des fonctionnalités d'autoscaling, lorsqu'il est configuré correctement.
Kubernetes est-il sécurisé ?
Kubernetes fournit des mécanismes de sécurité tels que RBAC et des politiques réseau, mais un fonctionnement sécurisé dépend de la configuration correcte, de la maintenance, de la sécurité des charges de travail et de la surveillance.
Conclusion
Kubernetes fournit un cadre puissant pour déployer et exploiter des applications conteneurisées. Son modèle déclaratif, la planification, la découverte de services, l'évolutivité et les capacités de guérison automatique peuvent aider les organisations à gérer des charges de travail complexes de manière cohérente.
Cependant, Kubernetes ajoute également une complexité opérationnelle significative. Les équipes devraient l'adopter lorsque ses capacités d'orchestration répondent à de réels besoins et devraient investir dans la sécurité, l'observabilité, l'automatisation et la gestion des coûts dès le départ.
Vous voulez continuer à explorer l'infrastructure moderne ? Le prochain sujet dans cette série technologique est L'Orchestration de Conteneurs, où nous examinons les concepts plus larges derrière la gestion de conteneurs à l'échelle.