Conteneurs sur Compute Engine


Les conteneurs de logiciels constituent un moyen pratique d'exécuter vos applications dans plusieurs instances d'espace utilisateur isolées. Vous pouvez exécuter des conteneurs sur des images de VM publiques Linux ou Windows Server, ou sur une image Container-Optimized OS. Grâce aux conteneurs, les applications s'exécutent avec moins de dépendances sur la machine virtuelle hôte, et indépendamment des autres applications conteneurisées que vous déployez sur la même instance de VM. Ces caractéristiques facilitent le transfert, le déploiement et le scaling des applications en conteneur.

Ce document décrit certaines des technologies de conteneur les plus courantes, au moyen desquelles vous pouvez exécuter des conteneurs sur des instances Compute Engine. Vous pouvez utiliser ces technologies sur la plupart des images de machines virtuelles publiques fournies par Compute Engine.

Exécutez des conteneurs sur Compute Engine lorsque vous avez besoin d'exercer un contrôle complet sur votre environnement de conteneurs et vos outils d'orchestration de conteneurs.

Vous pouvez également utiliser Google Kubernetes Engine (GKE) pour simplifier les tâches de gestion des clusters et d'orchestration des conteneurs afin de ne pas avoir à gérer les instances de VM sous-jacentes. GKE fournit un environnement géré grâce pour déployer, gérer et faire évoluer vos applications conteneurisées à l'aide de l'infrastructure Google.

L'environnement GKE comprend plusieurs machines (en particulier, les instances Compute Engine) regroupées pour former un cluster. En exécutant un cluster GKE, vous bénéficiez de fonctionnalités de gestion de cluster avancées fournies par Google Cloud, telles que l'équilibrage de charge, les pools de nœuds, la réparation automatique de nœuds, le scaling et les mises à jour automatiques, ainsi que la journalisation et la surveillance.

Découvrez comment créer un cluster GKE avec des pools de nœuds exécutant Microsoft Windows Server.

Faites l'essai

Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de Compute Engine en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits offerts pour exécuter, tester et déployer des charges de travail.

Profiter d'un essai gratuit de Compute Engine

Technologies de conteneur qui s'exécutent sur Compute Engine

En général, les instances Compute Engine peuvent exécuter presque toutes les technologies ou tous les outils de conteneur. Vous pouvez exécuter différents types de conteneurs sur les systèmes d'exploitation Linux modernes. Vous pouvez également exécuter Docker sur Windows Server 2016 ou une version ultérieure. La liste suivante répertorie plusieurs outils courants que vous pouvez utiliser pour exécuter et gérer des applications conteneurisées :

  • Docker et Podman sont deux technologies de conteneur populaires qui vous permettent d'exécuter des applications en conteneur.
  • Kubernetes est une plate-forme d'orchestration de conteneurs. Elle vous permet de gérer et de faire évoluer vos conteneurs en cours d'exécution sur plusieurs instances ou dans un environnement cloud hybride.
  • Les conteneurs sur Compute Engine constituent un moyen simple de déployer des conteneurs sur des groupes d'instances gérés ou des instances de VM Compute Engine.
  • Vous pouvez convertir les systèmes existants en images LXD, puis les exécuter sur des instances de VM Compute Engine de façon à obtenir une solution de migration Lift and Shift. LXD s'exécute sur des images Ubuntu.

De plus, vous pouvez utiliser Artifact Registry pour gérer les versions des images de conteneurs. Artifact Registry sert d'emplacement central où stocker et gérer les images de conteneurs, avant de les déployer vers Kubernetes sur Compute Engine ou vers des clusters Google Kubernetes Engine.

Images de machines virtuelles optimisées pour les conteneurs

Compute Engine fournit plusieurs images de machines virtuelles publiques que vous pouvez utiliser pour créer des instances et exécuter vos charges de travail de conteneur. Certaines de ces images de VM publiques possèdent un système d'exploitation minimaliste optimisé pour les conteneurs, sur lequel les versions les plus récentes de Docker, Podman ou Kubernetes sont préinstallées. Les familles d'images publiques suivantes sont spécifiquement conçues pour exécuter des conteneurs :

  • Container-Optimized OS de Google
    • Inclut : Docker, Kubernetes
    • Projet de l'image : cos-cloud
    • Famille d'images : cos-stable
  • Fedora CoreOS
    • Inclut : Podman, Docker
    • Projet de l'image : fedora-coreos-cloud
    • Famille d'images : fedora-coreos-stable
  • Ubuntu
    • Inclut : LXD
    • Projet de l'image : ubuntu-os-cloud
    • Famille d'images : ubuntu-2004-lts

