Skip to content

Conceptos principales de Kubernetes

Objetivo

Proporcionar a los participantes un conocimiento sólido y detallado sobre los conceptos principales de Kubernetes, enfocándonos en su arquitectura, componentes esenciales, y funcionalidades clave.

Contenido

Componentes de Kubernetes

Un clúster de Kubernetes consta de un conjunto de máquinas denominadas Nodos o Workers, que ejecutan aplicaciones en contenedores. Cada clúster tiene al menos un nodo Worker.

CNCF

Los nodos Workers alojan en Pods, son los componentes de la carga de trabajo de la aplicación. El plano de control gestiona los nodos Workers y los Pods en el clúster. En entornos de producción, el plano de control generalmente se ejecuta en varias computadoras y un clúster generalmente ejecuta múltiples nodos, lo que proporciona tolerancia a fallas y alta disponibilidad.

La siguiente imágen describe los diversos componentes que necesita tener para un clúster de Kubernetes completo y funcional.

CNCF

Un clúster de Kubernetes necesita varios componentes de software esenciales para funcionar correctamente. Estos componentes se pueden clasificar en dos categorías principales: los que forman parte del plano de control (control plane) y los que están en los nodos de trabajo (worker nodes).

Plano de Control (Control Plane)

  1. API Server (kube-apiserver): Es el componente central del plano de control y actúa como el frontend para Kubernetes. El API Server expone la API de Kubernetes y es el punto de entrada para los comandos de kubectl.

  2. Etcd: Es la base de datos de almacenamiento clave-valor para todo el estado del clúster. Guarda la configuración del clúster y el estado en tiempo real de los objetos de Kubernetes.

  3. Scheduler (kube-scheduler): Responsable de asignar pods a nodos disponibles. El Scheduler toma decisiones de programación (scheduling) basadas en la capacidad de recursos, restricciones, afinidades, políticas, entre otros.

  4. Controller Manager (kube-controller-manager): Ejecuta los controladores de Kubernetes, que son procesos de fondo que regulan el estado del clúster, como asegurar que el número deseado de réplicas de un servicio esté en funcionamiento.

  5. Cloud Controller Manager (kube-cloud-controller-manager): Opcional y específico para aquellos que ejecutan Kubernetes en una infraestructura de nube. Permite vincular el clúster de Kubernetes con las API de los proveedores de nube para gestionar recursos como balanceadores de carga y discos de almacenamiento.

Nodos de Trabajo (Worker Nodes)

  1. Kubelet: Es un agente que se ejecuta en cada nodo de trabajo. Asegura que los contenedores estén corriendo en un Pod.

  2. Kube-proxy: Es un proxy de red que se ejecuta en cada nodo de trabajo. Gestiona el enrutamiento de red en los nodos, como las reglas de IPTables, para permitir la comunicación entre los Pods y el exterior.

  3. Container Runtime: Es el software responsable de ejecutar los contenedores. Kubernetes es compatible con varios runtimes de contenedores, como Docker, containerd y CRI-O.

Componentes Adicionales

  1. DNS de Clúster (CoreDNS): Proporciona descubrimiento de nombres dentro del clúster, permitiendo que los servicios y Pods se encuentren a través de DNS.

  2. Dashboard (Kubernetes Dashboard): Una interfaz de usuario web para Kubernetes. Aunque no es esencial para la operación del clúster, es una herramienta útil para la gestión y el monitoreo.

  3. Red de Clúster: Los plugins de red de Kubernetes, como Calico, Flannel o Weave Net, que proporcionan la red entre los nodos del clúster y permiten que los Pods se comuniquen entre sí.

  4. Ingress Controller, es el responsable de proporcionar los medios para exponer las aplicaciones hacia fuera del cluster de Kubernetes, por ejemplo exponer via HTTP una aplicación web.

Estos componentes trabajan juntos para proporcionar una plataforma robusta, escalable y eficiente para la orquestación de contenedores, asegurando que las aplicaciones se ejecuten de manera confiable y disponible en el clúster de Kubernetes.

POD

Un Pod en Kubernetes es la unidad más pequeña y básica que se puede crear y administrar en el sistema. Es un contenedor de alto nivel que encapsula uno o más contenedores de aplicación, sus recursos de almacenamiento y red, y las especificaciones sobre cómo ejecutar los contenedores. Los Pods son fundamentales en el modelo de trabajo de Kubernetes y comprenden una parte esencial de cualquier despliegue en esta plataforma.

Características Principales de un Pod

  1. Contenedores Múltiples: Aunque es común tener un solo contenedor por Pod, un Pod puede contener varios contenedores que están estrechamente acoplados y que necesitan compartir recursos.

  2. Compartimiento de Recursos y Comunicación: Los contenedores en un Pod comparten la misma dirección IP y espacio de nombres de red, lo que les permite comunicarse entre sí utilizando localhost. También pueden compartir volúmenes de almacenamiento.

  3. Gestión de Ciclo de Vida: Un Pod representa un proceso en ejecución en su clúster. Una vez que se asigna un Pod a un nodo, permanece en ese nodo hasta que el proceso se termina, el Pod se elimina, el Pod se evicta por falta de recursos, o el nodo falla.

  4. Ephemerality (Efímeros): Los Pods son efímeros y no tienen la capacidad de auto-curarse. Si un Pod muere, el sistema Kubernetes puede reemplazarlo con un nuevo Pod idéntico.

  5. Etiquetas y Selectores: Los Pods pueden tener etiquetas asignadas y ser organizados y seleccionados por un conjunto de etiquetas.

  6. Configuraciones y Secretos: Los Pods pueden ser configurados con variables de entorno, volúmenes de configuración y secretos, lo que permite personalizar el entorno de los contenedores dentro del Pod.

Uso Común de Pods

  1. Aplicaciones de un Solo Contenedor: El uso más común es ejecutar un solo contenedor por Pod. En este escenario, Kubernetes maneja la orquestación de Pods a nivel de alto nivel, manejando la replicación, el despliegue y la escalabilidad.

  2. Aplicaciones Multi-contenedor con Necesidades Compartidas: Para aplicaciones que requieren varios contenedores que trabajan juntos, como un contenedor de aplicación principal y otro contenedor que ayuda a actualizar o procesar datos para el principal. Estos contenedores necesitan estar en el mismo Pod para compartir recursos de forma efectiva.

  3. Procesos por Lotes y de Trabajo en Segundo Plano: Los Pods también son útiles para ejecutar trabajos en segundo plano o procesos por lotes que no necesitan mantenerse activos de forma continua.

Gestión de Pods

  1. Deployments y ReplicaSets: Para la gestión de Pods, normalmente se utilizan Deployments y ReplicaSets, que permiten declarar el estado deseado para un conjunto de Pods, gestionando su ciclo de vida y replicación.

  2. Health Checks: Kubernetes permite definir controles de salud (readiness y liveness probes) para monitorear el estado de los contenedores dentro de un Pod y reiniciarlos si dejan de responder.

  3. Limites de Recursos: Puedes especificar límites de recursos como CPU y memoria para cada Pod, asegurando una gestión eficiente de los recursos del clúster.

Kubernetes POD

En resumen, los Pods son una pieza central en el modelo de Kubernetes y proporcionan un marco flexible para ejecutar aplicaciones en contenedores, manejar su almacenamiento, red y vida útil. Su diseño favorece patrones de despliegue y escalabilidad, haciendo de Kubernetes una plataforma potente para la orquestación de contenedores.

DEPLOYMENT

Un Deployment en Kubernetes es un objeto de alto nivel que gestiona un conjunto de réplicas de Pods. Su principal función es declarar el estado deseado de estos Pods, como la cantidad de réplicas y la configuración del contenedor. Kubernetes se encarga de mantener el estado actual del Deployment igual al estado deseado especificado por el usuario.

Los Deployments son útiles para realizar despliegues sin interrupciones (rolling updates), escalar el número de réplicas de Pods hacia arriba o hacia abajo, y para proporcionar autosanación en caso de fallos de los Pods. Simplifican la gestión de la creación, eliminación y actualización de los Pods.

NAMESPACE

Un Namespace en Kubernetes es una forma de dividir los recursos de un clúster entre múltiples usuarios a través de una cuota de recursos. Funciona como un ámbito para nombres, permitiendo organizar y aislar grupos de recursos o aplicaciones dentro de un mismo clúster de Kubernetes. Los Namespaces son útiles para entornos con múltiples equipos, proyectos o entornos de prueba y producción, ya que facilitan la administración, limitan el alcance de los recursos y reducen la posibilidad de conflictos entre nombres en el clúster.