Contenedores en Compute Engine


Los contenedores de software son una forma conveniente de ejecutar tus aplicaciones en varias instancias aisladas del espacio de usuario. Puedes ejecutar contenedores en imágenes de VM públicas de Linux o Windows Server, o en una imagen de Container-Optimized OS. Los contenedores permiten que tus apps se ejecuten con menos dependencias en la máquina virtual (VM) del host y se ejecuten de forma independiente de otras apps en contenedores que implementes en la misma instancia de VM. Estas características hacen que las apps en contenedores sean más portátiles y más fáciles de implementar y de mantener a gran escala.

En este documento, se describen algunas de las tecnologías de contenedor más comunes que se pueden usar para ejecutar contenedores en instancias de Compute Engine. Estas tecnologías se pueden usar en la mayoría de las imágenes públicas de VM que proporciona Compute Engine.

Ejecuta contenedores en Compute Engine cuando necesites el control total del entorno de contenedores y las herramientas de organización de contenedores.

Como alternativa, puedes usar Google Kubernetes Engine (GKE) para simplificar la administración de clústeres y las tareas de organización de contenedores, de modo que no necesites administrar las instancias de VM subyacentes. GKE proporciona un entorno administrado para implementar, administrar y escalar las aplicaciones alojadas en contenedores mediante la infraestructura de Google.

El entorno de GKE consta de varias máquinas (en particular, instancias de Compute Engine) que se agrupan para formar un clúster. Cuando ejecutas un clúster de GKE, obtienes las ventajas de las funciones avanzadas de administración de clústeres, como el balanceo de cargas, los grupos de nodos, la reparación automática de nodos, el ajuste de escala automático y las actualizaciones, y el registro y la supervisión que Google Cloud proporciona.

Obtén información para crear un clúster de GKE con grupos de nodos que ejecuten Microsoft Windows Server.

Pruébalo tú mismo

Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Probar Compute Engine gratis

Tecnologías de contenedores que se ejecutan en Compute Engine

En general, en las instancias de Compute Engine puede ejecutarse casi cualquier tecnología o herramienta de contenedor. Puedes ejecutar varios tipos diferentes de contenedores en los sistemas operativos Linux modernos. También puedes ejecutar Docker en Windows Server 2016 o en una versión posterior. En la lista siguiente, se incluyen varias herramientas comunes que puedes usar para ejecutar y administrar aplicaciones en contenedores:

  • Docker y Podman son dos tecnologías de contenedores populares que te permiten ejecutar apps en contenedores.
  • Kubernetes es una plataforma de organización de contenedores que puede usarse para administrar y escalar contenedores en ejecución en varias instancias o dentro de un entorno de nube híbrida.
  • Los contenedores en Compute Engine proporcionan una manera fácil de implementar contenedores en instancias de VM o grupos de instancias administrados de Compute Engine.
  • Puedes convertir tus sistemas existentes en imágenes LXD y ejecutar estas imágenes dentro de instancias de VM de Compute Engine para una solución de migración lift-and-shift. LXD se ejecuta en imágenes de Ubuntu.

Además, puedes usar Artifact Registry para administrar las versiones de imagen de contenedor. Artifact Registry sirve como ubicación central para almacenar y administrar tus imágenes de contenedor antes de implementarlas en Kubernetes, en Compute Engine o en 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 las cargas de trabajo de contenedores. Algunas de estas imágenes de VM públicas 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 para ejecutar contenedores:

  • Container-Optimized OS de Google
    • Incluye: Docker, Kubernetes
    • Proyecto de imagen: cos-cloud
    • Familia de imágenes: cos-stable
  • Fedora CoreOS
    • Incluye: Podman, Docker
    • Proyecto de imagen: fedora-coreos-cloud
    • Familia de imágenes: fedora-coreos-stable
  • Ubuntu
    • Incluye: LXD
    • Proyecto de imagen: ubuntu-os-cloud
    • Familia de imágenes: ubuntu-2004-lts

Si necesitas ejecutar herramientas y tecnologías de contenedor específicas en imágenes que no las incluyen de manera predeterminada, instala esas tecnologías de forma manual.

Instala tecnologías de contenedor en las instancias

Para iniciar un solo contenedor en una instancia, puedes especificar una imagen de contenedor cuando creas una instancia. Compute Engine proporciona de forma automática una imagen actualizada de Container-Optimized OS con Docker instalado y, luego, inicia el contenedor cuando se inicia la VM. Si deseas obtener más información, consulta la sección para implementar contenedores en VM.

Como alternativa, puedes ejecutar las cargas de trabajo de contenedor en Compute Engine mediante las tecnologías de contenedor y las herramientas de organización que necesites. Puedes crear una instancia desde una imagen de VM pública y, luego, instalar las tecnologías de contenedor que desees. Por ejemplo:

En algunas situaciones, es posible que necesites versiones específicas de estas tecnologías para asegurarte de que funcionen juntas de forma correcta. Por ejemplo, Kubernetes suele funcionar mejor con versiones específicas de Docker. Por lo general, puedes instalar las últimas versiones de estas tecnologías para obtener el mejor resultado.

Instala Docker en imágenes de Windows Server

Windows Server 2016 y las versiones posteriores son compatibles con contenedores. Si planeas ejecutar contenedores de Docker en una instancia de Windows Server, puedes instalar Docker en una imagen base de Windows Server o usar imágenes de Marketplace de Mirantis.

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

