Publié le 9 décembre 2019, mis à jour le 21 décembre 2023.
Avec le passage au cloud, les applications se transforment en infrastructure de microservices. Cette infrastructure repose sur des technologies de conteneurs et d’orchestration.
Kubernetes est une plateforme d’orchestration de conteneurs, initialement introduite en 2014 par Google inc. Elle est aujourd’hui maintenu par la Foundation Cloud Native Computing.
Kubernetes est composé de multiples fonctionnalités qui offrent une simplicité de développement et de gestion pour une infrastructure de microservices.
Pods
Un pod est l'objet de base de Kubernetes. Il englobe les conteneurs, les ressources de stockage et les IP réseau.
Un pod représente un élément d’une application dans Kubernetes. Ces pods sont lancés dans un cluster Kubernetes qui est composé de noeuds. Un nœud est une machine (Vm ou machine physique) qui possède un environnement Container Runtimes. Cela signifie qu'un pod fonctionne sur un nœud mais peut facilement être dupliqué sur un autre nœud (en cas de pannes par exemple).
Les pods sont destinés à être éphémères. Kubernetes peut adapter le nombre de ces pods pour s'adapter au trafic entrant, créant ou supprimant ainsi des pods à la demande.
Vous vous demandez peut-être comment Kubernetes gère le trafic vers ce nombre fluctuant de pods... tout est une question de services.
Services / Ingress
La nature éphémère des pods les rend peu fiables pour assurer un trafic fluide. La solution de Kubernetes pour pallier cela est le Service. Ce service maintient une liste logique de pods qui acceptent le trafic entrant et exposent un port interne pour accéder aux pods sous-jacents.
Le service Kubernetes peut donc gérer les changements de trafic en modifiant le nombre de pods.
Si votre application doit être accessible de l'extérieur de votre cluster, Kubernetes propose un composant appelé Ingress. Il se trouve au dessus du service et gère les requêtes externes avec le cryptage SSL.
Vous vous demandez comment Kubernetes gère le scaling des pods et comment vous pouvez gérer leur mise à jour ? La solution de Kubernetes pour cela, ce sont les déploiements.
Déploiements
Les déploiements sont des objets Kubernetes qui gèrent les pods. Ils vous permettent de déployer une version spécifique de votre application et de spécifier le nombre de pods dont vous avez besoin pour qu'elle soit opérationnelle.
Lorsqu'une nouvelle version est prête à être mise en production, le déploiement peut facilement gérer cette mise à jour sans downtime en appliquant deux règles de base :
- maxSurge spécifie le nombre maximum de pods qui peuvent être créés au-delà du nombre de pods désiré.
- Max Unavailable spécifie le nombre maximum de pods qui peuvent être indisponibles pendant le déploiement.
Ces pods sont orchestrés sur différents nœuds du cluster et peuvent être déplacés de l’un à l’autre.
Avec une telle facilité de déploiement et de mise à niveau des applications, vous ne devez tout même jamais oublier de tester votre application dans un environnement de staging.
Vous voulez également que tous vos environnements soient indépendants, Kubernetes utilise des configmaps et des secrets pour cela.
Configmap / Secrets
Configmap est un objet Kubernetes qui maintient une valeur clé qui peut facilement être utilisée par d'autres objets Kubernetes tels que pod, déploiements et services.
Vous pouvez ainsi définir une configmap composée de toutes les variables spécifiques à votre environnement.
‘’’
ENVIRONMENT=STAGING
GIT_BRANCH=DEV
DATABASE_PASSWORD=xxxxxx
‘’’
Votre alerte de sécurité devrait sonner si vous mettez un mot de passe en texte clair !
Kubernetes a, bien évidemment, un moyen de gérer les secrets.
Vous pouvez stocker des informations sensibles en toute sécurité au sein de Kubernetes, grâce à un accès basé sur les rôles et permet de ne pas écrire un secret sur le disque d’un pod. Vous pouvez crypter tous ces secrets avec EncryptionConfiguration.
Cronjobs
Pour terminer cette présentation de Kubernetes, l'une des fonctionnalités les plus utilisées est cronjobs. Ils sont utilisés pour exécuter une tâche périodiquement, ce qui dans Kubernetes signifie lancer un pod idempotent à un moment précis de la journée, et le supprimer lorsque le travail est terminé. Cela permet de ne pas avoir des pods qui tournent constamment et donc qui consomment des ressources CPU pour rien.
‘’’
schedule: "*/1 * * * *"
‘’’
Kubernetes est l'une des plateformes d'orchestration de conteneurs les plus matures du marché, avec un ensemble d'outils robustes qui garantissent fiabilité et maintenabilité.
Si vous voulez essayer de construire votre premier cluster Kubernetes pour vous entraîner avec les pods et les services, vous pouvez lire cet article sur (Google Cloud Platform) ou celui-ci si vous avez besoin de connaître les commandes de base sur kubernetes [kubectl].