Contenedores en Compute Engine


Los contenedores de software son una forma conveniente de ejecutar sus aplicaciones en múltiples instancias aisladas de espacio de usuario. Puede ejecutar contenedores en imágenes de VM públicas de Linux o Windows Server, o en una imagen de sistema operativo optimizado para contenedores . Los contenedores permiten que sus aplicaciones se ejecuten con menos dependencias en la máquina virtual (VM) del host y se ejecuten independientemente de otras aplicaciones en contenedores que implemente en la misma instancia de VM. Estas características hacen que las aplicaciones en contenedores sean más portátiles, más fáciles de implementar y de mantener a escala.

Este documento describe algunas de las tecnologías de contenedores más comunes que puedes usar para ejecutar contenedores en instancias de Compute Engine. Puedes usar estas tecnologías en la mayoría de las imágenes de VM públicas que proporciona Compute Engine.

Ejecute contenedores en Compute Engine cuando necesite un control total sobre su entorno de contenedores y sus herramientas de orquestación de contenedores.

Como alternativa, puede utilizar Google Kubernetes Engine (GKE) para simplificar las tareas de administración de clústeres y orquestación de contenedores, de modo que no necesite administrar las instancias de VM subyacentes. GKE proporciona un entorno administrado para implementar, administrar y escalar tus aplicaciones en contenedores utilizando la infraestructura de Google.

El entorno de GKE consta de varias máquinas (específicamente, instancias de Compute Engine ) agrupadas para formar un clúster . Cuando ejecutas un clúster de GKE, obtienes el beneficio de funciones avanzadas de administración de clústeres, como equilibrio de carga, grupos de nodos, reparación automática de nodos, escalado y actualizaciones automáticas, y registro y monitoreo. Google Cloud proporciona.

Aprenda a crear un clúster de GKE con grupos de nodos que ejecuten Microsoft Windows Server.

Pruébalo por ti mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en escenarios del mundo real. Los nuevos clientes también obtienen $300 en créditos gratuitos para ejecutar, probar e implementar cargas de trabajo.

Prueba Compute Engine gratis

Tecnologías de contenedores que se ejecutan en Compute Engine

En general, las instancias de Compute Engine pueden ejecutar casi cualquier tecnología o herramienta de contenedor. Puede ejecutar varios tipos diferentes de contenedores en los sistemas operativos Linux modernos. También puede ejecutar Docker en Windows Server 2016 o posterior. La siguiente lista incluye varias herramientas comunes que puede utilizar para ejecutar y administrar aplicaciones en contenedores:

  • Docker y Podman son dos tecnologías de contenedores populares que le permiten ejecutar aplicaciones en contenedores.
  • Kubernetes es una plataforma de orquestación de contenedores que puede utilizar para administrar y escalar sus contenedores en ejecución en múltiples instancias o dentro de un entorno de nube híbrida.
  • Los contenedores en Compute Engine brindan una manera fácil de implementar contenedores en instancias de VM de Compute Engine o grupos de instancias administrados .
  • Puede convertir sus sistemas existentes en imágenes LXD y ejecutarlos dentro de instancias de VM de Compute Engine para obtener una solución de migración dinámica. LXD se ejecuta en imágenes de Ubuntu.

Además, puede utilizar Artifact Registry para administrar versiones de imágenes de contenedores. Artifact Registry sirve como una ubicación central para almacenar y administrar las imágenes de su contenedor antes de implementar esas imágenes en Kubernetes en Compute Engine o en los clústeres de Google Kubernetes Engine .

Imágenes de VM optimizadas para contenedores

Compute Engine proporciona varias imágenes de VM públicas que puedes usar para crear instancias y ejecutar tus cargas de trabajo de contenedor. Algunas de estas imágenes públicas de VM tienen un sistema operativo minimalista optimizado para contenedores que incluye versiones más nuevas de Docker, Podman o Kubernetes preinstaladas. Las siguientes familias de imágenes públicas están diseñadas específicamente para ejecutar contenedores:

Si necesita ejecutar herramientas y tecnologías de contenedor específicas en imágenes que no las incluyen de forma predeterminada, instale esas tecnologías manualmente.

Instalación de tecnologías de contenedores en sus instancias

