¿Qué es la arquitectura de Kubernetes? Importancia + Mejores Prácticas

Publicado: 2023-06-12

Kubernetes ha experimentado un enorme crecimiento en su adopción desde 2014. Inspirado en la solución de gestión de clústeres internos de Google, Borg, Kubernetes simplifica la implementación y administración de sus aplicaciones. Al igual que todo el software de orquestación de contenedores , Kubernetes se está volviendo popular entre los profesionales de TI porque es seguro y sencillo. Sin embargo, como con todas las herramientas, reconocer cómo su arquitectura lo ayuda a usarla de manera más efectiva.

Aprendamos sobre los fundamentos de la arquitectura de Kubernetes, empezando por qué es, qué hace y por qué es importante.

Google creó el sistema adaptable de administración de contenedores Kubernetes, que maneja aplicaciones en contenedores en muchas configuraciones. Ayuda a automatizar la implementación de aplicaciones en contenedores, realizar cambios y escalar hacia arriba y hacia abajo estas aplicaciones.

Sin embargo, Kubernetes no es solo un orquestador de contenedores . De la misma manera, las aplicaciones de escritorio funcionan en MacOS, Windows o Linux; es el sistema operativo para aplicaciones nativas de la nube porque sirve como plataforma en la nube para esos programas.

¿Qué es un contenedor?

Los contenedores son un enfoque estándar para empaquetar aplicaciones y sus dependencias, de modo que las aplicaciones se puedan ejecutar fácilmente en entornos de tiempo de ejecución. Mediante el uso de contenedores, puede tomar medidas esenciales para reducir el tiempo de implementación y aumentar la confiabilidad de la aplicación empaquetando el código, las dependencias y las configuraciones de una aplicación en un solo componente básico fácil de usar.

La cantidad de contenedores en aplicaciones corporativas puede volverse inmanejable. Para aprovechar al máximo sus contenedores, Kubernetes lo ayuda a orquestarlos.

¿Para qué se utiliza Kubernetes?

Kubernetes es una plataforma increíblemente adaptable y ampliable para ejecutar cargas de trabajo de contenedores. La plataforma Kubernetes no solo proporciona el entorno para crear aplicaciones nativas de la nube, sino que también ayuda a administrar y automatizar sus implementaciones.

Su objetivo es aliviar a los operadores y desarrolladores de aplicaciones del esfuerzo de coordinar la infraestructura subyacente de cómputo, red y almacenamiento, permitiéndoles enfocarse únicamente en procesos centrados en contenedores para la operación de autoservicio. Los desarrolladores también pueden crear procedimientos especializados de implementación y administración, junto con niveles más altos de automatización para aplicaciones compuestas por varios contenedores.

Kubernetes puede manejar todas las cargas de trabajo de back-end importantes, incluidas aplicaciones monolíticas, programas con estado o sin estado, microservicios, servicios, trabajos por lotes y todo lo demás.

Kubernetes a menudo se elige por los siguientes beneficios.

  • La infraestructura de Kubernetes es superior a la de muchas tecnologías DevOps.
  • Kubernetes divide los contenedores en componentes más pequeños para una gestión precisa.
  • Kubernetes implementa actualizaciones de software con rapidez y regularidad.
  • Kubernetes proporciona una plataforma para desarrollar aplicaciones nativas de la nube.

Arquitectura y componentes de Kubernetes

La arquitectura básica de Kubernetes comprende muchos componentes, también conocidos como componentes K8, por lo que antes de comenzar, es importante recordar los siguientes conceptos.

  • La arquitectura básica de Kubernetes consta de un plano de control que administra los nodos y los nodos de trabajo que ejecutan aplicaciones en contenedores.
  • Mientras que el plano de control administra la ejecución y la comunicación, los nodos trabajadores ejecutan estos contenedores.
  • Un clúster de Kubernetes es un grupo de nodos y cada clúster tiene al menos un nodo trabajador.

diagrama de arquitectura de Kubernetes

diagrama de arquitectura de Kubernetes

Plano de control de Kubernetes

El plano de control es el centro del sistema nervioso central del diseño del clúster de Kubernetes y alberga los componentes de control del clúster. También registra la configuración y el estado de todos los objetos de Kubernetes en el clúster.

El plano de control de Kubernetes mantiene una comunicación regular con las unidades de cómputo para garantizar que el clúster funcione como se espera. Los controladores supervisan los estados de los objetos y hacen que el estado físico, el estado observado o el estado actual de los objetos del sistema se ajusten al estado o especificación deseados en respuesta a los cambios del clúster.

El plano de control se compone de varios elementos esenciales, incluido el servidor de la interfaz de programación de aplicaciones (API), el programador, el administrador del controlador, etc. Estos componentes fundamentales de Kubernetes garantizan que los contenedores se ejecuten con los recursos adecuados. Todos estos componentes pueden funcionar en un solo nodo principal, pero muchas empresas los duplican en numerosos nodos para lograr una alta disponibilidad.

