Sistemas distribuidos
TECNOLOGÍAS Y NUBES
¿Qué es Kubernetes?
Kubernetes es una plataforma portable y extensible de código abierto para
administrar cargas de trabajo y servicios. Kubernetes facilita la automatización
y la configuración declarativa. Tiene un ecosistema grande y en rápido
crecimiento. El soporte, las herramientas y los servicios para Kubernetes están
ampliamente disponibles.
Google liberó el proyecto Kubernetes en el año 2014. Kubernetes se basa en la
experiencia de Google corriendo aplicaciones en producción a gran escala por
década y media, junto a las mejores ideas y prácticas de la comunidad.
¿Por qué necesito Kubernetes y qué puede hacer por mi?
Kubernetes tiene varias características. Puedes pensar en Kubernetes como:
- Una plataforma de contenedores
- Una plataforma de microservicios
- Una plataforma portable de nube
Kubernetes ofrece un entorno de administración centrado en contenedores.
Kubernetes orquesta la infraestructura de cómputo, redes y almacenamiento
para que las cargas de trabajo de los usuarios no tengan que hacerlo. Esto
ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad
de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre
proveedores de infraestructura.
Por qué en Xemantics estamos utilizando contenedores:
- Ágil creación y despliegue de aplicaciones: Mayor facilidad y eficiencia al crear imágenes de contenedor en vez de máquinas virtuales.
- Desarrollo, integración y despliegue continuo: Permite que la imagen de contenedor se construya y despliegue de forma frecuente y confiable, facilitando los rollbacks pues la imagen es inmutable.
- Separación de tareas entre Dev y Ops: Puedes crear imágenes de contenedor al momento de compilar y no al desplegar, desacoplando la aplicación de la infraestructura.
- Observabilidad: No solamente se presenta la información y métricas del sistema operativo, sino la salud de la aplicación y otras señales.
- Consistencia entre los entornos de desarrollo, pruebas y producción: La aplicación funciona igual en un laptop y en la nube.
- Portabilidad entre nubes y distribuciones: Funciona en Ubuntu, RHEL, CoreOS, tu datacenter físico, Google Kubernetes Engine y otros.
- Administración centrada en la aplicación: Eleva el nivel de abstracción del sistema operativo y el hardware virtualizado a la aplicación que funciona en un sistema con recursos lógicos.
- Microservicios distribuidos, elásticos, liberados y débilmente acoplados: Las aplicaciones se separan en piezas pequeñas e independientes que pueden ser desplegadas y administradas de forma dinámica, y no como una aplicación monolítica que opera en una sola máquina de gran capacidad.
- Aislamiento de recursos: Hace el rendimiento de la aplicación más predecible.
- Utilización de recursos: Permite mayor eficiencia y densidad.
La Manera Nueva es desplegar contenedores basados en virtualización a nivel
del sistema operativo, en vez del hardware. Estos contenedores están aislados
entre ellos y con el servidor anfitrión: tienen sus propios sistemas de archivos,
no ven los procesos de los demás y el uso de recursos puede ser limitado. Son
más fáciles de construir que una máquina virtual, y porque no están acoplados
a la infraestructura y sistema de archivos del anfitrión, pueden llevarse entre
nubes y distribuciones de sistema operativo.
Ya que los contenedores son pequeños y rápidos, una aplicación puede ser
empaquetada en una imagen de contenedor. Esta relación uno a uno entre
aplicación e imagen nos abre un abanico de beneficios para usar
contenedores. Con contenedores, podemos crear imágenes inmutables al
momento de la compilación en vez del despliegue ya que las aplicaciones no
necesitan componerse junto al resto del stack ni atarse al entorno de
infraestructura de producción. Generar una imagen de contenedor al
momento de la compilación permite tener un entorno consistente que va
desde desarrollo hasta producción. De igual forma, los contenedores son más
transparentes que las máquinas virtuales y eso hace que el monitoreo y la
administración sean más fáciles. Esto se aprecia más cuando los ciclos de vida
de los contenedores son administrados por la infraestructura en vez de un
proceso supervisor escondido en el contenedor. Por último, ya que solo hay
una aplicación por contenedor, administrar el despliegue de la aplicación se
reduce a administrar el contenedor.