4 razones por las que debería usar Kubernetes

Sirish Raghuram es cofundador y director ejecutivo de Platform9 Systems.

Como pueden atestiguar la mayoría de los desarrolladores de software modernos, los contenedores nos han proporcionado una flexibilidad mucho mayor para ejecutar aplicaciones nativas de la nube en infraestructura física y virtual. Los contenedores empaquetan los servicios que comprenden una aplicación y los hacen portátiles en diferentes entornos informáticos, tanto para desarrollo / pruebas como para uso en producción. Con los contenedores, es fácil aumentar rápidamente las instancias de aplicaciones para que coincidan con los picos de demanda. Y debido a que los contenedores se basan en recursos del sistema operativo host, son mucho más livianos que las máquinas virtuales. Esto significa que los contenedores hacen un uso altamente eficiente de la infraestructura del servidor subyacente.

Hasta aquí todo bien. Pero aunque las API de tiempo de ejecución de contenedores son adecuadas para administrar contenedores individuales, lamentablemente son inadecuadas cuando se trata de administrar aplicaciones que pueden comprender cientos de contenedores distribuidos en múltiples hosts. Los contenedores deben administrarse y conectarse al mundo exterior para tareas como la programación, el equilibrio de carga y la distribución, y aquí es donde entra en juego una herramienta de orquestación de contenedores como Kubernetes.

Kubernetes, un sistema de código abierto para implementar, escalar y administrar aplicaciones en contenedores, maneja el trabajo de programar contenedores en un clúster de cómputo y administra las cargas de trabajo para garantizar que se ejecuten según lo previsto por el usuario. En lugar de concentrarse en las operaciones como una ocurrencia tardía, Kubernetes combina el desarrollo de software y las operaciones por diseño. Al utilizar construcciones declarativas que no dependen de la infraestructura para describir cómo se componen las aplicaciones, cómo interactúan y cómo se administran, Kubernetes permite un aumento de orden de magnitud en la operabilidad de los sistemas de software modernos.

Kubernetes fue creado por Google basándose en su propia experiencia en la ejecución de contenedores en producción, y seguramente debe gran parte de su éxito a la participación de Google. Google tiene algunos de los desarrolladores de software más talentosos del planeta y ejecuta algunos de los servicios de software más grandes por escala. Esta combinación aseguró que Kubernetes se convirtiera en una plataforma sólida como una roca que puede satisfacer las necesidades de escalado de prácticamente cualquier organización. Este artículo explica por qué Kubernetes es importante y por qué marca un importante paso adelante para los equipos de devops.

Vídeo relacionado: ¿Qué es Kubernetes?

En este video de 90 segundos, conozca Kubernetes, el sistema de código abierto para automatizar aplicaciones en contenedores, de uno de los inventores de la tecnología, Joe Beda, fundador y CTO de Heptio.

Un marco de infraestructura para hoy

En estos días, los desarrolladores deben escribir aplicaciones que se ejecuten en múltiples entornos operativos, incluidos servidores locales dedicados, nubes privadas virtualizadas y nubes públicas como AWS y Azure. Tradicionalmente, las aplicaciones y las herramientas que las respaldan han estado estrechamente vinculadas a la infraestructura subyacente, por lo que resultaba costoso utilizar otros modelos de implementación a pesar de sus ventajas potenciales. Esto significó que las aplicaciones se volvieron dependientes de un entorno particular en varios aspectos, incluidos los problemas de rendimiento relacionados con una arquitectura de red específica; adherencia a construcciones específicas del proveedor de nube, como técnicas de orquestación propietarias; y dependencias de un sistema de almacenamiento de fondo particular.

PaaS intenta sortear estos problemas, pero a menudo a costa de imponer requisitos estrictos en áreas como lenguajes de programación y marcos de aplicaciones. Por lo tanto, PaaS está fuera del alcance de muchos equipos de desarrollo.

Kubernetes elimina el bloqueo de la infraestructura al proporcionar capacidades básicas para contenedores sin imponer restricciones. Lo logra a través de una combinación de funciones dentro de la plataforma Kubernetes, incluidos Pods y Servicios.

Mejor gestión mediante modularidad

Los contenedores permiten que las aplicaciones se descompongan en partes más pequeñas con una clara separación de preocupaciones. La capa de abstracción proporcionada para una imagen de contenedor individual nos permite repensar fundamentalmente cómo se construyen las aplicaciones distribuidas. Este enfoque modular permite un desarrollo más rápido por parte de equipos más pequeños y más enfocados, cada uno de los cuales es responsable de contenedores específicos. También nos permite aislar dependencias y hacer un uso más amplio de componentes más pequeños y bien ajustados.

Pero esto no se puede lograr solo con contenedores; requiere un sistema para integrar y orquestar estas partes modulares. Kubernetes logra esto en parte mediante el uso de pods, generalmente una colección de contenedores que se controlan como una sola aplicación. Los contenedores comparten recursos, como sistemas de archivos, espacios de nombres del kernel y una dirección IP. Al permitir que los contenedores se coloquen de esta manera, Kubernetes elimina la tentación de incluir demasiadas funciones en una sola imagen de contenedor.

