Contenedores en Google

La mejor forma de desarrollar y desplegar de aplicaciones

Probar gratis Ver documentación
El método de Google

Desde Gmail a YouTube, pasando por la Búsqueda, en Google todo se hace en contenedores. La creación de contenedores permite a nuestros equipos de desarrollo moverse con rapidez, desplegar software con eficacia y funcionar a una escala sin precedentes. Cada semana iniciamos más de varios miles de millones de contenedores. Durante los últimos diez años, hemos aprendido mucho sobre cómo ejecutar en producción las cargas de trabajo en contenedores y hemos compartido esos conocimientos con la comunidad en todo momento: desde la primera etapa en que contribuimos con los cgroups al kernel de Linux, hasta que extrajimos los diseños de nuestras herramientas internas y compartimos su código con la comunidad en el proyecto Kubernetes. Todos estos conocimientos acumulados los hemos incluido en Google Cloud Platform para que los desarrolladores y las empresas de cualquier tamaño puedan llegar con facilidad a las innovaciones más recientes de los contenedores.

Buque mercante con contenedores dentro de una nube. Al fondo, asoma la cola de una ballena en el mar.
Conceptos básicos: ¿Qué son los contenedores?

Los contenedores constituyen un mecanismo de empaquetado lógico en el que las aplicaciones pueden extraerse del entorno en que realmente se ejecutan. Esta desvinculación facilita el despliegue uniforme de las aplicaciones basadas en ellos con independencia de que el entorno sea un centro de datos privado, la nube pública o el portátil personal de un desarrollador. La creación de contenedores permite separar bien las áreas de trabajo, ya que los desarrolladores se centran en la lógica y las dependencias de sus aplicaciones mientras que los equipos de operaciones de TI se dedican al despliegue y la administración sin preocuparse por detalles como las versiones de software específicas o las configuraciones determinadas de las aplicaciones.

Si ya conoces los entornos virtualizados, piensa en los contenedores como si fueran máquinas virtuales. Es probable que sepas cómo funcionan las máquinas virtuales: un sistema operativo invitado, Linux o Windows, que se ejecuta encima de un sistema operativo anfitrión con acceso virtualizado al hardware subyacente. Al igual que las máquinas virtuales, los contenedores permiten empaquetar las aplicaciones con bibliotecas y otras dependencias, de modo que se proporcionan entornos aislados para ejecutar tus servicios de software. Sin embargo, como puedes ver a continuación, aquí se acaban todas las similitudes, ya que los contenedores ofrecen una solución mucho más ligera con la que pueden trabajar los desarrolladores y equipos de operaciones de TI y disfrutar de innumerables ventajas.

Diagramas comparativos de las máquinas virtuales y los contenedores.
Las máquinas virtuales contienen las siguientes unidades, apiladas unas encima de otras: aplicación, binarios/bibliotecas, SO invitado, hipervisor, sistema operativo anfitrión e infraestructura. Los contenedores incluyen las siguientes unidades apiladas unas encima de otras: aplicación, binarios/bibliotecas, entorno de ejecución del contenedor, sistema operativo anfitrión e infraestructura.
¿Qué ventajas tienen los contenedores?

En vez de virtualizar la pila de hardware como se hace con las máquinas virtuales, los contenedores se virtualizan en el nivel del sistema operativo y se utilizan varios contenedores en ejecución encima del kernel del sistema operativo directamente. Esto significa que los contenedores son mucho más ligeros: comparten el kernel del sistema operativo, se inician mucho más rápido y utilizan una fracción de la memoria en comparación con el inicio de un sistema operativo completo.

Existen muchos formatos de contenedores disponibles. Docker es un popular formato de contenedores de código abierto que Google Kubernetes Engine usa y que es compatible con Google Cloud Platform.

¿Por qué se ponen en zona de pruebas?

Los contenedores aíslan las aplicaciones entre sí, a menos que las conectes de forma explícita. Esto significa que no hay que preocuparse por los conflictos de dependencias o disputas de recursos, ya que se definen de forma explícita los límites de recursos de cada servicio. También es importante destacar que los contenedores suponen una capa adicional de seguridad, ya que las aplicaciones no se ejecutan directamente en el sistema operativo anfitrión.

Entorno coherente

Gracias a los contenedores, los desarrolladores pueden crear entornos predecibles aislados de otras aplicaciones. Además, los contenedores pueden incluir dependencias de software que las aplicaciones necesitan, como versiones específicas de tiempos de ejecución de un lenguaje de programación y otras bibliotecas de software. Desde el punto de vista del desarrollador, se garantiza la coherencia de todo esto con independencia de dónde se desplieguen finalmente las aplicaciones. En definitiva, esto se traduce en productividad. Los desarrolladores y los equipos de operaciones de TI dedican menos tiempo a la depuración y al diagnóstico de diferencias en entornos y más al envío de nuevas funciones a los usuarios. Y esto significa que se generan menos errores porque los desarrolladores pueden realizar suposiciones durante el desarrollo y probar entornos en los que se asegure que los supuestos funcionarán en la fase de producción.

Ejecución en cualquier lugar

Los contenedores pueden ejecutarse prácticamente en cualquier lugar, facilitando enormemente el desarrollo y el despliegue: en sistemas operativos Linux, Windows y Mac; en máquinas virtuales o equipos dedicados; en el equipo de un desarrollador o en centros de datos on-premise; y, por supuesto, en la nube pública. La popularidad extendida del formato de imagen de Docker para los contenedores ayuda aún más con la portabilidad. Donde quieras ejecutar el software, podrás usar contenedores.

Aislamiento

Los contenedores virtualizan la CPU, la memoria, el almacenamiento y los recursos de red en el nivel de sistema operativo, lo que proporciona a los desarrolladores una vista de zona de pruebas del sistema operativo aislado lógicamente de las demás aplicaciones.

  Ventajas del contenedor Ventajas de la máquina virtual
Entorno de ejecución coherente
Zona de pruebas de aplicaciones
Espacio reducido en disco  
Baja sobrecarga  
Del código a las aplicaciones

Los contenedores te permiten empaquetar las aplicaciones y sus dependencias en un archivo de manifiesto pequeño cuyas versiones se pueden controlar. De esta forma, las aplicaciones pueden ser replicadas fácilmente por los distintos desarrolladores del equipo y en diferentes máquinas del clúster.

Al igual que las bibliotecas de software empaquetan juntos fragmentos de código (lo que permite a los desarrolladores abstraer aspectos lógicos como la autenticación de usuarios y administración de sesiones), los contenedores permiten el empaquetado de las aplicaciones como un todo, abstrayendo el sistema operativo, la máquina e, incluso, el propio código. En combinación con una arquitectura basada en servicios, la unidad completa con la que los desarrolladores deben trabajar se convierte en algo mucho más pequeño, lo cual conlleva mayor agilidad y productividad. Todo esto facilita el desarrollo, las pruebas, el despliegue y la administración general de las aplicaciones.

De arquitectura monolítica a basada en servicios

Los contenedores funcionan mejor en las arquitecturas basadas en servicios. A diferencia de las arquitecturas monolíticas, donde todas las piezas de las aplicaciones quedan entrelazadas (desde la E/S al tratamiento de datos y el renderizado), las arquitecturas basadas en servicios separan estas piezas en distintos componentes. La separación y división del trabajo permite a los servicios seguir ejecutándose incluso si los demás fallan, de modo que las aplicaciones se mantienen como conjuntos más fiables.

La organización en componentes también permite desarrollar con más rapidez y fiabilidad; los códigos base poco extensos son más fáciles de mantener y como los servicios están separados, resulta sencillo probar determinadas entradas para las salidas.

Los contenedores son perfectos para las aplicaciones basadas en servicios, ya que se puede comprobar el estado de cada contenedor, limitar cada servicio a determinados recursos e iniciarlos o detenerlos uno a uno, de forma independiente.

Y como los contenedores extraen el código, se pueden tratar servicios independientes como cajas negras, lo que disminuye aún más el espacio del que debe preocuparse un desarrollador. Cuando los desarrolladores trabajan en servicios que dependen entre sí, pueden iniciar fácilmente un contenedor para un servicio específico sin perder tiempo en configurar el entorno correcto ni en solucionar problemas de antemano.

Descubre cuáles son las tres mejores formas de ejecutar tus contenedores en Google Cloud.

Google Kubernetes Engine para una solución de orquestación de contenedores, Cloud Run para un enfoque sin servidores y Compute Engine para usar máquinas virtuales.

Kubernetes: orquestación de contenedores de nivel de producción

Hemos alcanzado tal éxito con nuestro sistema interno de gestión de clústeres, Borg, que hemos incorporado todo lo aprendido al proyecto de código abierto Kubernetes. Es el momento de que tanto tú como otras empresas podáis beneficiaros de nuestra experiencia acumulada durante décadas. Kubernetes, también llamado “k8s”, proporciona una orquestación de contenedores automática (administración de máquinas y servicios para ti), lo que mejora la fiabilidad y reduce el tiempo y los recursos necesarios para DevOps, sin olvidarnos del alivio obtenido al no sufrir la tensión que producen estas tareas.

Kubernetes facilita todas las tareas asociadas con el despliegue y la administración de las aplicaciones. Dicho sistema automatiza los lanzamientos y las restauraciones y monitoriza el estado de los servicios para evitar que los lanzamientos salgan mal. Además, realiza continuamente comprobaciones de estado de los servicios, reiniciando contenedores que fallan o se interrumpen y publicitando a los clientes únicamente los servicios cuyo inicio correcto se ha confirmado. Por otro lado, Kubernetes escala los servicios hacia arriba o hacia abajo según la utilización, lo que garantiza que solo se ejecuta lo que se necesita y cuando se necesita. Al igual que los contenedores, Kubernetes permite administrar de forma declarativa los clústeres, de modo que se pueden controlar las versiones de configuración y replicar con facilidad.

Características de Kubernetes
  • Lanzamientos y restauraciones automáticos
  • Monitorización del estado de los servicios
  • Escalado automático de los servicios
  • Gestión declarativa
  • Despliegue en cualquier lugar, incluidos los despliegues híbridos

Y lo más importante es, quizás, que Kubernetes se ha diseñado para utilizarse en cualquier lugar, de modo que permite orquestar despliegues on-premise, en nubes públicas y en despliegues híbridos intermedios. Así, tu infraestructura llegará a los usuarios allí donde estén, tus aplicaciones tendrán mayor disponibilidad y la empresa equilibrará las preocupaciones de seguridad y coste, todo ello adaptado a tus necesidades concretas.

Nube híbrida de Kubernetes: tus aplicaciones se ejecutan en Kubernetes y pueden desplegarse en Google Cloud Platform, en tu centro de datos y en otras nubes.
Tu clúster en Google

Por supuesto, Kubernetes funciona mejor en Google Cloud Platform. Google Kubernetes Engine es la principal solución gestionada de Kubernetes que permite configurar con rapidez y estar listos para producción.

Kubernetes Engine está totalmente gestionado por nuestros ingenieros de fiabilidad de Google, quienes mejor conocen los contenedores, lo que garantiza que los clústeres estén siempre disponibles y actualizados. Se integra a la perfección con todos los servicios de GCP, como las funciones de monitorización, diagnóstico y almacenamiento de registros de Stackdriver, la gestión de identidades y accesos y la infraestructura de redes óptima que ofrece Google.

Características de Kubernetes Engine
  • Kubernetes de código abierto gestionado
  • Acuerdo de nivel de servicio del 99,5 % y alta disponibilidad con despliegues multizona integrados
  • Integración perfecta de otros servicios de Google Cloud Platform
  • Mejor precio del sector por rendimiento
  • Flexible e interoperable con clústeres on-premise o con otros proveedores en la nube
  • Infraestructura gestionada con la de calidad Google

No obstante, nos encanta proponerte opciones. Google Cloud Platform te ofrece una gama completa de opciones para ejecutar los contenedores. Seguro que encuentras la solución perfecta para ejecutar contenedores en Google Cloud Platform, desde un entorno totalmente gestionado con Google Cloud Run hasta la gestión de clústeres con Kubernetes Engine, pasando por la infraestructura de despliegue por cuenta propia de Google Compute Engine y su excelente relación entre precio y rendimiento.

Solución de contenedores completa

Y esto no se acaba aquí. Google Cloud Platform proporciona las herramientas necesarias para usar los contenedores desde la fase de desarrollo hasta la de producción. Cloud Build y Container Registry facilitan la gestión y el almacenamiento de imágenes de Docker, con el respaldo de la red excepcional y los estándares de máxima seguridad de Google. Container‑Optimized OS de Google es un sistema operativo ligero y muy seguro que se distribuye con los entornos de ejecución de Docker y Kubernetes ya instalados. Puedes realizar todas las tareas de gestión de los contenedores en GCP.

Crear: Container Builder, Almacenar: Container Registry, Ejecutar: Container-Optimized OS, Orquestar: Kubernetes Engine

" Todo lo que hemos aprendido por nuestra experiencia acumulada durante más de diez años en la creación de sistemas de administración de contenedores se lo hemos incorporado a Kubernetes, el sistema de gestión de contenedores más reciente de Google. Sus objetivos son avanzar en las capacidades de los contenedores para proporcionar beneficios significativos en la productividad de los programadores y facilitar la gestión manual y automática de los sistemas".

— "Borg, Omega, and Kubernetes: Lessons learned from three container management systems over a decade", Google LLC (2016)