Para lanzar un único contenedor en una instancia, puede especificar una imagen de contenedor al crear una instancia . Compute Engine proporciona automáticamente una imagen actualizada del sistema operativo optimizado para contenedores con Docker instalado e inicia su contenedor cuando se inicia la VM. Para obtener más información, consulte Implementación de contenedores en máquinas virtuales .

Alternativamente, puedes ejecutar tus cargas de trabajo de contenedores en Compute Engine usando cualquier tecnología de contenedores y herramientas de orquestación que necesites. Puede crear una instancia a partir de una imagen de VM pública y luego instalar las tecnologías de contenedor que desee. Por ejemplo:

En algunas situaciones, es posible que necesite versiones específicas de estas tecnologías para garantizar que funcionen juntas correctamente. Por ejemplo, Kubernetes suele funcionar mejor con versiones específicas de Docker. Normalmente, puede instalar las últimas versiones de estas tecnologías para obtener mejores resultados.

Instalación de Docker en imágenes de Windows Server

Windows Server 2016 y versiones posteriores incluyen compatibilidad con contenedores. Si planea ejecutar contenedores Docker en una instancia de Windows Server, puede instalar Docker en una imagen base de Windows Server o usar imágenes del mercado de Mirantis .

Si desea instalar Docker CE en la imagen base de Windows Server, siga los pasos que se describen a continuación.

Comience creando una instancia de Windows Server utilizando una imagen pública de Windows Server 2019 o posterior. Para obtener la mejor compatibilidad con contenedores, le recomendamos que utilice la versión LTSC más reciente de Windows Server . Para obtener más información sobre LTSC, consulte Canales de servicio de Windows Server .

Instalar ventana acoplable

Instale Docker en Windows. Para obtener más información, consulte Preparar Windows para contenedores . Reinicie la instancia una vez completada la instalación.

Pasos de configuración adicionales

En este punto, puede utilizar Docker para ejecutar contenedores en la instancia. Por ejemplo, el siguiente comando descarga la imagen del contenedor de nanoserver de Windows y ejecuta un símbolo del sistema dentro de un contenedor nanoserver :

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

La MTU de red predeterminada de Docker es de 1500 bytes. Si también ha configurado la MTU de su red VPC en 1500 bytes, puede ignorar el resto de esta sección. Sin embargo, si está utilizando la MTU de VPC predeterminada de 1460 bytes en su red, deberá realizar alguna configuración adicional en cada instancia.

Configure la MTU para todas las interfaces de red (tanto Ethernet como vEthernet) en 1460 ejecutando los siguientes comandos en un terminal PowerShell en cada instancia:

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)

Incluso después de cambiar la MTU de la instancia, la conectividad de los contenedores a Internet puede ser inestable porque, de forma predeterminada, la interfaz de red del contenedor también usa una MTU de 1500 . Para obtener comandos para configurar la MTU correctamente para cada contenedor, consulte la sección MTU del contenedor .

Es posible que deba volver a ejecutar periódicamente estos comandos MTU mientras configura la red Docker. Para obtener detalles completos, consulte la sección de problemas conocidos .

Ejecutar contenedores de Windows

Hay muchos recursos disponibles para comenzar con los contenedores de Windows:

  • Microsoft proporciona una extensa documentación sobre contenedores de Windows .
  • Docker Hub se puede utilizar como repositorio para almacenar y extraer contenedores de Windows.

Problemas conocidos con los contenedores de Windows

Desuso de Windows Server 2019 para imágenes de contenedores

Google ofreció una familia de imágenes de Windows Server con Mirantis Container Runtime (anteriormente Docker EE) preinstalado:

  • ventanas
    • Incluye: acoplador
    • Proyecto de imagen: windows-cloud
    • Familia de imágenes: windows-2019-core-for-containers

A principios de 2023, Microsoft dejó de distribuir y dar soporte a Mirantis Container Runtime para Windows Server. Si bien Google pudo continuar publicando esta familia de imágenes hasta el 30 de octubre de 2023, ahora está obsoleta y todas las imágenes dentro de la familia se han marcado como obsoletas.

Las máquinas virtuales basadas en estas imágenes creadas antes del 30 de octubre de 2023 seguirán funcionando sin interrupción. Sin embargo, la creación de instancias nuevas basadas en estas imágenes fallará después de esa fecha.