El concepto de un servicio en Kubernetes se usa para agrupar una colección de pods que realizan una función similar. Los servicios se pueden configurar fácilmente para la detección, la observabilidad, el escalado horizontal y el equilibrio de carga.

Implementar y actualizar software a escala

Devops surgió como un método para acelerar el proceso de creación, prueba y lanzamiento de software. Su corolario ha sido un cambio de énfasis de la gestión de la infraestructura a la gestión de cómo se implementa y actualiza el software a escala. La mayoría de los marcos de infraestructura no admiten este modelo, pero Kubernetes sí, en parte a través de los controladores de Kubernetes. Gracias a los controladores, es una infraestructura fácil de usar para administrar el ciclo de vida de las aplicaciones.

Deployment Controller simplifica una serie de tareas de gestión complejas. Por ejemplo:

  • Escalabilidad. El software se puede implementar por primera vez de manera escalable en pods, y las implementaciones se pueden escalar hacia adentro o hacia afuera en cualquier momento.
  • Visibilidad. Identifique implementaciones completadas, en proceso y fallidas con capacidades de consulta de estado.
  • Ahorro de tiempo. Pausar una implementación en cualquier momento y reanudarla más tarde.
  • Control de versiones. Actualice los pods implementados utilizando versiones más recientes de las imágenes de la aplicación y vuelva a una implementación anterior si la versión actual no es estable.

Entre otras posibilidades, Kubernetes simplifica algunas operaciones de implementación específicas que son especialmente valiosas para los desarrolladores de aplicaciones modernas. Estos incluyen los siguientes:

  • Autoescalado horizontal. Los escaladores automáticos de Kubernetes dimensionan automáticamente la cantidad de pods de una implementación según el uso de recursos específicos (dentro de los límites definidos).
  • Actualizaciones continuas. Las actualizaciones de una implementación de Kubernetes se organizan de manera "continua" en los pods de la implementación. Estas actualizaciones continuas se organizan mientras se trabaja con límites predefinidos opcionales sobre la cantidad de pods que pueden no estar disponibles y la cantidad de pods de repuesto que pueden existir temporalmente.
  • Despliegues canarios. Un patrón útil al implementar una nueva versión de una implementación es probar primero la nueva implementación en producción, en paralelo con la versión anterior, y escalar la nueva implementación mientras simultáneamente se reduce la implementación anterior.

A diferencia de las ofertas tradicionales de PaaS con todo incluido, Kubernetes ofrece una amplia flexibilidad para los tipos de aplicaciones compatibles. No impone marcos de aplicaciones (como Wildfly), no restringe los tiempos de ejecución del lenguaje admitido (Java, Python, Ruby), atiende solo a aplicaciones de 12 factores ni distingue "aplicaciones" de "servicios". Kubernetes admite una amplia variedad de cargas de trabajo, incluidas cargas de trabajo sin estado, con estado y de procesamiento de datos. Si una aplicación puede ejecutarse en un contenedor, debería ejecutarse bien en Kubernetes.

Sentar las bases para las aplicaciones nativas de la nube

No es sorprendente que, dado el interés en los contenedores, hayan surgido otras herramientas de gestión y orquestación. Las alternativas populares incluyen Apache Mesos con Marathon, Docker Swarm, AWS EC2 Container Service (ECS) y Nomad de HashiCorp.

Cada uno tiene sus méritos. Docker Swarm se incluye estrechamente con el tiempo de ejecución de Docker, por lo que los usuarios pueden pasar fácilmente de Docker a Swarm; Mesos con Marathon no se limita a contenedores, sino que puede implementar cualquier tipo de aplicación; AWS ECS es más fácil de acceder para los usuarios actuales de AWS. Sin embargo, los clústeres de Kubernetes pueden ejecutarse en EC2 e integrarse con servicios como Amazon Elastic Block Storage, Elastic Load Balancing, Auto Scaling Groups, etc.

Estos marcos están comenzando a duplicarse entre sí en características y funcionalidad, pero Kubernetes sigue siendo inmensamente popular debido a su arquitectura, innovación y la gran comunidad de código abierto que lo rodea.

Kubernetes marca un gran avance para devops porque permite a los equipos mantenerse al día con los requisitos del desarrollo de software moderno. En ausencia de Kubernetes, los equipos a menudo se han visto obligados a crear sus propios flujos de trabajo de implementación, escalado y actualización de software. Algunas organizaciones emplean equipos grandes para manejar esas tareas por sí solas. Kubernetes nos permite obtener la máxima utilidad de los contenedores y crear aplicaciones nativas de la nube que pueden ejecutarse en cualquier lugar, independientemente de los requisitos específicos de la nube. Este es claramente el modelo eficiente para el desarrollo de aplicaciones y operaciones que estábamos esperando.

New Tech Forum proporciona un lugar para explorar y discutir la tecnología empresarial emergente con una profundidad y amplitud sin precedentes. La selección es subjetiva, basada en nuestra selección de las tecnologías que creemos que son importantes y de mayor interés para los lectores. no acepta material de marketing para su publicación y se reserva el derecho de editar todo el contenido contribuido. Envíe todas sus consultas a [email protected]