Si vous devez exécuter des technologies et des outils de conteneur spécifiques sur des images qui ne les incluent pas par défaut, installez ces technologies et outils manuellement.

Installer des technologies de conteneur sur vos instances

Pour lancer un conteneur unique sur une instance, vous pouvez spécifier une image de conteneur lorsque vous créez une instance. Compute Engine fournit automatiquement une image Container-Optimized OS à jour avec Docker installé et lance le conteneur au démarrage de la VM. Pour plus d'informations, consulter la page Déploiement de conteneurs sur des VM.

Vous pouvez également exécuter vos charges de travail de conteneur sur Compute Engine à l'aide des technologies de conteneur et des outils d'orchestration dont vous avez besoin. Vous pouvez ainsi créer une instance à partir d'une image de VM publique, puis installer les technologies de conteneur de votre choix. Exemple :

Dans certains cas, des versions spécifiques de ces technologies sont nécessaires pour garantir leur interopérabilité. Par exemple, Kubernetes fonctionne généralement mieux avec des versions particulières de Docker. En règle générale, vous pouvez installer les dernières versions de ces technologies pour obtenir un résultat optimal.

Installer Docker sur des images Windows Server

Windows Server 2016 et versions ultérieures incluent la compatibilité des conteneurs. Si vous envisagez d'exécuter des conteneurs Docker sur une instance Windows Server, vous pouvez installer Docker sur une image de base Windows Server ou utiliser des images de place de marché depuis Mirantis.

Si vous souhaitez installer Docker CE sur l'image de base Windows Server, suivez les étapes décrites ci-dessous.

Commencez par créer une instance Windows Server à l'aide d'une image publique Windows Server 2019 ou version ultérieure. Pour une compatibilité optimale des conteneurs, nous vous recommandons d'utiliser la version LTSC la plus récente de Windows Server. Pour plus d'informations sur LTSC, consultez la page Canaux de maintenance Windows Server.

Installer Docker

Installez Docker sous Windows. Pour plus d'informations, consultez la page Préparer Windows pour les conteneurs. Redémarrez l'instance une fois l'installation terminée.

Étapes de configuration supplémentaires

À ce stade, vous pouvez utiliser Docker pour exécuter des conteneurs dans l'instance. Par exemple, la commande suivante télécharge l'image de conteneur nanoserver Windows et exécute une invite de commande dans un conteneur nanoserver :

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Le MTU réseau par défaut de Docker est de 1 500 octets. Si vous avez également configuré le MTU de votre réseau VPC sur 1 500 octets, vous pouvez ignorer le reste de cette section. Toutefois, si vous utilisez le MTU par défaut du VPC (configuré sur 1 460 octets) au sein de votre réseau, vous devez effectuer une configuration supplémentaire sur chaque instance.

Définissez le MTU de toutes les interfaces réseau (Ethernet et vEthernet) sur 1460 en exécutant les commandes suivantes dans un terminal PowerShell sur chaque instance :

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

Une fois le MTU de l'instance modifié, la connectivité des conteneurs avec Internet peut quand même être instable, car l'interface réseau du conteneur utilise également un MTU de 1500. Pour connaître les commandes permettant de définir correctement le MTU de chaque conteneur, consultez la section MTU des conteneurs.

Il se peut que vous deviez réexécuter régulièrement ces commandes MTU lorsque vous configurez le réseau Docker. Pour en savoir plus, consultez la section Problèmes connus.

Exécuter des conteneurs Windows

De nombreuses ressources sont disponibles pour vous aider dans vos premiers pas avec les conteneurs Windows :

  • Microsoft fournit une documentation complète sur les conteneurs Windows.
  • Docker Hub peut servir de dépôt dans lequel stocker et récupérer des conteneurs Windows.

Problèmes connus avec les conteneurs Windows

Abandon des images Windows Server 2019 pour les conteneurs

Google propose une famille d'images Windows Server avec l'environnement d'exécution des conteneurs Mirantis (anciennement Docker EE) préinstallé :

  • Windows
    • Inclut : Docker
    • Projet de l'image : windows-cloud
    • Famille d'images : windows-2019-core-for-containers

Début 2023, Microsoft n'a plus distribué et géré l'environnement d'exécution de conteneurs Mirantis pour Windows Server. Bien que Google ait pu continuer à publier cette famille d'images jusqu'au 30 octobre 2023, celle-ci est désormais obsolète, et toutes les images qu'elle contient ont été marquées comme obsolètes.

Les machines virtuelles basées sur ces images créées avant le 30 octobre 2023 continueront de fonctionner sans interruption. Cependant, la création d'instances basées sur ces images échouera après cette date.