Para comenzar, crea una instancia de Windows Server con una imagen pública de Windows Server 2019 o una versión posterior. Para obtener la mejor compatibilidad con contenedores, te recomendamos usar la versión más reciente de LTSC de Windows Server. Para obtener más información sobre LTSC, consulta Canales de servicio de Windows Server.

Instala Docker

Instala Docker en Windows. Si deseas obtener más información, consulta Prepara Windows para contenedores. Reinicia la instancia después de que se complete la instalación.

Pasos de configuración adicionales

En este punto, puedes usar Docker para ejecutar contenedores en la instancia. Por ejemplo, con el siguiente comando, se descarga la imagen de contenedor nanoserver de Windows y se 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 la red predeterminada de Docker es de 1,500 bytes. Si también configuraste la MTU de la red de VPC en 1,500 bytes, puedes ignorar el resto de esta sección. Sin embargo, si usas la MTU predeterminada de la VPC de 1,460 bytes en tu red, debes establecer alguna configuración adicional en cada instancia.

Establece la MTU para todas las interfaces de red (Ethernet y vEthernet) en 1460 mediante la ejecución de los siguientes comandos en una terminal de 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 reparar 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. Si quieres obtener los comandos para configurar la MTU de forma correcta en cada contenedor, consulta la sección MTU de contenedores.

Es posible que debas volver a ejecutar estos comandos de MTU de manera periódica mientras configuras las redes de Docker. Para obtener más información, consulta la sección de problemas conocidos.

Ejecuta contenedores de Windows

Hay muchos recursos disponibles para comenzar a usar los contenedores de Windows:

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

Problemas conocidos con contenedores de Windows

Baja de Windows Server 2019 para imágenes de contenedores

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

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

A principios de 2023, Microsoft dejó de distribuir y admitir Mirantis Container Runtime para Windows Server. Si bien Google pudo seguir publicando esta familia de imágenes hasta el 30 de octubre de 2023, la familia de imágenes está obsoleta y todas las imágenes de ella se marcaron como obsoletas.

Las máquinas virtuales basadas en estas imágenes creadas antes del 30 de octubre de 2023 se seguirán ejecutando sin interrupciones. 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 antes del 30 de octubre de 2023 seguirán funcionando. Sin embargo, las imágenes personalizadas no recibirán automáticamente las actualizaciones Patch Tuesday de Windows ni las versiones actualizadas de Mirantis Container Runtime.

Si deseas 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 asistencia y licencias para Mirantis Container Runtime directamente desde Mirantis. Los clientes que estén interesados en usar Mirantis Container Runtime por separado también pueden descargarlo directamente desde el sitio web de Mirantis.

Si quieres migrar a un entorno de ejecución de contenedores alternativo, como Docker CE, sigue las instrucciones que se indican más arriba.

Los contenedores no son compatibles entre versiones de Windows

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

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 sobre compatibilidad de versiones de contenedor de Windows de Microsoft contiene más información. Para evitar las incompatibilidades de versiones de contenedores de Windows, especifica la etiqueta correspondiente a tu versión de Windows cuando extraigas y ejecutes contenedores. Por ejemplo, en una instancia de Windows Server, versión 20H2, usa el siguiente comando para ejecutar un símbolo del sistema en el contenedor nanoserver de la versión 20H2, en lugar del contenedor predeterminado de LTSC (1809) 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 creas 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 suele forzarse a 1500. La interfaz de red predeterminada dentro de un contenedor de Docker nuevo también suele usar una MTU de 1500. Si tu red de VPC tiene una MTU de 1460, es posible que experimentes los siguientes problemas:

  • La sesión RDP puede detenerse y es posible que no puedas volver a conectarte. Se sabe que esto sucede cuando se crea una red de contenedores transparente.

  • Es posible que falle la resolución de DNS dentro del contenedor.

  • La resolución de DNS es exitosa, pero el proceso de establecer una conexión HTTP desde el contenedor a Internet puede generar errores.

La solución alternativa recomendada para estas limitaciones requiere dos pasos: Configurar la MTU para las interfaces de red de la instancia como 1460 y Configurar la MTU para las interfaces de red del contenedor como 1460. Como alternativa, puedes configurar la MTU de la VPC en 1500, pero esto requiere detener o migrar todas las VM.

1. Configura la MTU para las interfaces de red de la instancia de Windows

Ejecuta este comando en una terminal de PowerShell en la instancia de Windows a fin de 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
}

Comprueba que las MTU de la interfaz Ethernet y vEthernet de la instancia estén configuradas como 1460 mediante 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 puedes ejecutar estos comandos porque ya no puedes conectarte a una instancia mediante RDP, puedes conectarte a la instancia a través de la consola en serie, iniciar un símbolo del sistema cmd y ejecutar los comandos netsh para reparar la MTU. Si no deseas hacer esto, te recomendamos ejecutar cualquier comando docker network ... o New-VMSwitch como parte de una secuencia de comandos que también ejecute el comando de reparación de la MTU.

2. Configura la MTU para las interfaces de red del contenedor de Windows

La MTU de un contenedor de Windows debe configurarse mientras el contenedor está en ejecución, ya sea desde el interior del contenedor o desde la instancia que lo aloja. Si PowerShell está disponible en el contenedor, puedes ejecutar este comando de forma interactiva o desde una secuencia de comandos en el contenedor para configurar la MTU de manera correcta:

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

O bien, puedes ejecutar este comando en la instancia de Windows a fin de 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

No se pueden iniciar contenedores de Hyper-V

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

¿Qué sigue?