1. Servidor API de Kubernetes

El servidor API de Kubernetes es el front-end del plano de control de Kubernetes. Facilita las actualizaciones, el escalado, la configuración de datos y otros tipos de orquestación del ciclo de vida al ofrecer administración de API para varias aplicaciones. Dado que el servidor API es la puerta de enlace, los usuarios deben poder acceder a él desde fuera del clúster. En este caso, el servidor de la API es un túnel para los pods, los servicios y los nodos. Los usuarios se autentican a través del servidor API.

2. Programador de Kubernetes

El kube-scheduler registra estadísticas de uso de recursos para cada nodo informático, evalúa si un clúster está en buen estado y decide si se deben implementar nuevos contenedores y dónde. El programador evalúa el estado general del clúster y las demandas de recursos del pod, como la unidad central de procesamiento (CPU) o la memoria. Luego, elige un nodo informático apropiado y programa la tarea, el módulo o el servicio, teniendo en cuenta las limitaciones o garantías de recursos, la localidad de los datos, los requisitos de calidad del servicio, la antiafinidad o los estándares de afinidad.

3. Administrador de controladores de Kubernetes

En un entorno de Kubernetes, varios controladores gobiernan los estados de los puntos finales (pods y servicios), tokens y cuentas de servicio (espacios de nombres), nodos y replicación (ajuste de escala automático). El administrador del controlador kube, a menudo conocido como administrador del controlador de la nube o simplemente el controlador, es un demonio que administra el clúster de Kubernetes mediante la realización de varias tareas del controlador.

El controlador supervisa los objetos en el clúster mientras ejecuta los bucles de control del núcleo de Kubernetes. Los monitorea para sus estados deseados y existentes a través del servidor API. Si los estados actual y previsto de los objetos administrados no coinciden, el controlador toma medidas correctivas para acercar el estado del objeto al estado deseado. El controlador de Kubernetes también maneja tareas esenciales del ciclo de vida.

4. etc.

etcd es una base de datos de almacenamiento de clave-valor distribuida y tolerante a fallas que mantiene los datos de configuración y la información de estado del clúster. Aunque etcd se puede configurar de forma independiente, a menudo sirve como parte del plano de control de Kubernetes.

El algoritmo de consenso de balsa se utiliza para mantener el estado del clúster en etcd. Esto ayuda a tratar un problema típico en el contexto de máquinas de estado replicadas y requiere que muchos servidores acuerden los valores. Raft establece tres roles: líder, candidato y seguidor, y crea consenso votando por un líder.

Como resultado, etcd es la única fuente de verdad (SSOT) para todos los componentes del clúster de Kubernetes, responde a las consultas del plano de control y recopila información diferente sobre el estado de los contenedores, los nodos y los pods. etcd también se usa para almacenar información de configuración como ConfigMaps, subredes, secretos y datos de estado del clúster.

Nodos trabajadores de Kubernetes

Los nodos trabajadores son sistemas que ejecutan contenedores que administra el plano de control. El kubelet, el controlador central de Kubernetes, se ejecuta en cada nodo como un agente para interactuar con el plano de control. Además, cada nodo ejecuta un motor de ejecución de contenedores, como Docker o rkt. En el nodo también se ejecutan otros componentes de supervisión, registro, descubrimiento de servicios y extras opcionales.

Algunos componentes clave de la arquitectura del clúster de Kubernetes son los siguientes.

Nodos

Un clúster de Kubernetes debe tener al menos un nodo informático, pero puede tener muchos más según los requisitos de capacidad. Debido a que los pods están coordinados y programados para ejecutarse en nodos, se requieren nodos adicionales para aumentar la capacidad del clúster. Los nodos hacen el trabajo de un clúster de Kubernetes. Vinculan aplicaciones, así como recursos de red, computación y almacenamiento.

Los nodos en los centros de datos pueden ser máquinas virtuales (VM) nativas de la nube o servidores bare metal.

Motor de ejecución de contenedores

Cada nodo informático utiliza un motor de tiempo de ejecución de contenedores para operar y administrar los ciclos de vida de los contenedores. Kubernetes admite tiempos de ejecución compatibles con la iniciativa de contenedores abiertos, como Docker, CRI-O y rkt.

Servicio Kubelet

Se incluye un kubelet en cada nodo de cómputo. Es un agente que se comunica con el plano de control para garantizar que los contenedores de un pod estén funcionando. Cuando el plano de control exige que se realice una acción específica en un nodo, el kubelet obtiene las especificaciones del pod a través del servidor API y opera. Luego se asegura de que los contenedores relacionados estén en buen estado de funcionamiento.

Servicio de proxy de Kube

Cada nodo de cómputo tiene un proxy de red conocido como kube-proxy, que ayuda a los servicios de red de Kubernetes. Para administrar las conexiones de red dentro y fuera del clúster, el kube-proxy reenvía el tráfico o depende de la capa de filtrado de paquetes del sistema operativo.

El proceso kube-proxy opera en cada nodo para garantizar que los servicios estén disponibles para otras partes y para hacer frente a la división en subredes específicas del host. Actúa como proxy de red y equilibrador de carga de servicios en su nodo, manejando el enrutamiento de red para el tráfico del protocolo de datagramas de usuario (UDP) y del protocolo de control de transmisión (TCP). El kube-proxy, en realidad, enruta el tráfico para todos los puntos finales del servicio.

vainas

Hasta ahora, hemos cubierto ideas internas y relacionadas con la infraestructura. Los pods, sin embargo, son cruciales para Kubernetes, ya que son los principales componentes externos con los que interactúan los desarrolladores.

Un pod es la unidad más simple en el modelo de contenedor de Kubernetes y representa una sola instancia de una aplicación. Cada pod consta de un contenedor o varios contenedores estrechamente relacionados que lógicamente encajan entre sí y llevan a cabo las reglas que rigen la función del contenedor.

Los pods tienen una vida útil finita y, en última instancia, mueren después de actualizarse o reducirse. Aunque son efímeros, ejecutan aplicaciones con estado conectándose a un almacenamiento persistente.

Los pods también pueden escalar horizontalmente, lo que significa que pueden aumentar o disminuir la cantidad de instancias en funcionamiento. También son capaces de realizar actualizaciones continuas e implementaciones canary.

Los pods operan en nodos juntos, por lo que comparten contenido y almacenamiento y pueden comunicarse con otros pods a través de localhost. Los contenedores pueden abarcar varias computadoras, al igual que los pods. Un solo nodo puede operar varios pods, cada uno de los cuales recolecta numerosos contenedores.

El pod es la unidad de administración central en el ecosistema de Kubernetes y actúa como un límite lógico para los contenedores que comparten recursos y contexto. El método de agrupación de pods, que permite que varios procesos dependientes operen simultáneamente, mitiga las diferencias entre la virtualización y la creación de contenedores.

tipos de vainas

Varios tipos de pods juegan un papel vital en el modelo de contenedor de Kubernetes.

  • El tipo predeterminado, ReplicaSet , garantiza que la cantidad dada de pods esté operativa.
  • La implementación es un método declarativo para administrar pods basados ​​en ReplicaSets. Esto incluye mecanismos de reversión y actualización continua.
  • Daemonset garantiza que cada nodo ejecute una instancia de un pod. Se utilizan servicios de clúster, como la supervisión del estado y el reenvío de registros.
  • StatefulSet está diseñado para administrar pods que deben soportar o preservar el estado.
  • Job y CronJob ejecutan trabajos programados predefinidos o de una sola vez.

Otros componentes de la arquitectura de Kubernetes

Kubernetes mantiene los contenedores de una aplicación, pero también puede administrar los datos de la aplicación asociada en un clúster. Los usuarios de Kubernetes pueden solicitar recursos de almacenamiento sin comprender la infraestructura de almacenamiento subyacente.

Un volumen de Kubernetes es un directorio donde un pod puede acceder y almacenar datos. El tipo de volumen determina el contenido del volumen, cómo llegó a ser y los medios que lo admiten. Los volúmenes persistentes (PV) son recursos de almacenamiento específicos del clúster que suele proporcionar un administrador. Los PV también pueden sobrevivir a un pod determinado.

Kubernetes depende de las imágenes de contenedor , que se almacenan en un registro de contenedor . Puede ser un registro de terceros o uno creado por la organización.

Los espacios de nombres son clústeres virtuales que existen dentro de un clúster físico. Están diseñados para crear entornos de trabajo independientes para numerosos usuarios y equipos. También evitan que los equipos interfieran entre sí al restringir los objetos de Kubernetes a los que pueden acceder. Los contenedores de Kubernetes dentro de un pod pueden comunicarse con otros pods a través de localhost y compartir direcciones IP y espacios de nombres de red.

Kubernetes frente a Docker Swarm

Tanto Kubernetes como Docker son plataformas que brindan administración de contenedores y escalado de aplicaciones. Kubernetes proporciona una solución de administración de contenedores eficaz, ideal para aplicaciones de alta demanda con una configuración complicada. Por el contrario, Docker Swarm está diseñado para la simplicidad, lo que lo convierte en una excelente opción para aplicaciones esenciales que se implementan y mantienen rápidamente.

Kubernetes frente a Docker Swarm

  • Docker Swarm es más fácil de implementar y configurar que Kubernetes.
  • Kubernetes proporciona escalabilidad todo en uno basada en el tráfico, mientras que Docker Swarm prioriza la escalabilidad rápida.
  • El equilibrio de carga automático está disponible en Docker Swarm pero no en Kubernetes. Sin embargo, las soluciones de terceros pueden vincular un balanceador de carga externo a Kubernetes.

Las exigencias de su empresa determinan la herramienta adecuada.

Soluciones de orquestación de contenedores

Los sistemas de orquestación de contenedores permiten a los desarrolladores lanzar varios contenedores para la implementación de aplicaciones. Los administradores de TI pueden usar estas plataformas para automatizar la administración de instancias, el abastecimiento de hosts y la conexión de contenedores.

Las siguientes son algunas de las mejores herramientas de orquestación de contenedores que facilitan la implementación, identifican implementaciones fallidas de contenedores y administran configuraciones de aplicaciones.

Los 5 mejores software de orquestación de contenedores:

  • Carrera en la nube de Google
  • Servicio de contenedores elásticos de Amazon (Amazon ECS)
  • Motor Mirantis Kubernetes
  • Motor Kubernetes de Google
  • Servicio Amazon Elastic Kubernetes (Amazon EKS)

*Las cinco soluciones líderes de orquestación de contenedores del informe Grid de primavera de 2023 de G2.

Haz clic para chatear con AI Monty

Prácticas recomendadas y principios de diseño de la arquitectura de Kubernetes

Es fundamental implementar una estrategia de plataforma que tenga en cuenta la seguridad, la gobernanza, la supervisión, el almacenamiento, las redes, la gestión del ciclo de vida de los contenedores y la orquestación. Sin embargo, Kubernetes es un gran desafío para adoptar y escalar, especialmente para las empresas que administran infraestructura de nube pública y local. Para simplificarlo, a continuación se analizan algunas de las mejores prácticas que deben tenerse en cuenta al diseñar los clústeres de Kubernetes.

  • Asegúrese de tener siempre la versión más reciente de Kubernetes.
  • Invertir en capacitación para los equipos de desarrollo y operativos.
  • Establecer el gobierno de toda la empresa . Asegúrese de que sus herramientas y proveedores sean compatibles con la orquestación de Kubernetes.
  • Aumente la seguridad al incluir técnicas de escaneo de imágenes en su flujo de trabajo de integración y entrega continuas (CI/CD). El código de código abierto descargado de un repositorio de GitHub siempre debe tratarse con precaución.
  • Implemente el control de acceso basado en roles (RBAC) en todo el clúster. Los modelos basados ​​en privilegios mínimos y confianza cero deberían ser la norma.
  • Utilice solo usuarios que no sean root y haga que el sistema de archivos sea de solo lectura para proteger aún más los contenedores.
  • Evite los valores predeterminados ya que las declaraciones simples son menos propensas a errores y comunican mejor el propósito.
  • Cuando utilice imágenes básicas de Docker Hub, tenga cuidado porque pueden incluir malware o estar sobrecargadas con código innecesario. Comience con un código limpio y esbelto y siga avanzando. Las imágenes más pequeñas crecen más rápidamente, ocupan menos espacio en el almacenamiento y extraen imágenes más rápido.
  • Mantenga los contenedores lo más simple posible. Un proceso por contenedor permite que el orquestador informe si ese proceso está en buen estado o no.
  • Crash en caso de duda. No reinicie en caso de falla, ya que Kubernetes reiniciará un contenedor fallido.
  • Sea descriptivo . Las etiquetas descriptivas benefician a los desarrolladores presentes y futuros.
  • Cuando se trata de microservicios, no sea demasiado específico . Cada función dentro de un componente de código lógico no debe ser su microservicio.
  • Siempre que sea posible, automatice . Puede omitir las implementaciones manuales de Kubernetes por completo al automatizar su flujo de trabajo de CI/CD.
  • Utilice las sondas de actividad y preparación para ayudar en la gestión de los ciclos de vida de los pods ; de lo contrario, los pods pueden terminarse mientras se inicializan o reciben solicitudes de usuarios antes de que estén listos.

Sugerencia: explore las soluciones de administración de contenedores para obtener mejores prácticas de implementación.

Considere sus contenedores

Kubernetes, el software de administración centrado en contenedores, se ha convertido en el estándar de facto para implementar y operar aplicaciones en contenedores debido al amplio uso de contenedores dentro de las empresas. La arquitectura de Kubernetes es simple e intuitiva. Si bien brinda a los administradores de TI un mayor control sobre su infraestructura y el rendimiento de las aplicaciones, hay mucho que aprender para aprovechar al máximo la tecnología.

¿Te intriga explorar más el tema? ¡Conozca la creciente relevancia de la contenedorización en la computación en la nube!