Les conteneurs au sein de Google

Une solution plus efficace pour développer et déployer des applications

Profiter d'un essai gratuit Consulter la documentation
La méthode Google

De Gmail à YouTube en passant par notre moteur de recherche, tout fonctionne sous forme de conteneurs chez Google. La conteneurisation permet à nos équipes de développement d'agir rapidement, de déployer efficacement des logiciels et d'œuvrer à une échelle sans précédent. Chaque semaine, nous démarrons plusieurs milliards de conteneurs. Les dix dernières années nous ont beaucoup appris sur l'exécution des charges de travail en conteneur. Nous avons d'ailleurs partagé nos connaissances avec la communauté tout au long du processus, de la création des groupes de contrôle du noyau Linux à la mise à disposition en Open Source de nos conceptions à partir de nos outils internes, dans le cadre du projet Kubernetes. C'est cette expertise que nous avons intégrée à Google Cloud Platform pour permettre aux développeurs et aux entreprises de toutes tailles de bénéficier facilement des dernières innovations en matière de conteneurs.

Cargo transportant des conteneurs dans un nuage. Une baleine est visible en arrière-plan.
En quoi consistent les conteneurs ?

Les conteneurs proposent un mécanisme de regroupement logique qui permet d'extraire des applications de l'environnement dans lequel elles s'exécutent réellement. Une fois extraites, les applications basées sur des conteneurs peuvent facilement être déployées dans n'importe quel environnement, qu'il s'agisse d'un centre de données privé, du cloud public ou encore de l'ordinateur personnel d'un développeur. Grâce à la mise en conteneur, chaque tâche est clairement répartie. En effet, les développeurs peuvent se concentrer sur la logique et les dépendances de leur application pendant que les équipes informatiques se consacrent au déploiement et à la gestion, sans avoir à se soucier de détails tels que la version du logiciel ou la configuration spécifique à l'application.

Si vous avez déjà travaillé dans des environnements virtualisés, les conteneurs sont comparables à des machines virtuelles (VM). Vous connaissez peut-être le principe des VM : un système d'exploitation invité tel que Linux ou Windows est installé sur un système hôte, dont la configuration sous-jacente est accessible virtuellement. À l'instar des machines virtuelles, les conteneurs vous permettent de regrouper votre application, des bibliothèques et d'autres dépendances en un seul package afin d'obtenir un environnement isolé pour l'exécution de vos services logiciels. La ressemblance s'arrête ici toutefois, car les conteneurs prennent la forme d'unités bien plus légères et offrent de nombreux avantages aux développeurs et aux équipes informatiques.

Schéma comparant les machines virtuelles et les conteneurs.
Les machines virtuelles contiennent les unités suivantes, présentées sous forme de pile pour une meilleure visualisation : application, bins/bibliothèques, système d'exploitation invité, hyperviseur, système d'exploitation hôte, infrastructure. Les conteneurs contiennent les unités suivantes, présentées sous forme de pile pour une meilleure visualisation : application, bins/bibliothèques, environnement d'exécution du conteneur, système d'exploitation hôte, infrastructure.
Pourquoi utiliser des conteneurs ?

Plutôt que de virtualiser la pile matérielle comme le font les machines virtuelles, les conteneurs permettent une virtualisation au niveau du système d'exploitation, et de nombreux conteneurs s'exécutent directement au-dessus du noyau de cet OS. Les conteneurs sont donc extrêmement légers : ils partagent le même noyau, démarrent très rapidement et leur exécution demande très peu de mémoire comparé au lancement d'un système d'exploitation.

Il existe un certain nombre de formats de conteneurs. Docker est un format de conteneurs Open Source très courant qui est compatible avec Google Cloud Platform et Google Kubernetes Engine.

Pourquoi recourir à un environnement bac à sable ?

Les conteneurs isolent les applications les unes des autres, sauf si vous les connectez explicitement. Vous ne risquez donc pas de créer des conflits avec des dépendances ou d'autres ressources, car vous définissez clairement les limites de chaque service. En outre, les conteneurs vous offrent un niveau de sécurité supplémentaire dans la mesure où vos applications ne s'exécutent pas directement sur le système d'exploitation hôte.

Un environnement cohérent

