Kubernetes 101

Francisco Siri
Nov 6 · 5 min read

Kubernetes (o K8) es un sistema de código abierto para la automatización del despliegue, escalamiento y manejo de aplicaciones basadas en contenedores; las empresas se vuelcan a la nube por los beneficios de agilidad, flexibilidad, portabilidad y control de costos, esto por lo general conlleva un cambio en la forma de cómo se desarrollan las aplicaciones, teniendo que pasar por un proceso estructural de cambio no sólo de la forma de trabajo, sino de la cultura de la organización. Como estos ecosistemas crecen cada vez más, a su vez crece la complejidad en el manejo de los mismos. Kubernetes resuelve la mayor parte de este problema automatizando el despliegue, escalamiento y manejo de aplicaciones basadas en contenedores.

Clusters y su influencia en la arquitectura

Los Cluster son la base de la arquitectura de Kubernetes, cada Kubernete se compone de al menos un nodo maestro y múltiples nodos de trabajo.

Diagrama arquitectura docker

El Nodo Maestro controla y monitorea a los nodos de trabajo y todos los recursos de Kubernetes que se encuentran en el cluster, estos corren un scheduler service que es quién decide donde las aplicaciones son desplegadas basados en requerimientos preestablecidos y capacidades disponibles.

Composición de nodo maestro

Estos nodos tienen componentes que trabajan entre sí para lograr estas tareas; el API server es una parte fundamental de Kubernetes que valida y configura data para los objetos API. Es el servidor front end para el panel de control, manejando todos los requerimientos y comunicaciones para con las APIs. Etcd es la base de datos donde Kubernetes almacena toda su información, que nodos existen, que recursos existen en el cluster y demás. Si se usa se debe tener en cuenta tener un plan de back-up para esos datos. Kube controller manager es el responsable de correr los control loops que revisa el estado en conjunto del cluster a través del API server y hace cambios sobre la marcha con el objetivo de llevar el estado actual al estado ideal.

Los nodos de trabajo son unidades computacionales que despliegan, corren y manejan aplicaciones basadas en contenedores. Estos usan herramientas de gestión de contenedores como Docker, se escriben scripts que especifican configuraciones y definen los recursos que se necesitan para correr las aplicaciones.

composición de los nodos de trabajo

Los PODs son la unidad desplegable más pequeña en un cluster, pueden estar compuestos por uno o más contenedores que comparten resursos e interactúan entre sí o contenedores agrupados que deben tratarse como una sola unidad, estos poseen una IP interna y pueden contar con volúmenes persistentes.

Kubelet es el responsable de manejar el runtime del contenedor para comenzar cargas de trabajo que estén programadas por el nodo, y también monitorear su estado. Kube Proxy refleja servicios definidos en la API de Kubernetes en cada nodo, hace el networking que define las rutas de requerimientos entre PODs de distintos nodos y aquellas entre los nodos y la internet.

Una ventaja de contar con este tipo de arquitectura es el hecho de contar con despliegues que describen el estado ideal de un POD y se aseguran que el estado actual coincida con el mismo. Estos despliegues permiten crear réplicas de PODs idénticos que corran y se actualicen de forma controlada para que las rolling updates se realicen sin tiempo de downtime, significando eliminar la necesidad de apagar la aplicación o dejar de correrla para que pueda ejecutarse la nueva versión. Kubernetes permite que la versión anterior corra hasta asegurarse que la nueva versión corre de manera correcta y solo allí “mata” a la versión anterior para que corra la nueva.

Las aplicaciones basadas en contenedores en situaciones prueban vulnerabilidad a ataques y mientras más contenedores se tengan, más superficie y filtraciones pueden ser explotadas por los atacantes. Como resultado, la seguridad de Kubernetes debe ser una parte integral de cualquier despliegue. IBM Cloud Kubernetes Service incorpora características de seguridad incorporadas para protección y análisis de riesgos, proporcionando protección a nuestra infraestructura de Clusters Kubernete y comunicaciones de red, aislamiento de recursos computacionales y conformidad de seguridad a lo largo de lo componentes de infraestructura y despliegues de contenedores.

Kubernetes y DevOps

DevOps combina desarrollo de software y procesos de operación de IT para acortar los ciclos de desarrollo manteniendo los objetivos de negocio. Como herramienta, Kubernetes enlaza al desarrollo y operaciones por diseño, haciéndolo muy conveniente para organizaciones comprometidas con un enfoque de DevOps.

Kubernetes y contenedores logran modularidad dividiendo las aplicaciones en microservicios, que facilita procesos de DevOps haciendo que las integraciones y desarrollos sean continuos implicando cambios pequeños en componentes individuales con mayor rapidez y menos disrupción para los usuarios. Kubernetes hace ajustes de estado de su ecosistema de forma automática para que este coincida con el estado que se definió como ideal en instrucciones anteriores haciendo procesos de DevOps más fluidos asegurando que las aplicaciones estén bajo requerimientos preestablecidos.

En conclusión, Kubernetes nos permite crear una arquitectura modular para nuestra aplicación basada en contenedores que nos otorga características de portabilidad entre nubes, balances de carga, actualizaciones y despliegues automatizados con una integridad y seguridad otorgada por el manejo de réplicas y bajas, ejecuciones Batch y escalamiento horizontal con una alta disponibilidad en un contexto de constantes cambios y actualizaciones para satisfacer a usuarios cada vez más exigentes facilitando la tarea a programadores, arquitectos y diseñadores.

Hoy en día cada vez más empresas y organizaciones confían en Kubernetes como orquestador de contenedores de aplicaciones cada vez más completas y con más contenedores interactuando entre sí y con otros sistemas, desde startups y emprendimientos que aprovechan para ahorrar costos y facilidad de escalamiento a grandes empresas como Spotify que confían en la velocidad y alinearse con prácticas y herramientas aprobadas por la industria. Nuevas aplicaciones como Machine Learning, Edge Computing y IOT están adaptándose a ecosistemas de nube a través de proyectos como Kubeflow, Kubernetes podría ser el timón de su éxito y crecimiento.

Kubernetes encontraría su mayor éxito si se convierte en un escencial invisible de la vida diaria, como en diseños de redes eléctricas, o comunicaciones. Los estándares se dan por sentado en un mundo de constantes cambios y avances de tecnología que nos llevan a lugares impensados, donde Kubernetes puede imponerse como corazón de nuevos desarrollos apoyados por una comunidad de código abierto donde los límites y fronteras se desdibujan hacia un futuro incierto.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade