Kubernetes
¿Qué es Kubernetes?
Kubernetes, también conocido como K8s, es una plataforma de código abierto que se utiliza para administrar contenedores de Linux en entornos de nube privada, pública e híbrida. Las empresas también pueden usar Kubernetes para administrar arquitecturas de microservicios. Los contenedores y Kubernetes se pueden implementar en la mayoría de los proveedores de la nube.
Los desarrolladores de aplicaciones, los administradores de sistemas de TI y los ingenieros de DevOps utilizan Kubernetes para implementar, escalar, mantener, programar y operar automáticamente múltiples contenedores de aplicaciones en grupos de nodos. Los contenedores se ejecutan sobre un sistema operativo (SO) compartido común en las máquinas host, pero están aislados entre sí a menos que un usuario elija conectarlos.
¿Cómo funciona la infraestructura de Kubernetes?
A continuación, se incluye una descripción general de la gestión de contenedores de Kubernetes, sus componentes y cómo funciona:
Los pods se componen de uno o varios contenedores ubicados en una máquina host, y los contenedores pueden compartir recursos. Kubernetes encuentra una máquina que tiene suficiente capacidad de procesamiento libre para un pod determinado y lanza los contenedores asociados. Para evitar conflictos, a cada pod se le asigna una dirección IP única, que permite que las aplicaciones utilicen puertos.
Un agente de nodo, llamado kubelet, administra los pods, sus contenedores y sus imágenes. Los kubelets también reinician automáticamente un contenedor si falla. Alternativamente, las APIs de Kubernetes se pueden usar para administrar pods manualmente.
Un controlador de replicación de Kubernetes administra clústeres de pods, utilizando un ciclo de reconciliación para impulsar un estado de clúster deseado, para garantizar que la cantidad solicitada de pods se ejecute según las especificaciones del usuario. Se puede usar para crear nuevos pods si falla un nodo, o para administrar, replicar y escalar los pods existentes.
El controlador de replicación escala los contenedores horizontalmente. Garantiza que haya más o menos contenedores disponibles a medida que fluctúan las necesidades informáticas de la aplicación general. En otros casos, un controlador de trabajo puede administrar el trabajo por lotes, o se puede implementar un controlador DaemonSet para administrar un solo pod en cada máquina en un conjunto.
Otros elementos de la infraestructura de Kubernetes y sus funciones principales incluyen:
Seguridad. El nodo principal ejecuta la API de Kubernetes y controla el clúster. Sirve como parte del plano de control y administra las comunicaciones y las cargas de trabajo en los clústeres.
Un nodo, también conocido como minion, es una máquina trabajadora en Kubernetes. Puede ser una máquina física o una máquina virtual (VM). Los nodos tienen los servicios necesarios para ejecutar pods y recibir instrucciones de administración de componentes maestros. Los servicios que se encuentran en los nodos incluyen Docker, kube-proxy y kubelet.
La seguridad se divide en cuatro capas: nube (o centro de datos), clúster, contenedor y código. Se siguen creando, probando e implementando medidas de seguridad más estrictas con regularidad.
Telemetría. Una abstracción llamada "servicio" es un integrador y equilibrador de carga configurado automáticamente que se ejecuta en todo el clúster. Las "etiquetas" son pares de clave y valor que se utilizan para el descubrimiento de servicios. Una etiqueta asigna nombre a los contenedores y los une en grupos.
Redes. Kubernetes se trata de compartir máquinas entre aplicaciones. A medida que cada pod obtiene su propia dirección IP, esto crea un modelo limpio y compatible con versiones anteriores. Los pods pueden tratarse como máquinas virtuales en términos de asignación de puertos, nomenclatura, descubrimiento de servicios, equilibrio de carga, configuración de aplicaciones y migración.
Registro. Existe una conexión directa entre Amazon Elastic Container Registry (Amazon ECR) y Kubernetes. Cada usuario del clúster que puede crear pods puede ejecutar cualquier pod que use cualquier imagen en el registro de ECR.
¿Para qué se utiliza Kubernetes?
Las empresas utilizan principalmente Kubernetes para administrar y federar contenedores, así como para administrar contraseñas, tokens, claves SSH y otra información confidencial. Pero las empresas encuentran que Kubernetes también es útil en otros casos, como:
Mejorar el descubrimiento de servicios. Las empresas pueden utilizar Kubernetes para detectar y personalizar automáticamente el descubrimiento de servicios para aplicaciones en contenedores en una red.
Gestionar la nube híbrida y la nube múltiple. Kubernetes puede ayudar a las empresas a extender las cargas de trabajo locales en la nube y en varias nubes. Alojar nodos en múltiples nubes y zonas o regiones de disponibilidad aumenta la resiliencia y brinda flexibilidad para que una empresa elija diferentes opciones de configuraciones de servicio.
Expandir las opciones de PaaS. Kubernetes puede admitir cargas de trabajo sin servidor, y esto podría eventualmente dar lugar a nuevos tipos de opciones de plataforma como servicio (PaaS) desde una escalabilidad y confiabilidad mejoradas hasta una facturación más granular y costos más bajos.
Gestionar cargas de trabajo intensivas en datos. El servicio Dataproc for Kubernetes de Google Cloud, que se lanzó para las primeras pruebas a fines de 2019, permite a los equipos de TI ejecutar trabajos Spark, que son aplicaciones de análisis de datos a gran escala.
Ampliar la computación de borde. Las organizaciones que ya ejecutan Kubernetes en sus centros de datos y nubes pueden usarlo para extender esas capacidades a los entornos de computación perimetral. Esto podría involucrar pequeñas granjas de servidores fuera de un centro de datos tradicional (o en la nube) o un modelo de internet de las cosas (IoT) industrial. Los componentes de la informática de borde y de IoT pueden estar estrechamente acoplados con los componentes de la aplicación en el centro de datos, por lo que Kubernetes puede ayudar a mantenerlos, implementarlos y administrarlos.
Beneficios de Kubernetes
Kubernetes permite a los usuarios programar, ejecutar y monitorear contenedores, generalmente en configuraciones agrupadas, y automatizar las tareas operativas relacionadas. Éstas incluyen:
- Despliegue. Establece y modifica los estados preferidos para la implementación de contenedores. Los usuarios pueden crear nuevas instancias de contenedor, migrar las existentes y eliminar las antiguas.
- Vigilancia. Verifica continuamente el estado del contenedor, reinicia los contenedores fallidos y elimina los que no responden.
- Balanceo de carga. Realiza el equilibrio de carga para distribuir el tráfico entre varias instancias de contenedores.
- Almacenamiento. Maneja diversos tipos de almacenamiento para datos de contenedores, desde almacenamiento local hasta recursos en la nube.
- Optimización. Agrega un nivel de inteligencia a las implementaciones de contenedores, como la optimización de recursos; identifica qué nodos están disponibles y qué recursos se requieren para los contenedores, y coloca contenedores automáticamente en esos nodos.
- Seguridad. Administra contraseñas, tokens, claves SSH y otra información confidencial.
Desafíos de usar Kubernetes
Kubernetes a menudo requiere cambios de roles y responsabilidades dentro de un departamento de TI existente cuando las organizaciones deciden qué modelo de almacenamiento implementar: si usar una nube pública o servidores locales. Las organizaciones más grandes experimentan diferentes desafíos que las más pequeñas, y estos varían según la cantidad de empleados, la escalabilidad y la infraestructura.
- Bricolaje difícil. Algunas empresas desean la flexibilidad para ejecutar Kubernetes de código abierto por sí mismas, si tienen el personal calificado y los recursos para respaldarlo. Muchos otros elegirán un paquete de servicios del ecosistema más amplio de Kubernetes para ayudar a simplificar su implementación y administración para los equipos de TI.
- Escalado de carga. Las partes de una aplicación en contenedores pueden escalar de manera diferente (o no escalar en absoluto) bajo carga; esto es una función de la aplicación, no del método de implementación del contenedor. Las organizaciones deben tener en cuenta cómo equilibrar los pods y los nodos.
- Complejidad distribuida. La distribución de componentes de aplicaciones en contenedores permite la flexibilidad de escalar funciones hacia arriba y hacia abajo, pero demasiados componentes de aplicaciones distribuidos aumentan la complejidad y pueden afectar la latencia de la red y reducir la disponibilidad.
- Seguimiento y observabilidad. A medida que las organizaciones expanden la implementación y la orquestación de contenedores para más cargas de trabajo en producción, se vuelve más difícil saber qué está sucediendo detrás de escena. Esto crea una mayor necesidad de monitorear mejor varias capas de la pila de Kubernetes, y toda la plataforma, para el rendimiento y la seguridad.
- Seguridad matizada. La implementación de contenedores en entornos de producción agrega muchos niveles de seguridad y cumplimiento: análisis de vulnerabilidad en el código, autenticación multifactor, manejo simultáneo de múltiples solicitudes de configuración sin estado y más. La configuración adecuada y los controles de acceso son cruciales, especialmente a medida que se amplía la adopción y más organizaciones implementan contenedores en producción. Kubernetes ahora también tiene un programa de recompensas por errores para recompensar a aquellos que encuentran vulnerabilidades de seguridad en la plataforma central de Kubernetes.
Términos comunes de Kubernetes
A continuación, se incluyen términos básicos para ayudar a comprender cómo funciona Kubernetes y su implementación:
- Clúster o Grupo. La base del motor de Kubernetes. Las aplicaciones en contenedores se ejecutan sobre clústeres. Es un conjunto de máquinas en las que se administran y ejecutan sus aplicaciones.
- Nodo. Máquinas trabajadoras que forman agrupaciones.
- Pod. Grupos de contenedores que se implementan juntos en la misma máquina host.
- Controlador de replicación. Un resumen abstracto utilizado para gestionar los ciclos de vida de los pods.
- Selector. Un sistema de emparejamiento que se utiliza para buscar y clasificar recursos específicos.
- Etiqueta. Pares de valores utilizados para filtrar, organizar y realizar operaciones masivas en un conjunto de recursos.
- Anotación. Una etiqueta con una capacidad de datos mucho mayor.
- Ingreso. Objeto de interfaz de programa de aplicación (API) que controla el acceso externo a los servicios en un clúster, generalmente HTTP. Ofrece alojamiento virtual basado en nombres, equilibrio de carga y capa de sockets seguros. Una vez que comprenda algunos conceptos básicos de Kubernetes, manténgase alerta y pruebe su conocimiento de los términos y significados de Kubernetes.
¿Quiénes son los competidores de Kubernetes?
Existen otras opciones para las empresas que buscan programar y orquestar contenedores:
- Kubernetes frente a Docker. Docker Swarm, un motor de orquestación de contenedores independiente para contenedores Docker, ofrece capacidades de agrupación en clústeres nativas con menores barreras de entrada y menos comandos que Kubernetes. Se anima a los usuarios de Swarm a utilizar la infraestructura de Docker, pero no se les impide utilizar otras infraestructuras. En los últimos años, las dos tecnologías de contenedorización han comenzado a operar de manera más eficiente cuando se usan juntas. Docker permite que una empresa ejecute, cree y administre contenedores en un solo sistema operativo. Con Kubernetes, los contenedores se pueden automatizar para el aprovisionamiento, la creación de redes, el equilibrio de carga, la seguridad y el escalado entre nodos desde un solo panel.
Mirantis adquirió el negocio de Docker Enterprise a fines de 2019 e inicialmente tenía la intención de centrarse en Kubernetes, pero luego se comprometió a respaldar y expandir la versión empresarial de Docker Swarm.
- Kubernetes vs. Mesos. Apache Mesos, un administrador de clústeres de código abierto, enfatiza la ejecución de contenedores junto con otras cargas de trabajo, utilizando pods. Se integra fácilmente con herramientas de aprendizaje automático y big data como Cassandra, Kafka y Spark. Mesosphere DC/OS, una versión comercial de Mesos mantenida por D2iQ, se ha asociado con proveedores importantes como Hewlett Packard Enterprise, Microsoft y Dell EMC. Mesos permanece disponible en sentido ascendente, pero D2iQ (anteriormente Mesosphere) ahora se centra principalmente en el soporte de Kubernetes.
Mesosphere existía antes del interés generalizado en la contenedorización y, por lo tanto, se centra menos en los contenedores en funcionamiento. Kubernetes existe como un sistema para construir, administrar y ejecutar sistemas distribuidos, y tiene más capacidades integradas para la replicación y el descubrimiento de servicios que Mesosphere. Tanto Mesosphere como Kubernetes proporcionan federación de contenedores.
- Kubernetes contra Jenkins. Jenkins, también una herramienta de código abierto, es una herramienta de servidor de integración continua que ofrece fácil instalación, fácil configuración y compatibilidad con conjuntos de cambios, así como capacidades de alojamiento interno. Kubernetes, como herramienta de contenedor, es más liviano, simple y accesible. Está diseñado para un mundo de múltiples nubes, ya sea público o privado.
En general, Kubernetes es posiblemente el más desarrollado de los tres sistemas en muchas situaciones: fue diseñado desde sus inicios como un entorno para crear aplicaciones distribuidas en contenedores. Puede adoptarse como versión ascendente, de código abierto o como distribución patentada y admitida.
Soporte de Kubernetes y ecosistema de productos empresariales
Como proyecto de código abierto, Kubernetes sustenta varias distribuciones propietarias y servicios administrados de proveedores en la nube.
IBM Red Hat OpenShift es una plataforma de aplicaciones de contenedores para empresas basada en Kubernetes y Docker. La oferta tiene como objetivo el desarrollo rápido de aplicaciones, la implementación y la automatización más fáciles, al mismo tiempo que admite el almacenamiento de contenedores y la tenencia múltiple.
CoreOS Tectonic es una plataforma de orquestación de contenedores basada en Kubernetes que afirma características de nivel empresarial, como operaciones estables, gestión de acceso y gobernanza.
Otros ejemplos de distribuciones de Kubernetes para uso en producción incluyen Rancher de Rancher Labs; la distribución canónica de Ubuntu; y vínculos basados en la nube pública, como Amazon Elastic Kubernetes Service, Azure Kubernetes Service y Google Kubernetes Engine (GKE). Mirantis es otro ejemplo de un ecosistema de productos de código abierto basado en Kubernetes que se puede utilizar para internet de las cosas (IoT). El producto se factura para administrar redes IQRF y puertas de enlace para aplicaciones de IoT, como ciudades inteligentes.
¿Cuál es la historia de Kubernetes?
En el pasado, las organizaciones ejecutaban aplicaciones en servidores físicos, sin forma de definir límites de recursos, lo que generaba problemas de asignación de recursos. Para abordar esto, se introdujo la virtualización. Esto permite que varias máquinas virtuales funcionen al mismo tiempo en la CPU de un solo servidor. Las aplicaciones se pueden aislar entre máquinas virtuales y recibir una mayor seguridad porque otros no pueden acceder fácilmente a ellas.
Los contenedores son como máquinas virtuales, pero con propiedades de aislamiento relajadas. Como una máquina virtual, un contenedor tiene un sistema de archivos, CPU, memoria, espacio de proceso y otras propiedades. Los contenedores se pueden crear, implementar e integrar rápidamente en diversos entornos.
Kubernetes, creado por Google y lanzado en 2015, se inspiró en el software de gestión del centro de datos interno de la empresa llamado "Borg". Desde entonces, Kubernetes ha atraído a importantes contribuyentes de varios rincones de la industria de los contenedores. La Cloud Native Computing Foundation (CNCF) se hizo cargo del alojamiento de Kubernetes en 2018.
Kubernetes es de código abierto, por lo que cualquiera puede intentar contribuir al proyecto de Kubernetes a través de uno o más grupos de intereses especiales de Kubernetes. Las principales corporaciones que comprometen el código con el proyecto incluyen Red Hat, Rackspace e IBM. Las empresas del panorama de proveedores de TI han desarrollado soporte e integraciones para la plataforma de gestión, mientras que los miembros de la comunidad intentan llenar los vacíos entre la integración de proveedores con herramientas de código abierto.
Los adoptantes de Kubernetes van desde el servicio de administración de documentos basado en la nube, Box, hasta el gigante de las telecomunicaciones Comcast y el conglomerado de servicios financieros Fidelity Investments, así como empresas como Concur Technologies de SAP y nuevas empresas como Barkly Protects.
¿Cuál es el futuro de Kubernetes?
Las actualizaciones de Kubernetes en 2019 (versiones 1.14 a 1.16) agregaron o mejoraron varias áreas para respaldar aún más la estabilidad y la implementación de producción. Éstas incluyen:
- soporte para nodos de host de Windows y Kubernetes basados en Windows;
- extensibilidad y ciclo de vida del clúster;
- volumen y métricas;
- y definiciones de recursos personalizadas.
Desde entonces, el interés de la industria se ha desplazado de las actualizaciones a la plataforma central de Kubernetes y más hacia áreas de nivel superior donde las empresas pueden beneficiarse de la orquestación de contenedores y las aplicaciones nativas de la nube. Estos incluyen cargas de trabajo sensibles que requieren seguridad de múltiples inquilinos, una administración más fluida de aplicaciones con estado, como bases de datos, y el fomento de versiones automatizadas controladas por versión de aplicaciones e infraestructura definida por software de GitOps. Por ejemplo, la versión 1.20 en diciembre de 2020 entregó instantáneas de volumen, copias puntuales de un volumen en la API desde el cual aprovisionar un nuevo volumen o restaurar uno existente a un estado anterior. Las instantáneas son una funcionalidad clave para muchas cargas de trabajo con estado, como las operaciones de bases de datos.
A medida que las organizaciones expanden la implementación y la orquestación de contenedores para más cargas de trabajo en producción, se vuelve aún más difícil saber qué está sucediendo detrás de escena. Esto aumenta la necesidad de monitorear mejor varias capas de la pila de Kubernetes y toda la plataforma de Kubernetes para el rendimiento y la seguridad. Ya se han formado mercados para atender estas áreas emergentes con herramientas de terceros, con nuevas empresas (algunas a través de CNCF), así como proveedores experimentados como D2iQ. Al mismo tiempo, el ecosistema de Kubernetes sigue estando formado por docenas de distribuciones y proveedores de Kubernetes, lo que probablemente se reducirá en el futuro.
Test
¿Quieren probar sus conocimientos sobre la terminología relacionada con Kubernetes? Respondan este quiz, diseñado por el equipo de editores expertos de TechTarget.