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 en conteneur que vous déployez sur la même instance de machine virtuelle. 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 pour simplifier les tâches de gestion des clusters et d'ordonnancement des conteneurs afin de ne pas avoir à gérer les instances des machines virtuelles sous-jacentes.

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, ainsi que Docker sur Windows Server 2016 ou 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 :

  • Les technologies de conteneur bien connues Docker et rkt vous permettent d'exécuter facilement des applications conteneurisées.
  • 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 machines virtuelles Compute Engine de façon à obtenir une solution simple de migration Lift and Shift. LXD s'exécute sur des images Ubuntu.

De plus, vous pouvez utiliser Container Registry pour gérer les versions des images de conteneurs. Container 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 les 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 possèdent un système d'exploitation minimaliste optimisé pour les conteneurs, sur lequel les versions les plus récentes de Docker, de rkt ou de 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 de l'image : cos-stable
  • CoreOS
    • Inclut : Docker, rkt, Kubernetes
    • Projet de l'image : coreos-cloud
    • Famille de l'image : coreos-stable
  • Ubuntu
    • Inclut : LXD
    • Projet de l'image : ubuntu-os-cloud
    • Famille de l'image : ubuntu-1604-lts
  • Windows
    • Inclut : Docker
    • Projet de l'image : windows-cloud
    • Famille de l'image : windows-1809-core-for-containers

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 qu'elles fonctionnent correctement ensemble. 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 prévoyez d'exécuter des conteneurs Docker sur une instance Windows Server, Google recommande de commencer par l'image publique Windows Server pour conteneurs. Les composants suivants sont installés sur cette image :

Si vous souhaitez installer Docker sur l'image de base Windows Server et exécuter des applications conteneurisées au lieu d'utiliser l'image Windows Server pour Containers, suivez la procédure ci-dessous.

Commencez par créer une instance Windows Server à l'aide d'une image publique Windows Server 2016 ou version ultérieure. Pour une compatibilité optimale des conteneurs, Google recommande d'utiliser la release semestrielle la plus récente de Windows Server, par exemple Windows Server version 1809.

Installer Docker

  1. Connectez-vous à l'instance Windows.

  2. Ouvrez un terminal PowerShell en tant qu'administrateur.

  3. Installez Docker à partir des dépôts Microsoft :

    PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
    
    PS C:\> Install-Package -Name docker -ProviderName DockerMsftProvider
    
  4. Exécutez les commandes suivantes pour contourner les problèmes connus liés aux conteneurs Windows sur Compute Engine :

    • Désactivez la fonctionnalité RSC (Receive Segment Coalescing) :

      PS C:\> netsh netkvm setparam 0 *RscIPv4 0
      
    • Activez le protocole IPv6 :

      PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
      /v DisabledComponents /t REG_DWORD /d 0x0 /f
      
  5. Redémarrez l'instance :

    PS C:\> Restart-Computer -Force
    

É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

Notez qu'il existe un problème connu avec le MTU réseau par défaut de Docker. Il affecte la connectivité à l'instance ainsi que la connectivité des conteneurs avec Internet. Pour contourner ce problème, exécutez d'abord les commandes suivantes dans un terminal PowerShell sur l'instance, afin de définir le MTU de toutes les interfaces réseau (Ethernet et vEthernet) sur 1460 :

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 réparé, 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 par défaut. Lisez la section concernant le MTU des conteneurs afin de savoir quelles commandes utiliser pour définir correctement le MTU de chaque conteneur.

Il se peut que vous deviez réexécuter régulièrement ces commandes MTU lorsque vous configurez le réseau Docker. Pour connaître tous les détails, lisez la section relative aux problèmes connus.

Exécuter des conteneurs Windows

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

Problèmes connus avec les conteneurs Windows

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 2016 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 microsoft/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 du conteneur Windows, spécifiez la balise correspondant à votre version de Windows lorsque vous extrayez et exécutez des conteneurs. Par exemple, dans une instance Windows Server, la version 1809 utilise la commande suivante pour exécuter une invite de commande dans le conteneur nanoserver version 1809 au lieu du conteneur 2016 par défaut :

PS C:\> docker run -it microsoft/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. Or, Google Cloud Platform n'accepte qu'un MTU de 1460. Par conséquent, lorsque la valeur 1500 est imposée à ce dernier, 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.

Pour contourner ces restrictions, vous devez suivre deux étapes : définir le MTU des interfaces réseau de l'instance et définir le MTU des interfaces réseau des conteneurs.

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 via 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 Docker ne démarrent pas

Le démarrage d'un conteneur avec docker run peut échouer avec l'erreur suivante :

C:\Program Files\Docker\docker.exe: Error response from daemon: container ...
encountered an error during CreateContainer: failure in a Windows system call:
Element not found. (0x490)

Ce problème se produit sur les instances Windows Server 2016 sur lesquelles Windows Update KB4015217 est installé. Pour le contourner, activez le protocole IPv6 sur l'instance à l'aide de la commande PowerShell suivante :

PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
/v DisabledComponents /t REG_DWORD /d 0x0 /f

Après avoir activé IPv6, redémarrez l'instance :

PS C:\> Restart-Computer -Force

Si ce problème est corrigé dans les mises à jour ultérieures du système d'exploitation, vous pouvez restaurer le paramètre IPv6 d'origine :

PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
/v DisabledComponents /t REG_DWORD /d 0xff /f

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

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine