Contenedores en Google

Una mejor manera de desarrollar e implementar aplicaciones

Probar gratis Ver la documentación
A la manera de Google

Todos los servicios de Google se ejecutan en contenedores, desde Gmail hasta YouTube y la Búsqueda. El uso de contenedores permite a nuestros equipos de desarrollo moverse rápidamente, implementar software de manera eficaz y operar a una escala sin precedentes. Cada semana, creamos miles de millones de contenedores. Durante la última década, aprendimos mucho sobre la ejecución de cargas de trabajo en contenedores para la producción y, en el proceso, compartimos este conocimiento con la comunidad: desde los primeros días en que contribuimos con cgroups al kernel de Linux hasta la selección de diseños de nuestras herramientas internas a fin de ofrecerlos como código abierto en el proyecto Kubernetes. Incorporamos esta experiencia en Google Cloud Platform para que los desarrolladores y las empresas de cualquier tamaño puedan aprovechar con facilidad las innovaciones más recientes en contenedores.

Buque de carga con contenedores incorporados dentro de una nube y una ballena nadando en segundo plano.
Conceptos básicos de los contenedores: ¿Qué son los contenedores?

Los contenedores ofrecen un mecanismo de empaquetado lógico en el que las aplicaciones se pueden abstraer del entorno en el que se ejecutan. Esta separación permite que las aplicaciones basadas en contenedores se implementen de manera fácil y uniforme, independientemente de si el entorno objetivo es un centro de datos privado, la nube pública o incluso la laptop personal del desarrollador. La creación de contenedores ofrece una separación clara de inquietudes, ya que los desarrolladores se enfocan en la lógica y las dependencias de su aplicación, mientras que los equipos de Operaciones de TI se pueden concentrar en la implementación y la administración sin preocuparse por los detalles de las aplicaciones, como las versiones específicas del software y las configuraciones específicas de la app.

Para quienes vienen de entornos virtualizados, con frecuencia se comparan los contenedores con las máquinas virtuales (VM). Quizás ya conoces las VM: un sistema operativo invitado, como Linux o Windows, que se ejecuta en un sistema operativo host con acceso virtualizado al hardware subyacente. Como las máquinas virtuales, los contenedores te permiten empaquetar tu aplicación junto con bibliotecas y otras dependencias, y ofrecen entornos aislados para ejecutar los servicios de tu software. Sin embargo, como verás más adelante, no hay más similitudes, ya que los contenedores ofrecen una unidad mucho más liviana para que trabajen los desarrolladores y equipos de operaciones de TI, además de una gran cantidad de beneficios.

Diagrama comparativo de máquinas virtuales frente a contenedores.
Las máquinas virtuales constan de las siguientes unidades, que se muestran apiladas para facilitar su visualización: apps, objetos binarios/bibliotecas, SO invitado, hipervisor, sistema operativo host e infraestructura. Los contenedores constan de las siguientes unidades, que se muestran apiladas para facilitar su visualización: apps, objetos binarios/bibliotecas, entorno de ejecución del contenedor, sistema operativo host e infraestructura.
¿Por qué usar contenedores?

En lugar de virtualizar la pila de hardware como en el enfoque de las máquinas virtuales, los contenedores realizan la virtualización en el nivel del sistema operativo, con varios contenedores que se ejecutan directamente en el kernel del SO. Esto significa que los contenedores son mucho más livianos: comparten el kernel del SO, se inician con bastante más rapidez y usan una fracción de la memoria en comparación con el arranque de todo el SO.

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

¿Para qué usar zonas de pruebas?

Los contenedores aíslan las aplicaciones entre sí, a menos que las conectes de manera explícita. Eso significa que no tienes que preocuparte por dependencias conflictivas o la contención de recursos: configuras límites de recursos explícitos para cada servicio. Es importante destacar que esto proporciona una capa adicional de seguridad, ya que tus aplicaciones no se ejecutan directamente en un sistema operativo host.

Entorno uniforme

Los contenedores ofrecen a los desarrolladores la capacidad de crear entornos predecibles que están aislados de otras aplicaciones. Los contenedores también incluyen dependencias de software que la aplicación necesita, como versiones específicas de tiempos de ejecución de lenguajes de programación y otras bibliotecas de software. Desde la perspectiva del desarrollador, se garantiza que todo esto sea uniforme, independientemente de dónde se implemente la aplicación en última instancia. Todo esto se traduce en productividad: los desarrolladores y los equipos de operaciones de TI dedican menos tiempo a depurar y diagnosticar diferencias en los entornos y más tiempo a ofrecer funcionalidades nuevas para los usuarios. Además, implica menos errores, ya que los desarrolladores ahora pueden hacer suposiciones durante el desarrollo y probar entornos para asegurarse de que serán eficientes en fase de producción.

Pueden ejecutarse en cualquier lugar

Los contenedores se pueden ejecutar prácticamente en cualquier lugar, lo que facilita en gran medida el desarrollo y la implementación en los sistemas operativos Linux, Windows y macOS; en máquinas virtuales o equipos físicos; en la máquina de un desarrollador o en centros de datos locales, y, por supuesto, en la nube pública. La gran popularidad del formato de imagen de Docker para los contenedores ayuda aún más con la portabilidad. Donde sea que quieras ejecutar tu software, puedes usar contenedores.

Aislamiento

Los contenedores virtualizan la CPU, la memoria, el almacenamiento y los recursos de red al nivel del SO, lo que brinda a los desarrolladores una vista en zonas de prueba del SO aislada lógicamente de otras aplicaciones.

  Beneficios de los contenedores Beneficios de las máquinas virtuales
Entorno de tiempo de ejecución uniforme
Zonas de pruebas para aplicaciones
Tamaño pequeño en el disco  
Baja sobrecarga  
Desde el código hasta las aplicaciones

Los contenedores te permiten empaquetar tu aplicación y sus dependencias en un solo manifiesto conciso que se puede controlar por versión, lo que permite una replicación sencilla de tu aplicación para todos los desarrolladores de tu equipo y las máquinas en tu clúster.

De manera similar a cómo las bibliotecas empaquetan bits de código y permiten a los desarrolladores abstraer la lógica, como la autenticación del usuario y la administración de las sesiones, los contenedores posibilitan que se empaquete toda tu aplicación mediante la abstracción del sistema operativo, la máquina e incluso el propio código. Junto con una arquitectura basada en servicios, toda la unidad que se pide a los desarrolladores que comprendan se hace mucho más pequeña, lo cual da lugar a una mayor agilidad y productividad. Todo esto facilita el desarrollo, las pruebas, la implementación y la administración general de tus aplicaciones.

De la arquitectura monolítica a la arquitectura basada en servicios

Los contenedores funcionan mejor para las arquitecturas basadas en servicios. A diferencia de las arquitecturas monolíticas, en las que cada pieza de la aplicación está entrelazada, desde el IO hasta el procesamiento y la renderización de datos, las arquitecturas basadas en servicios las separan en componentes diferentes. La separación y la división del trabajo permiten que tus servicios continúen ejecutándose incluso si en los demás se producen errores, lo que mantiene la confiabilidad de toda tu aplicación.

El uso de componentes también te permite desarrollar de manera más rápida y confiable; las bases de código más pequeñas son más fáciles de mantener y, como los servicios están separados, es sencillo probar entradas específicas para los resultados.

Los contenedores son perfectos para las aplicaciones basadas en servicios, ya que puedes hacer una verificación del estado de cada contenedor, limitar cada servicio a recursos específicos, y detenerlos o iniciarlos de manera independiente.

Además, como los contenedores abstraen el código, te permiten tratar diferentes servicios como cajas negras, lo que disminuye aún más el espacio por el cual el desarrollador debe preocuparse. Cuando los desarrolladores trabajan con servicios que dependen uno del otro, pueden crear un contenedor con facilidad para ese servicio específico sin tener que perder tiempo configurando el entorno correcto ni solucionando problemas con anticipación.

Descubre las tres maneras principales de ejecutar tus contenedores en Google Cloud

Google Kubernetes Engine es ideal para una solución de organización en contenedores; Cloud Run, para un enfoque sin servidores, y Compute Engine, para usar máquinas virtuales simplemente.

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

Tuvimos tanto éxito con Borg, nuestro sistema interno de administración de clústeres, que aplicamos lo que aprendimos al proyecto de código abierto Kubernetes. Ahora tú y otras empresas se pueden beneficiar de nuestra experiencia de décadas. También conocido como “k8s”, Kubernetes ofrece organización de contenedores automatizada (administración de tus máquinas y servicios), lo cual mejora la confiabilidad y reduce el tiempo y los recursos que necesitas dedicar a DevOps, sin mencionar el alivio del estrés relacionado con estas tareas.

Kubernetes hace que todo lo relacionado con implementar y administrar tu aplicación sea más sencillo. Kubernetes automatiza los lanzamientos y las reversiones mientras supervisa el estado de tus servicios para prevenir los lanzamientos con errores y evitar complicaciones. Además, ejecuta continuamente verificaciones de estado de tus servicios, reinicia los contenedores en los que se producen errores o que se retrasaron, y solo anuncia los servicios a los clientes cuando confirma que se han iniciado correctamente. Además, Kubernetes aumenta o disminuye automáticamente la escala de tus servicios según la utilización, lo cual garantiza que solo ejecutes lo que necesites cuando lo necesites. Al igual que los contenedores, Kubernetes te permite administrar de manera declarativa tu clúster, lo que posibilita que tu configuración se controle por versión y se replique fácilmente.

Características de Kubernetes
  •  Lanzamientos y reversiones automatizadas
  •  Supervisión del estado de los servicios
  •  Ajuste de escala automático de los servicios
  •  Administración declarativa
  •  Implementación en cualquier lugar, incluso en entornos híbridos

Quizás lo más importante es que Kubernetes se creó para usarlo en cualquier lugar, lo que te permite organizar desde implementaciones locales hasta nubes públicas e implementaciones híbridas. Esto permite que tu infraestructura llegue a los usuarios dondequiera que se encuentren, que las aplicaciones tengan una mayor disponibilidad y que la empresa equilibre la seguridad y las inquietudes sobre los costos, todo a la medida de tus necesidades específicas.

Nube híbrida de Kubernetes: las apps se ejecutan en Kubernetes y se pueden implementar en otras nubes, en GCP o en tu centro de datos.
Tu clúster en Google

Por supuesto, Kubernetes se ejecuta mejor en Google Cloud Platform. Google Kubernetes Engine es la principal solución administrada de Kubernetes que te ayuda con la configuración y a prepararte para la producción rápidamente.

Los ingenieros en confiabilidad de Google se encargan de toda la administración de Kubernetes Engine. Conocen los contenedores mejor que nadie, lo que garantiza que tu clúster esté altamente disponible y actualizado. Se integra a la perfección en todos los servicios de GCP, como la supervisión, el diagnóstico y el registro de Stackdriver; Identity and Access Management, y la infraestructura de herramientas de redes de primer nivel de Google.

Características de Kubernetes Engine
  •  Kubernetes de código abierto administrado
  •  ANS del 99.5% y alta disponibilidad con implementaciones multizona integradas
  •  Integración continua en otros servicios de GCP
  •  Precio por rendimiento líder del sector
  •  Interoperable y flexible con tus clústeres locales o con otros proveedores de servicios en la nube
  •  Infraestructura administrada con la calidad de Google

Nos encanta darte opciones. Google Cloud Platform te ofrece un espectro completo para ejecutar tus contenedores. Te brindaremos la solución más adecuada para ejecutar contenedores en Google Cloud Platform, desde un entorno completamente administrado con Google Cloud Run hasta la administración de clústeres con Kubernetes Engine y la infraestructura de implementación propia de Google Compute Engine con su relación de primer nivel entre precio y rendimiento.

La solución completa de contenedores

Y esto no es todo. Google Cloud Platform ofrece las herramientas que necesitas para usar contenedores desde el desarrollo hasta la producción. Cloud Build y Container Registry ofrecen almacenamiento y administración de imágenes de Docker con el respaldo de los altos estándares de seguridad y la red de primer nivel de Google. Container‑Optimized OS de Google proporciona un sistema operativo ligero y altamente seguro que incluye los entornos de ejecución de Docker y Kubernetes preinstalados. Toda la administración de contenedores se puede realizar en GCP.

Realiza compilaciones con Container Builder, almacena con Container Registry, ejecuta con Container‑Optimized OS y organiza con Kubernetes Engine

“Una década de experiencia en desarrollo de sistemas de administración de contenedores nos ha enseñado mucho, y hemos incorporado gran parte de estas lecciones a Kubernetes, el sistema de administración de contenedores más reciente de Google. Sus objetivos son aprovechar las capacidades de los contenedores para ofrecer mejoras significativas en la productividad de los programadores y facilidad en la administración de sistemas tanto manual como automatizada”.

“Borg, Omega, and Kubernetes: Lessons learned from three container management systems over a decade”, Google LLC, 2016