Introducción a Kubernetes: orquestador de contenedores
DESARROLLO WEB, INFRAESTRUCTURA.Kubernetes es un orquestador open source para aplicaciones que se ejecutan en contenedores de software, automatizando el despliegue, escalabilidad y gestión de aplicaciones distribuidas.
Kubernetes nos hace la vida más fácil al encargarse del trabajo duro en el escalamiento, recuperación automática, balanceo de cargas, despliegues y mucho más. Agrupa los contenedores que componen una aplicación en unidades lógicas para gestionarlas y darles visibilidad.
Actualmente Kubernetes es un componente esencial en el manejo de contenedores en una estrategia Cloud Native o de nube nativa.
Este artículo hacer parte de una serie dedicada a explicar la tecnología que actualmente soporta los servicios y soluciones Cloud-Native de APLYCA en Desarrollo y Consultoría Cloud.
¿Qué es Orquestación de Contenedores?
Gestionar aplicaciones en contenedores sin orquestación es terrible.
Sin un sistema de orquestación nuestro equipo de operaciones va a pedir la renuncia muy rápido. Nadie quiere o puede gestionar manualmente las duras actividades de un orquestador: montaje de máquinas, inicializar contenedores, reemplazar contenedores fallidos, enlazar contenedores unos con otros, exponer servicios a máquinas por fuera del cluster, escalar o desescalar contenedores para suplir la demanda, o organizar despliegues de código sin afectar la disponibilidad del servicio. Es agotador, frustrante, limitante y muy dispendioso.
La orquestación de contenedores hace todas estas cosas por medio de automatización de infraestructura. El gran beneficio de la orquestación es aprovechar al máximo tareas automatizadas y procesos ya definidos. La orquestación permite gestionar infraestructura muy compleja de manera simple.
Como el reto de orquestación requiere herramientas de fácil instalación, configuración y mantenimiento, Kubernetes se creó para suplir esa necesidad.
Origenes de Kubernetes
En el año 2014, Google liberó Kubernetes, su propia herramienta open source de orquestación de contenedores basada en proyectos internos como Borg y Omega.
Kubernetes se desarrolló originalmente para ejecutar las numerosas aplicaciones globales de Google para modificar sus productos de manera fácil y eficaz, así como hacer correcciones de software a la mayor escala posible. Se rumora que Google ejecuta alrededor de dos mil millones de contenedores por semana en su versión interna de Kubernetes.
El proyecto recoge 15 años de experiencia de Google usando contenedores y los enriquece con las mejores ideas y prácticas de una comunidad inmensa.
La acogida de Kubernetes fué tan grande que el proyecto fue adoptado por la comunidad en cabeza de la CNCF - Cloud Native Computing Foundation, una organización creada como parte de la Linux Foundation.
El código abierto Kubernetes, actualmente en estado ‘graduado’ por su madurez, es administrado por Cloud Native Computing Foundation. Con la fundación, el proyecto deja de estar en cabeza de una sola empresa y se desarrolla con el apoyo (y los intereses) de decenas de organizaciones y miles de miembros de la comunidad.
Sistema operativo para el Datacenter
En términos generales los contenedores resuelven los retos de escalabilidad que teníamos con máquinas virtuales tradicionales. Si alguna vez has tenido que montar un cluster de máquinas virtuales, con auto-escalamiento, despliegues distribuidos, monitoreo, logueo y muchos otros componentes, sabes que no es una tarea fácil. Su capacidad de responder a cambios bruscos de tráfico es muy limitada y tu capacidad de repetir el proceso para decenas, cientos o miles de aplicaciones de negocios es simplemente imposible.
Un contenedor inicia miles de veces más rápido que una máquina virtual
Con Kubernetes podemos lograr una abstracción mayor de los recursos físicos de un datacenter. Cuando hablamos de arquitecturas modernas de datacenter frecuentemente se menciona el concepto de un data center OS o sistema operativo de datacenter. Pasamos de ver el datacenter como una colección de servidores independientes a verlo como un gran computador: altamente disponible, flexible, que crece y se transforma con el negocio.
Este concepto es la base de sistemas como Kubernetes y Mesosphere DC/OS que plantea un cambio de concepto importante: la transición de manejar máquinas como mascotas (una a una) a máquinas como un grupo o manada. Atrás quedan los tiempos en que se escoge en qué máquina corre una aplicación, o los días en que cada máquina tenía un nombre particular (en ocasiones muy graciosos) y pasamos a una colección de máquinas esencialmente indistintas que se administran como una manada. Kubernetes nos ayuda en su gestión.
¿Qué puede hacer Kubernetes?
Entremos en mayor detalle sobre las funciones de Kubernetes y sus principales características:
Distribución inteligente de contenedores entre máquinas (llamadas nodos).
Integración con diferentes plataformas y proveedores de Cloud
Aprovechar efectivamente los recursos de hardware para ejecutar aplicaciones. Reducir recursos no-utilizados al máximo.
Es portable y funciona en múltiples tipos de infraestructura, sistemas de virtualización o hardware dedicado.
Permite unir como un solo sistema datacenters on-premise o de diferentes proveedores cloud a través de federación o como parte de una estrategia multicloud.
Balanceo de cargas inteligente entre diferentes nodos
Altamente flexible en su configuración
Fácil escalabilidad, tanto horizontal como vertical.
Trabaja de forma autónoma sin requerir alto mantenimiento.
Con Kubernetes por fin tenemos una verdadera plataforma Cloud que combina portabilidad y extensibilidad para abstraer la complejidad de los diferentes recursos que ofrecen los proveedores de Cloud.
Soportado por una comunidad muy fuerte, Kubernetes se posiciona sobre el desorden de opciones que existen para ofrecer una única capa en donde los desarrolladores pueden estar seguros de que las especificaciones que sus aplicaciones necesitan siempre van a existir.
Esquema básico de Kubernetes
¿Dónde participa Docker con Kubernetes?
Kubernetes y Docker son tecnologías complementarias. Kubernetes y Docker no compiten entre sí. Son tecnologías que se complementan en diferentes niveles. Kubernetes, como orquestador no realiza la ejecución específica del contenedor.
Esta labor se le delega normalmente Docker, pues es la plataforma de contenedores más popular. Podemos entender al orquestador como una tecnología de alto nivel, y a la plataforma de contenedores (container runtime) como una plataforma de más bajo nivel en el sistema.
En el futuro otras plataformas de contenedores que cumplan con la especificación de Container Runtime Interface (CRI) podrán reemplazar o ejecutarse al lado de Docker sin afectar las implementaciones existentes.
Términos claves de Kubernetes
Estos son algunos términos que deberemos entender al profundizar en Kubernetes:
Cluster: Son recursos físicos o virtuales, y recursos de almacenamiento utilizados por Kubernetes en donde los pods son desplegados, gestionados y replicados. Kubernetes puede ser utilizado en diferentes sistemas como: Windows Azure, Debian, Ubuntu, RedaHat, entre otros.
Pods: Son la unidad más pequeña que comprende uno o más contenedores Docker que funcionan bajo una misma unidad. En muchos casos un Pod se compone de un solo contenedor, pero su capacidad de alojar varios contenedor muy cerca uno de otro es una característica muy poderosa de Kubernetes.
Replication Controllers: Manejan el ciclo de vida del pod, se aseguran de que el número de réplicas automáticas del pod se encuentren ejecutando, creando y destruyendo los pods, como sea requerido.
Services: Los servicios (services) permiten acceder a los contenedores con un nombre único de DNS y direcciones IP estables.
Labels: Son fundamentales y son utilizados para organizar y seleccionar un grupo de objetos en pares del tipo key:value. Ayudan a obtener las listas de los servidores a donde el el tráfico debe pasar.
¿Cuándo aprovechar Kubernetes?
Esperamos que esta introducción de Kubernetes se puede implementar y administrar una aplicación de forma global, desde un único lugar y con una alta efectividad.
Si su organización tiene interés en implementar Kubernetes de la mano de expertos, lo invitamos a contactarnos.