Les conteneurs permettent aux développeurs de créer des environnements prévisibles isolés des autres applications. Ils peuvent également comprendre des dépendances logicielles requises par l'application, telles que des versions spécifiques d'exécution du langage de programmation ou d'autres bibliothèques logicielles. Peu importe l'environnement dans lequel le développeur déploie l'application, le résultat est donc le même. Tout cela se traduit par une augmentation de la productivité : les développeurs et équipes informatiques passent moins de temps sur le débogage et l'analyse des différences d'environnements, et consacrent plus de temps au lancement de nouvelles fonctionnalités pour les utilisateurs. Comme les développeurs savent que leurs hypothèses dans les environnements de test et de développement seront également vraies en production, le nombre de bugs est également réduit.

Une très grande compatibilité

Les conteneurs peuvent s'exécuter dans pratiquement n'importe quel environnement, ce qui facilite grandement le développement et le déploiement sous Linux, Windows, Mac, sur des machines virtuelles ou dédiées, sur l'ordinateur d'un développeur, dans un centre de données sur site et, bien entendu, dans le cloud public. La grande popularité du format d'image Docker contribue à faciliter la portabilité des conteneurs. Vous pouvez donc les utiliser quel que soit l'environnement de votre logiciel.

Isolation

Les conteneurs virtualisent le processeur, la mémoire, l'espace de stockage et les ressources réseau au niveau de l'OS, ce qui offre aux développeurs un aperçu en bac à sable de l'OS logiquement isolé des autres applications.

  Avantages des conteneurs Avantages des machines virtuelles
Environnement d'exécution cohérent
Bacs à sable d'application
Faible espace sur le disque  
Faibles coûts  
Du codage au déploiement

Les conteneurs vous permettent de rassembler votre application et ses dépendances dans un fichier manifeste succinct que vous pouvez contrôler pour chaque version. Cela vous permet de répliquer facilement votre application au sein de votre équipe et des machines de votre cluster.

Tout comme les bibliothèques logicielles, qui regroupent des fragments de code permettant aux développeurs de supprimer des logiques (telles que l'authentification des utilisateurs ou la gestion des sessions), les conteneurs créent un package de l'ensemble de votre application, et ce package fait abstraction du système d'exploitation, de la machine et même du code. Associés à une architecture basée sur les services, ces conteneurs permettent aux développeurs d'avoir à traiter nettement moins d'informations, ce qui augmente leur flexibilité comme leur productivité. Ils facilitent donc le développement, le test, le déploiement et la gestion globale de vos applications.

De l'architecture monolithique à l'architecture basée sur les services

Le potentiel des conteneurs est maximisé dans les architectures basées sur les services. Contrairement aux architectures monolithiques, qui mélangent tous les composants d'une application (de l'E/S au traitement des données en passant par le rendu), les architectures basées sur les services les séparent. Grâce à cette division des tâches, vos services continuent de fonctionner même en cas d'interruption d'autres services, offrant à votre application une meilleure fiabilité d'ensemble.

La séparation des composants vous permet également de développer votre application plus rapidement et de manière plus fiable. En effet, un codebase moins important s'avère plus simple à gérer, et comme les services sont séparés, vous pouvez facilement tester des entrées spécifiques.

Les conteneurs sont particulièrement adaptés aux applications basées sur les services, car celles-ci permettent de vérifier l'état de chaque conteneur, de limiter les ressources accessibles par un service, et de démarrer ou d'arrêter des services indépendamment les uns des autres.

Comme les conteneurs font abstraction du code, vous pouvez traiter certains services comme des boîtes noires afin de réduire encore plus l'espace de stockage dont vous avez à vous soucier. Si vous travaillez sur des services qui dépendent d'un autre service, vous pouvez facilement créer un conteneur pour celui-ci sans perdre de temps à configurer le bon environnement et à résoudre des problèmes au préalable.

Découvrez les trois meilleures solutions pour exécuter vos conteneurs sur Google Cloud !

Choisissez Google Kubernetes Engine pour orchestrer les conteneurs, Cloud Run pour adopter une approche sans serveur et Compute Engine pour utiliser simplement des machines virtuelles.

Orchestrer des conteneurs de production grâce à Kubernetes

Borg, notre système interne de gestion des clusters, a connu un tel succès que nous avons décidé d'intégrer ce qu'il nous a appris au projet Open Source Kubernetes. Vous pouvez désormais bénéficier, aux côtés d'autres entreprises, de nos dizaines d'années d'expérience. Également connu sous l'appellation "k8s", Kubernetes vous offre une orchestration automatique des conteneurs (gestion de vos machines et services), ce qui améliore la fiabilité de votre application et réduit le temps ainsi que les ressources que vous devez consacrer au DevOps, sans même parler du stress associé à ces tâches.