Las imágenes personalizadas derivadas de estas imágenes anteriores al 30 de octubre de 2023 seguirán funcionando. Sin embargo, las imágenes personalizadas no recibirán automáticamente ninguna actualización de Windows de Patch Tuesday, ni recibirán versiones actualizadas de Mirantis Container Runtime.

Si desea seguir usando imágenes con Mirantis Container Runtime preinstalado, Mirantis Inc ofrece imágenes en Google Cloud Marketplace. El costo de estas imágenes de VM incluye soporte y licencia para Mirantis Container Runtime directamente desde Mirantis. Los clientes interesados ​​en utilizar el Mirantis Container Runtime independiente también pueden descargarlo directamente desde el sitio web de Mirantis.

Si desea migrar a un tiempo de ejecución de contenedor alternativo como Docker CE, siga las instrucciones anteriores .

Los contenedores son incompatibles entre versiones de Windows

Los contenedores creados en versiones anteriores de Windows no funcionan en instancias de Compute Engine que ejecutan versiones más recientes de Windows. Docker extrae la versión de Windows Server 2019 de un contenedor de forma predeterminada. Esto significa que ejecutar el siguiente comando en una instancia que ejecuta Windows Server versión 1709 o posterior genera un error:

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 página de compatibilidad de la versión del contenedor de Windows de Microsoft contiene más información. Para solucionar las incompatibilidades de versiones de contenedores de Windows, especifique la etiqueta correspondiente a su versión de Windows al extraer y ejecutar contenedores. Por ejemplo, en una instancia de Windows Server, versión 20H2, use el siguiente comando para ejecutar un símbolo del sistema en el contenedor nanoserver versión 20H2 en lugar del contenedor LTSC (1809) predeterminado de 2019:

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

Las incompatibilidades de MTU afectan la conectividad de instancias y contenedores

Cuando crea una red de contenedores en una instancia de Windows mediante los comandos docker network create o New-VMSwitch , la MTU de la interfaz de red de la instancia generalmente se fuerza a 1500 . La interfaz de red predeterminada dentro de un nuevo contenedor Docker también suele utilizar una MTU de 1500 . Si su red VPC tiene una MTU de 1460 , es posible que experimente los siguientes problemas:

  • La sesión RDP puede detenerse y es posible que no pueda volver a conectarse. Se sabe que esto sucede al crear una red de contenedores transparente .

  • La resolución de DNS dentro del contenedor puede fallar.

  • La resolución de DNS es exitosa, pero es posible que no se pueda establecer una conexión HTTP desde el contenedor a Internet.

La solución alternativa recomendada para estas limitaciones requiere dos pasos: configurar la MTU para las interfaces de red de la instancia en 1460 y configurar la MTU para las interfaces de red del contenedor en 1460 . Alternativamente, puede configurar la MTU para la VPC en 1500 , pero esto requiere detener o migrar todas sus máquinas virtuales.

1. Configuración de la MTU para las interfaces de red de la instancia de Windows

Ejecute el siguiente comando en una terminal PowerShell en la instancia de Windows para configurar la MTU para todas las interfaces de red (tanto Ethernet como vEthernet):

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

Verifique que las MTU de la interfaz Ethernet y vEthernet de la instancia estén configuradas en 1460 usando este comando:

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 no puede ejecutar estos comandos porque ya no puede conectarse a una instancia mediante RDP, puede conectarse a la instancia a través de la consola serie , iniciar un indicador cmd y ejecutar los comandos netsh allí para reparar la MTU. Para evitar tener que hacer esto, recomendamos ejecutar cualquier comando docker network ... o New-VMSwitch como parte de un script que también ejecuta el comando de reparación de MTU.

2. Configuración de la MTU para las interfaces de red del contenedor de Windows

La MTU para un contenedor de Windows se debe configurar mientras el contenedor se está ejecutando, ya sea desde dentro del contenedor o desde la instancia que aloja el contenedor. Si PowerShell está disponible en su contenedor, puede ejecutar este comando de forma interactiva o desde un script en el contenedor para configurar correctamente la MTU:

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

O puede ejecutar este comando en la instancia de Windows para configurar la MTU para todos los contenedores en ejecución:

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

Los contenedores Hyper-V no se inician

Los contenedores Hyper-V no son compatibles con Compute Engine en este momento.

¿Qué sigue?