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 gratisTecnologí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:
- Sistema operativo optimizado para contenedores 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 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:
- Instale Docker en instancias de Compute Engine para que pueda ejecutar las imágenes de su contenedor Docker en esas instancias.
- Instale Podman en instancias de Compute Engine como alternativa al tiempo de ejecución del contenedor Docker.
- Instale Kubernetes en sus instancias para proporcionar orquestación de contenedores tanto para contenedores Docker como para Open Container Initiative (OCI).
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?
- Cree e inicie una instancia que pueda utilizar para ejecutar aplicaciones de contenedor.
- Obtenga más información sobre las instancias de Compute Engine .
- Obtenga más información sobre Google Kubernetes Engine , que puede utilizar para ejecutar sus contenedores Google Cloud sin administrar las instancias de Compute Engine usted mismo.
- Obtenga más información sobre Kubernetes .
- Aprenda a utilizar Artifact Registry para almacenar las imágenes de su contenedor de forma privada Google Cloud.