Kubernetes facilite toutes les étapes liées au déploiement et à la gestion de votre application. Le système automatise les déploiements et les rollbacks tout en surveillant l'état de vos services pour éviter que les choses ne tournent mal si un déploiement ne s'effectue pas correctement. Il vérifie également l'état des services de manière continue en redémarrant les conteneurs bloqués ou ayant rencontré une erreur, et n'indique au client que les services dont le bon fonctionnement a été confirmé. En outre, Kubernetes adapte automatiquement vos services en fonction de l'utilisation. Vous n'exécutez donc que ce dont vous avez besoin, quand vous en avez besoin. À l'instar des conteneurs, Kubernetes vous offre la possibilité de gérer votre cluster de manière déclarative, ce qui vous permet de répliquer facilement votre configuration et d'en contrôler chaque version.

Fonctionnalités de Kubernetes
  • Déploiements et rollbacks automatisés
  • Surveillance de l'état des services
  • Scaling automatique des services
  • Gestion déclarative
  • Déploiement de votre application dans n'importe quel environnement (déploiements hybrides inclus)

Surtout, Kubernetes peut être utilisé n'importe où, ce qui vous permet d'orchestrer des déploiements sur site, des déploiements dans des clouds publics et des déploiements hybrides. Ainsi, les utilisateurs peuvent accéder à votre infrastructure où qu'ils soient, vos applications disposent d'une meilleure disponibilité et votre entreprise peut trouver le bon équilibre en termes de sécurité et de coûts, dans le respect de vos besoins.

Cloud hybride Kubernetes : votre application s'exécute sur Kubernetes, qui peut être déployé sur d'autres clouds, sur GCP ou dans votre centre de données.
Votre cluster Google

Bien entendu, les fonctionnalités de Kubernetes sont optimisées pour Google Cloud Platform. Google Kubernetes Engine est la principale solution gérée par Kubernetes et vous permet de configurer rapidement votre application pour la production.

Kubernetes Engine est entièrement géré par les ingénieurs de Google : des experts en conteneurs qui s'assurent que votre cluster est hautement disponible et à jour. Kubernetes Engine s'intègre parfaitement à tous les services GCP tels que la surveillance, le diagnostic et la journalisation dans Stackdriver, ainsi qu'à IAM et à l'infrastructure de mise en réseau hors pair de Google.

Fonctionnalités de Kubernetes Engine
  • Une solution Kubernetes Open Source gérée
  • Contrat de niveau de service garantissant une disponibilité de 99,5 %, et une haute disponibilité dans une configuration avec déploiements multizones intégrés
  • Intégration parfaite aux autres services GCP
  • Le meilleur rapport prix/performances du secteur
  • Flexible et interopérable avec vos clusters sur site ou avec d'autres fournisseurs de services cloud
  • Infrastructure gérée par Google

Parce que nous souhaitons vous laisser le choix, Google Cloud Platform vous propose toute une gamme d'options pour l'exécution de vos conteneurs. Environnement entièrement géré avec Google Cloud Run, gestion des clusters avec Kubernetes Engine, infrastructure de déploiement autonome ultra-performante et abordable de Google Compute Engine… Choisissez la solution qui vous convient pour exécuter des conteneurs sur Google Cloud Platform.

Une solution complète pour vos conteneurs

Cela ne s'arrête pas là. Google Cloud Platform vous fournit les outils dont vous avez besoin pour utiliser vos conteneurs, du développement jusqu'à la production. Cloud Build et Container Registry permettent de stocker et de gérer des images Docker, le tout assisté par un réseau de pointe et par les normes de sécurité renforcées de Google. Container-Optimized OS est un système d'exploitation léger et hautement sécurisé qui inclut les environnements d'exécution Docker et Kubernetes. Toute la gestion de vos conteneurs peut donc s'effectuer sur GCP.

Création : Container Builder ; Stockage : Container Registry ; Exécution : Container-Optimized OS ; Orchestration : Kubernetes Engine

“ Les dix années que nous avons consacrées au développement des systèmes de gestion des conteneurs nous ont beaucoup appris, et nous avons intégré une grande partie de notre savoir dans Kubernetes, le tout dernier service de gestion des conteneurs de Google. Il a pour objectif de repousser les limites des conteneurs afin d'offrir d'énormes gains de productivité aux programmeurs, et de simplifier la gestion des systèmes manuels et automatisés."

 "Borg, Omega, and Kubernetes: Lessons learned from three container management systems over a decade", Google LLC, 2016