Les images personnalisées dérivées de ces images avant le 30 octobre 2023 continueront de fonctionner. Toutefois, les images personnalisées ne recevront pas automatiquement les mises à jour du correctif de Windows et ne recevront pas les versions mises à jour de l'environnement d'exécution des conteneurs Mirantis.

Si vous souhaitez continuer à utiliser des images avec l'environnement d'exécution des conteneurs Mirantis, Mirantis Inc propose des images sur Google Cloud Marketplace. Le coût de ces images de VM inclut la compatibilité et l'attribution de licences pour l'environnement d'exécution des conteneurs Mirantis directement auprès de Mirantis. Les clients qui souhaitent utiliser l'environnement d'exécution de conteneurs autonomes Mirantis peuvent également le télécharger directement à partir du site Mirantis.

Si vous souhaitez migrer vers un autre environnement d'exécution de conteneur, tel que Docker CE, suivez les instructions ci-dessus.

Les conteneurs sont incompatibles entre les versions de Windows

Les conteneurs développés pour des versions antérieures de Windows ne fonctionnent pas dans les instances Compute Engine exécutant des versions plus récentes de Windows. Docker extrait la version Windows Server 2019 d'un conteneur par défaut. Cela signifie que l'exécution de la commande suivante dans une instance exécutant Windows Server version 1709 ou ultérieure génère une erreur :

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

La page Windows Container Version Compatibility de Microsoft contient plus d'informations à ce sujet. Pour contourner les incompatibilités de version des conteneurs Windows, spécifiez le tag correspondant à votre version de Windows lorsque vous extrayez et exécutez des conteneurs. Par exemple, dans une instance Windows Server version 20H2, utilisez la commande suivante pour exécuter une invite de commande dans le conteneur nanoserver version 20H2 au lieu du conteneur LTSC 2019 (1809) par défaut :

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Les incompatibilités de MTU affectent la connectivité des instances et des conteneurs

Lorsque vous créez un réseau de conteneurs sur une instance Windows à l'aide des commandes docker network create ou New-VMSwitch, le MTU de l'interface réseau de l'instance est généralement forcé vers 1500. En règle générale, l'interface réseau par défaut d'un nouveau conteneur Docker utilise également un MTU de 1500. Si votre réseau VPC possède une MTU de 1460, vous pouvez rencontrer les problèmes suivants :

  • La session RDP peut s'arrêter, et vous risquez de ne pas pouvoir vous reconnecter. Ce problème se produit lors de la création d'un réseau de conteneurs transparent.

  • La résolution DNS à l'intérieur du conteneur peut échouer.

  • La résolution DNS réussit, mais l'établissement d'une connexion HTTP du conteneur à Internet peut échouer.

La solution recommandée pour ces limites nécessite deux étapes : définir le MTU des interfaces réseau de l'instance sur 1460 et définir le MTU des interfaces réseau des conteneurs sur 1460. Vous pouvez également définir le MTU du VPC sur 1500, mais cela nécessite l'arrêt ou la migration de toutes vos VM.

1. Définir le MTU des interfaces réseau de l'instance Windows

Exécutez la commande suivante dans un terminal PowerShell sur l'instance Windows, afin de définir le MTU de toutes les interfaces réseau (Ethernet et vEthernet) :

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Vérifiez que les MTU des interfaces Ethernet et vEthernet de l'instance sont définies sur 1460 à l'aide de la commande suivante :

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

Si vous ne parvenez pas à exécuter ces commandes, car vous ne pouvez plus vous connecter à une instance à l'aide du RDP, vous pouvez vous connecter à l'instance via la console série, lancer une invite cmd et exécuter les commandes netsh pour réparer le MTU. Pour vous éviter cette procédure, nous vous recommandons d'exécuter les commandes docker network ... ou New-VMSwitch dans le cadre d'un script qui exécute également les commandes de réparation du MTU.

2. Définir le MTU des interfaces réseau des conteneurs Windows

Le MTU d'un conteneur Windows doit être défini alors que celui-ci est en cours d'exécution, depuis le conteneur lui-même ou depuis l'instance qui l'héberge. Si PowerShell est disponible dans le conteneur, vous pouvez exécuter cette commande de manière interactive ou à partir d'un script du conteneur pour définir correctement le MTU :

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Vous pouvez également exécuter cette commande sur l'instance Windows pour définir le MTU de tous les conteneurs en cours d'exécution :

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

Les conteneurs Hyper-V ne démarrent pas

Les conteneurs Hyper-V ne sont pas acceptés sur Compute Engine pour le moment.

Étapes suivantes