OpenWebinars

DevOps

Kubernetes: Fundamentos y conceptos clave

A medida que la computación en la nube sigue evolucionando, Kubernetes se está convirtiendo en una habilidad esencial para los profesionales de IT. Este artículo profundiza en los conceptos y prácticas clave de Kubernetes, entre otros aspectos como sus componentes y arquitectura.

Diego Oliva

Diego Oliva

Lectura 8 minutos

Publicado el 26 de diciembre de 2023

Compartir

Introducción

HOPE IS NOT A STRATEGY: Dicho tradicional de la gente SRE

¿Cómo puede una empresa asegurarse de que sus aplicaciones en línea se mantengan funcionando sin problemas y puedan atender a más usuarios automáticamente cuando sea necesario, sin tener que gestionar manualmente cada detalle técnico?

¿Cómo podemos gestionar múltiples host? ¿Qué pasa si un host tiene problemas? ¿Cómo podemos mantenerlos actualizados?

Kubernetes es tu solución, ya que ha revolucionado el mundo de la tecnología, especialmente en la gestión de aplicaciones contenerizadas.

Venimos de soluciones con arquitecturas monolíticas, en las cuales todas las funcionalidades de nuestras aplicaciones residían en un único paquete junto con una base de datos. Sin embargo, desde 2010 en adelante, las arquitecturas basadas en microservicios han ganado popularidad, cambiando el paradigma de un único paquete de aplicación a un conjunto de múltiples servicios interconectados a través de la red.

Con este artículo buscamos brindar una comprensión clara de Kubernetes, destacando su importancia y aplicabilidad en el entorno IT actual.

Qué es Kubernetes

Kubernetes, a menudo abreviado como K8s, es un sistema de código abierto diseñado para automatizar la implementación, el escalado y la gestión de aplicaciones contenerizadas. Surgió como una respuesta a la creciente necesidad de las empresas de gestionar de manera eficiente y escalable sus aplicaciones en entornos cloud.

Kubernetes nos permite a los profesionales de IT desplegar aplicaciones de manera rápida y gestionarlas sin problemas en clústeres de máquinas físicas o virtuales. Esto es especialmente útil en entornos donde se manejan grandes volúmenes de datos y aplicaciones.

Una de las principales ventajas de Kubernetes es su capacidad para manejar el escalado automático de aplicaciones según la demanda. Esto significa que puede ajustar los recursos asignados a una aplicación, como CPU y memoria, de forma dinámica en función de la carga de trabajo actual. Este nivel de automatización reduce significativamente la necesidad de intervención manual, lo que a su vez minimiza los errores humanos y mejora la eficiencia operativa.

Además, Kubernetes ofrece alta disponibilidad y tolerancia a fallos. Puede distribuir y replicar aplicaciones en diferentes máquinas y zonas geográficas, asegurando que las aplicaciones permanezcan disponibles incluso si algunas partes del sistema fallan.

Origen y evolución

Kubernetes, inicialmente desarrollado por Google, ha evolucionado rápidamente desde su lanzamiento en 2014. Este sistema de orquestación de contenedores ha ganado popularidad por su eficiencia y flexibilidad en la gestión de aplicaciones a gran escala.

Kubernetes es un orquestador, encargado de gestionar contenedores. Soporta múltiples cloud y su principal función es manejar y gestionar Apps; y no máquinas.

Al ser una plataforma de código abierto, cuenta con el respaldo de una comunidad muy activa de desarrolladores y empresas, lo que garantiza una constante innovación y soporte.

Importancia en la gestión de las aplicaciones contenerizadas

Kubernetes juega un papel crucial en la gestión de aplicaciones contenerizadas, proporcionando un framework robusto para la automatización del despliegue, escalado y operaciones de aplicaciones en contenedores.

Una de las principales ventajas es que, Kubernetes reduce la disparidad entre los entornos de producción y desarrollo.

Lo bueno de Kubernetes es que es declarativo, es decir, podemos crear un fichero YAML o JSON, y en él, le podemos pedir que nos genere un POD, con un N.º de Contenedores y con el N.º de réplicas que necesitamos.

Una vez que este archivo se envía al clúster de Kubernetes, tratará de ejecutarlo y distribuirlos en WORKERS, que es donde se almacenan y ejecutan nuestras aplicaciones/contenedores.

La distribución y asignación de estas cargas de trabajo en los nodos de trabajo es manejada por el SCHEDULER, asegurando que los recursos se utilicen de manera eficiente.

Los servicios del clúster de Kubernetes se conectan con los distintos workers, a través de un agente (que corren en cada unos de los workers), llamado KUBELET, asegurando que los contenedores estén, en su nodo asignado, corriendo y saludables, de acuerdo con las definiciones declarativas proporcionadas.

No te preocupes, más adelante veremos todo esto con más calma.

Aprende DevOps para acelerar tus desarrollos de Software
Aprende las herramientas más importantes para acelerar el desarrollo de software: Jenkins, Docker, Kubernetes, Vagrant y más.
Comenzar gratis ahora

Arquitectura de Kubernetes

Clústeres

Un clúster de Kubernetes es un conjunto de máquinas virtuales o físicas que ejecutan aplicaciones contenerizadas. Estos clústeres son la columna vertebral de Kubernetes, permitiendo escalar y gestionar aplicaciones de manera eficiente.

Imaginemos que un clúster de Kubernetes es como una orquesta sinfónica, donde cada instrumento es un contenedor. Cada contenedor ejecuta una pieza de una aplicación más grande, trabajando en armonía con otros contenedores para realizar una función compleja. Sin embargo, para que esta orquesta funcione de manera efectiva, necesita un director de orquesta. Aquí es donde entra Kubernetes.

Kubernetes distribuye las aplicaciones de manera uniforme entre los nodos de trabajo utilizando un algoritmo inteligente de planificación. Este algoritmo tiene en cuenta diversos factores, como los recursos disponibles (CPU, memoria), las afinidades de los Pods, y las restricciones de tolerancia a fallos para asegurar que las aplicaciones se ejecuten de manera eficiente y escalable.

Además, Kubernetes está diseñado con una alta resistencia a los fallos. Si un nodo experimenta problemas o se sobrecarga, el sistema redistribuye automáticamente las cargas de trabajo a otros nodos disponibles. Esta capacidad de autoreparación y equilibrio de carga garantiza la estabilidad y la eficiencia del sistema.

La arquitectura de un clúster de Kubernetes se compone de varios componentes críticos, cada uno desempeñando roles específicos para garantizar una gestión eficiente y segura de las aplicaciones contenerizadas. Estos componentes incluyen:

  • Control Plane, (anteriormente conocido como Nodos Maestros) se refiere al grupo de servidores responsables de las funciones de orquestación. Estos servidores gestionan los nodos o instancias, y cada uno de ellos cuenta con un agente, denominado KUBELET, que mencionamos anteriormente.
  • Cloud Controller Manager, se conecta a la API de tu proveedor Cloud (muy importante, ya que esto es algo clave que los diferencia de otro tipo de orquestadores como DOCKER COMPOSE).

Nodes

Los Nodos son los que realmente contienen la tecnología de contenedores (Container RunTime) para su ejecución. Cada nodo puede ejecutar múltiples Pods, que son los componentes básicos de Kubernetes.

En general, podemos decir que los WorkerNodes son los que hacen correr los contenedores y los MasterNodes, simplemente se encargan de gestionarlos.

Pods

El concepto básico más importante. Se podrian definir como la VM que contiene el aplicativo. Cuando ejecutamos una VM podemos saber que en ella, se ejecutan diferentes procesos, los cuales comparten las mismas interfaces de Red (NIC), el mismo almacenamiento físico compartido, CPU…

Podemos decir que un POD es lo mismo, pero en lugar de manejar procesos, lo que hay son *contenedores.

Los pods son la unidad más pequeña desplegable en Kubernetes. Un pod representa un conjunto de uno o más contenedores que comparten almacenamiento, red y especificaciones de cómo ejecutar los contenedores.

Un POD puede albergar uno o más contenedores, y todos compartirán la misma dirección IP (Dinámica). Si el POD se cae y se levanta otro en su lugar, este nuevo POD tendrá una dirección IP diferente. Todos los contenedores dentro de un POD comparten almacenamiento, recursos y un ciclo de vida unificado; por lo tanto, si el POD cae, todos sus contenedores asociados también se verán afectados.

Componentes clave de Kubernetes

Nodos maestros (Master nodes)

El nodo maestro es el cerebro del clúster de Kubernetes. Controla y gestiona el estado deseado del clúster. Los principales componentes del nodo maestro incluyen:

  • API Server: El servidor API es el componente principal del plano de control. Proporciona una API REST que se utiliza para administrar el clúster.
  • Etcd: BBDD NO-Relacional, que almacena de datos clave-valor para la configuración y coordinación de los propios clústeres de Kubernetes. Permite guardar el estado de tu Cluster.
  • Scheduler: Asigna pods a nodes.
  • Controller Manager: Ejecuta controladores para regular el estado del clúster y se encarga de localizar donde podemos desplegar nuestra carga de trabajo.

Nodos de trabajo (Worker nodes)

Estos nodos son los ejecutores, donde se despliegan y se ejecutan las aplicaciones en contenedores. Cada nodo de trabajo incluye un agente llamado Kubelet, que se comunica con el Control Plane y gestiona los contenedores y Pods en ese nodo. Cada nodo de trabajo contiene los siguientes componentes:

  • Kubelet: Agente que se ejecuta en cada nodo, asegurando que los contenedores estén corriendo en un Pod.
  • Kube-Proxy: Se encarga de recibir el tráfico y mandarlo a los PODS que requieran ese tráfico.
  • Container Runtime: Es el software que se emplea en el entorno de ejecución de contenedores (como Docker, containerd, CRI-O), que gestiona los contenedores en los nodos.

Componentes adicionales

  • Red de Cluster: Proporciona la comunicación entre los distintos componentes del clúster. Soluciones comunes incluyen Calico, Flannel, y Weave.
  • Sistema de Almacenamiento Persistente: Como Persistent Volumes (PV) y Persistent Volume Claims (PVC), que proporcionan una manera de almacenar datos de manera persistente más allá del ciclo de vida de los Pods.
  • Dashboard de Kubernetes: Una interfaz de usuario web para administrar y supervisar el clúster de Kubernetes.

Instalación y configuración inicial

Actualmente, levantar un clúster de Kubernetes es muy fácil, en tu mismo equipo local, podrás empezar a jugar/trabajar con soluciones como Minikube o kubeadm.

Plataformas como Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) o Azure Kubernetes Service (AKS) ofrecen servicios gestionados para la instalación en la nube.

El mejor punto de partida para comenzar es desde aquí: Kubernetes Documentation

Preparativos y requisitos

El primer paso necesario será disponer de KUBECTL (esencial para interactuar con el clúster de Kubernetes una vez esté en funcionamiento, aunque no es requerida para la instalación del clúster en sí), pero antes de instalar Kubernetes, deberíamos realizar algunas comprobaciones previas:

  • Asignar nombres de dominio a los nodos de su clúster: Kubernetes utiliza nombres de dominio para identificar los nodos del clúster. Aunque no sea estrictamente necesario, ya que Kubernetes puede operar utilizando direcciones IP, es aconsejable asignar nombres.
  • Configurar el DNS: Kubernetes utiliza el DNS para resolver nombres de dominio en direcciones IP. Por lo tanto, debes configurar el DNS para que pueda resolver los nombres de dominio de sus nodos.
  • Configurar el firewall: Debe configurar el firewall para permitir el tráfico de red entre los nodos de su clúster.
  • Verificación de Hardware y Software: Verificar CPU, memoria, espacio de almacenamiento, SSOO, ya sean máquinas virtuales o físicas.
  • Almacenamiento persistente: Si el clúster va a alojar aplicaciones que requieren almacenamiento persistente, deberemos planificar y configurar soluciones adecuadas, como Persistent Volumes (PV) y Persistent Volume Claims (PVC).

Qúe necesitas para crear un contenedor

  • Crear un fichero DOCKERFILE, con toda la descripción de parámetros y configuración que queramos tener en el contenedor.
  • Añadir la imagen base (SSOO) más adecuada para tu aplicación.
  • Definir parámetros como variables de entorno.
  • Instalar dependencias.
  • Agregar los archivos de su aplicación al contenedor como una nueva capa sobre la imagen base.
  • Asignación del puerto que usará la aplicación.
  • Arrancado de la aplicación.
  • Crear un YAML para Kubernetes en el que se defina un Pod o Deployment, especificando la imagen del contenedor y otros detalles de configuración.
  • Desplegar el contenedor en Kubernetes utilizando kubectl apply -f [archivo.yaml] y finalmente verificar el estado del despliegue con kubectl get pods.

La imagen del contenedor debe estar disponible antes de que puedas definir y desplegar el Pod que lo utilizará.

Automatización y gestión de contenedores

Despliegue y manejo de contenedores

En el caso de Kubernetes, la forma de desplegar una aplicación es de forma declarativa, como ya mencionamos antes. Simplemente, decimos, yo quiero desplegar una imagen, junto al número de réplicas. La gente de DevOPs solicitarán la petición al Cluster Node.

Si a la hora de desplegar, uno de los nodos falla, automáticamente el sistema reabalanzaría la carga de ese nodo, a otros nodos que sí estén disponibles.

Y cuando se presentase un nuevo nodo en el clúster, se balancearía de nuevo la carga al nuevo nodo disponible.

Los aplicativos se pueden desplegar a través de la línea de comandos (CLI) o través de un fichero YAML, como ya hemos comentado. En estos ficheros podemos especificar el tipo de Deployment, etiquetas (labels), imagen de la aplicación, número de réplicas, servicios (imprescindibles para asignar a los PODS como LoadBalancer), puertos, protocolos…

Para ampliar todos los conceptos que estamos tratando, te aconsejo que realices la Carrera de desarrollador con Kubernetes de OpenWebinars.

Kubernetes operators: Automatización avanzada

Los Operators extienden las capacidades de Kubernetes, automatizando la gestión de aplicaciones complejas.

Imagina que tienes una aplicación compleja que necesita ajustes y mantenimiento constantes. Normalmente, esto requeriría mucha atención manual por parte de IT. Aquí es donde entran en juego los Operators: automatizan estos procesos complicados. Los Kubernetes Operators son como pilotos automáticos para aplicaciones que se ejecutan en Kubernetes.

Actúan como expertos virtuales, tomando decisiones inteligentes para mantener tus aplicaciones funcionando sin problemas. Por ejemplo, pueden actualizar automáticamente tu aplicación, ajustar su tamaño para manejar más usuarios, o incluso repararla si algo sale mal, todo sin que tú tengas que intervenir.

Los Operators utilizan Custom Resource Definitions (CRDs) para crear nuevos tipos de configuraciones en Kubernetes. Estas configuraciones permiten a los Operators entender exactamente cómo quieres que se comporte tu aplicación. Piénsalo como enseñarle a Kubernetes nuevas habilidades específicamente diseñadas para tu aplicación. Son como asistentes personalizados, cada uno con conocimientos específicos sobre cómo gestionar una determinada aplicación. Ya sea una base de datos complicada o un sistema de monitorización, hay un Operator que puede hacerse cargo de los detalles técnicos.

Para los equipos de IT y DevOps, simplifican mucho la gestión de aplicaciones complejas, permitiendo que el equipo se concentre en tareas más importantes, en lugar del mantenimiento diario de la solución. Además, reducen la posibilidad de errores humanos, ya que mucho del trabajo repetitivo y técnico se automatiza.

Seguridad ymMantenimiento

Consejos y mejores prácticas

Para proteger las aplicaciones de Kubernetes, es importante implementar una estrategia de seguridad sólida. Aquí os indico algunos tips y recomendaciones a tener en cuenta:

  • Usar imágenes de contenedor de confianza: Las imágenes de contenedor de confianza son imágenes que han sido verificadas para que sean seguras. Puede encontrar imágenes de contenedor de confianza, como Docker Hub.
  • Aplique parches a las imágenes de contenedor: Las vulnerabilidades de seguridad se descubren regularmente en las imágenes de contenedor. Es importante aplicar parches a las imágenes de contenedor de forma oportuna.
  • Control de Acceso Basado en Roles (RBAC): La autorización de Kubernetes controla quién puede acceder a los recursos del clúster. Es fundamental configurar la autorización de Kubernetes de forma segura para restringir el acceso a los recursos solo a los usuarios autorizados.
  • Políticas de Seguridad de Pod: Las políticas de seguridad restringen los privilegios de los contenedores en un Pod, como el acceso a los recursos del sistema, el uso de volúmenes y la capacidad de ejecutar como root.
  • Supervisión y monitorización de los servicios: La supervisión puede ayudar a detectar amenazas de seguridad. Es importante implementar la supervisión del clúster de Kubernetes para detectar anomalías que puedan indicar un ataque.
Aumenta la productividad de tu equipo de desarrollo
Desarrolla el talento de tu empresa 3 veces más rápido con formaciones prácticas y avanzadas de Cloud Computing y DevOps.
Solicitar más información

Casos de uso y aplicaciones prácticas

Kubernetes, como plataforma de orquestación de contenedores, tiene una amplia gama de aplicaciones y casos de uso en diversos entornos y sectores. Aquí recopilamos algunos casos de uso y aplicaciones prácticas de Kubernetes:

  • Empresas que buscan descomponer aplicaciones monolíticas en servicios más pequeños y manejables.
  • Equipos de desarrollo que necesitan entornos para integrar y probar código de manera continua (CI/CD).
  • Aplicaciones que experimentan fluctuaciones en el uso, como sitios web de comercio electrónico durante temporadas de alto tráfico.
  • Facilita la portabilidad de aplicaciones al abstraer la infraestructura subyacente, permitiendo migraciones suaves y sin interrupciones entre diferentes entornos de nube o centros de datos.

Conclusiones

Hemos visto como Kubernetes, facilita la gestión automatizada y eficiente de aplicaciones a gran escala, destacando por su escalabilidad y alta disponibilidad. Se ha establecido como una tecnología fundamental en el ámbito de la orquestación de contenedores, permitiendo a las empresas desplegar y gestionar aplicaciones de forma eficiente en entornos de cloud computing.

Mirando hacia el futuro, es probable que veamos avances en Kubernetes en áreas como la seguridad, la automatización de operaciones y la integración con tecnologías emergentes como la inteligencia artificial y el edge computing. Esto podría ampliar aún más su aplicabilidad y eficiencia, manteniéndolo como una herramienta esencial en la infraestructura tecnológica moderna.

Bombilla

Lo que deberías recordar de Kubernetes

  • Kubernetes es una plataforma de código abierto, esencial para administrar aplicaciones contenerizadas.
  • Kubernetes no es una Plataforma como Servicio (PaaS) convencional.
  • Aporta consistencia entre los entornos de desarrollo, integración y producción.
  • Su arquitectura basada en clústeres y pods permite una gran escalabilidad.
  • La seguridad y mantenimiento son fundamentales para el funcionamiento eficiente de un clúster de Kubernetes.
  • Kubernetes continúa evolucionando, adaptándose a las nuevas demandas del mercado.
Compartir este post

También te puede interesar

Icono de la tecnología
Taller

Desarrollo nativo en Kubernetes

Intermedio
56 min.

Aprende a desarrollar en Kubernetes de una manera efectiva y generar entornos remotos fácilmente.

Pablo Chico de Guzmán
4.7