Al leer materiales en Kubernetes, probablemente se haya encontrado repetidamente con ejemplos de varios comandos de kubectl y configuraciones de YAML complicadas. Para las personas que conocen bien los K8, este enfoque, sin duda, no genera ningún rechazo. Pero en la era de la ubicuidad de las interfaces web, no se puede llamar amigable para los usuarios comunes. Complica el proceso de aprendizaje para los principiantes y actúa como una barrera para aquellos que no están muy familiarizados con Kubernetes.
Por supuesto, hay varias GUI para K8, incluido el Panel de control de Kubernetes , que forma parte del propio Kubernetes upstream. (Nota de traducción: ya hemos hablado de muchas de las soluciones existentes en esta comparación ). Sin embargo, al explorar toda la variedad de opciones, no pudimos encontrar una solución que se adaptara completamente a nosotros. Quería la interfaz:
- era 100% de código abierto;
- apoyado activamente por la comunidad;
- era universal en el sentido de que no estaba vinculado a la distribución de Kubernetes de un proveedor en particular;
- era modular y extensible;
- tenía una apariencia limpia y moderna;
- se implementó en una pila familiar para nuestros desarrolladores (Go, JavaScript / TypeScript, React);
- fue interactivo (es decir, no solo recopiló datos, sino que también permitió ciertas acciones con el clúster);
- modo multiclúster compatible.
A pesar de la elección bastante rica, ninguna de las soluciones que probamos cumplió con todos los criterios enumerados anteriormente (o podría servir como una buena base para crear una nueva solución). Por lo tanto, de acuerdo con una tradición consagrada, decidimos hacerlo nosotros mismos ...
Presentando Headlamp
Hoy, me enorgullece anunciar la amplia disponibilidad de una nueva interfaz de usuario para Kubernetes llamada Headlamp .
Headlamp es una interfaz de usuario universal y extensible para Kubernetes que cumple con los criterios anteriores. Por supuesto, al ser una creación de Kinvolk, es 100% de código abierto. Esperamos que muchos miembros de la comunidad de Kubernetes no solo aprecien Headlamp, sino que también contribuyan al proyecto.
Echemos un vistazo rápido a sus principales características.
IU extensible
Nos esforzamos por garantizar que Headlamp sea adecuado para tantos casos de uso como sea posible. El público objetivo del proyecto no son solo los recién llegados a Kubernetes, sino también administradores experimentados y proveedores de K8 con necesidades muy diferentes. A menudo (especialmente para proyectos de interfaz de usuario), tal variedad de casos de uso se implementa mediante la creación de una gran cantidad de bifurcaciones, cada una de las cuales es mantenida por su propio equipo posterior. Pero mantener las bifurcaciones actualizadas es más difícil cuanto mayores son los cambios en ellas.
El sistema de complementos resuelve este problema. Es por eso que Headlamp admite complementos de interfaz de usuario fuera del árbol. Son archivos JavaScript cargados por el backend de Headlamp y pasados al cliente, que los carga dinámicamente.
Este enfoque abre grandes oportunidades para la innovación, lo que contribuye a la aparición de muchas características nuevas. Por ejemplo, es fácil crear un botón en el bloque de detalles del pod que redirija al usuario a un servicio que muestre el costo financiero de ese pod.
El mecanismo del complemento Headlamp abre grandes oportunidades para la comunidad. Y estamos dispuestos a colaborar con todo aquel que quiera participar en el desarrollo de nuevos plugins para Headlamp, y a desarrollar el mecanismo en sí, adaptándolo a nuevos casos de uso.
Traceloop
Para demostrar toda la potencia del mecanismo del complemento (y la herramienta en sí), desarrollamos un complemento Headlamp para el dispositivo traceloop , que forma parte del proyecto Inspektor Gadget (un conjunto de herramientas para inspeccionar y depurar aplicaciones en Kubernetes - aprox. Transl.) .
Después de instalar Inspektor Gadget y habilitar el gadget traceloop, comienza a escribir todas las llamadas al sistema desde el pod en un búfer circular. Este búfer se puede ver en tiempo real mientras se ejecuta el pod. En otras palabras, traceloop le da una idea de lo que está haciendo el pod en este momento. Además, los datos en el búfer se guardan para los pods que han salido. De esta manera, puede determinar la causa del error después de que se haya producido, una especie de "caja negra" para las aplicaciones de Kubernetes.
IU selectiva
El problema con muchas interfaces de usuario CRUD es que no saben nada sobre la organización interna del control de acceso. Por ejemplo, la presencia de botones para editar / eliminar confunde al usuario si realmente no tiene permiso para cambiar el recurso. Headlamp comprueba la configuración de RBAC de Kubernetes y solo muestra los controles de las acciones que están disponibles para el usuario. Por ejemplo, si el usuario no tiene derecho a editar el recurso, no se mostrará el botón "editar".
Todo esto tiene un efecto extremadamente beneficioso en la experiencia del usuario: después de todo, el operador ve inmediatamente qué acciones están disponibles para él, teniendo en cuenta los derechos actuales. Esto es ideal para situaciones en las que se otorgan permisos por tiempo limitado (como un permiso temporal para eliminar un recurso).
Botones disponibles para acciones con el pod cuando el usuario tiene derechos de edición / eliminación
Botones disponibles cuando el usuario no tiene derechos de edición / eliminación
Diseño / Interfaz de usuario
Nuestro objetivo era hacer que el diseño de los faros delanteros fuera lo más lacónico y moderno posible, al tiempo que nos adheríamos al estilo de interfaz de usuario o panel de control "tradicional" de Kubernetes. Por ejemplo, estamos convencidos de que la vista tabular familiar es excelente para el trabajo y esperamos que otros tipos de visualización (por ejemplo, la representación de un clúster en forma de gráficos) se puedan implementar usando complementos.
La interfaz se implementa en React con la biblioteca Material UI (es moderna, ordenada y respaldada por una gran comunidad de usuarios). Además, está incluido en la pila tecnológica de nuestro otro proyecto - Nebraska (administrador de actualizaciones para Flatcar Container Linux - aprox. Transl.), lo que nos permite compartir experiencias y recursos y garantizar una interfaz de usuario coherente en todos los productos.
Localmente o en un clúster
La mayoría de las IU de Kubernetes se dividen en dos grupos: remotas (el backend suele estar en un clúster) como Kubernetes Dashboard o locales (la aplicación está instalada en la computadora) como Octant de VMware.
Cada uno de estos enfoques tiene ventajas y desventajas. Por ejemplo, en el caso de una aplicación remota, es muy fácil compartir la URL con otros usuarios e implementar su inicio de sesión a través de OIDC. Está disponible "en todas partes" y es fácil de mantener actualizado. Por el contrario, en el caso de la versión de escritorio, no es necesario pensar en la ubicación de la interfaz de usuario. Este enfoque proporciona un mejor aislamiento, pero mantener la aplicación actualizada es responsabilidad del usuario.
Con Headlamp, ya no tiene que elegir entre estos dos enfoques: ambos son compatibles. Headlamp puede agruparse fácilmente utilizando nuestros archivos YAML (y adaptándolos para usted), o instalarse localmente en una máquina Linux, macOS o Windows.
Modo de varios clústeres
La mayoría de las implementaciones de Kubernetes constan de varios clústeres (al menos para separar los entornos de desarrollo y de producción). Headlamp proporciona acceso a todos estos grupos: el método específico depende de si lo ejecuta de forma local o remota.
Cuando se ejecuta localmente, Headlamp leerá el kubeconfig y mostrará los contextos disponibles allí, lo que permitirá al usuario cambiarlos según sea necesario, simplemente configurando la variable de entorno local en el clúster apropiado.
El modo de varios clústeres es muy simple: se crea un proxy para cada clúster configurado y las solicitudes de la interfaz de usuario (con llamadas a la API de Kubernetes) se redirigen a la dirección del clúster deseado. El proyecto K8dash debería mencionarse aquí, módulos para la gestión de solicitudes / API de los que utilizamos al desarrollar Headlamp.
Este enfoque también se puede combinar con la ejecución dentro del clúster; sin embargo, para hacerlo, el clúster en el que se ejecuta la aplicación necesitará acceso de API a los otros clústeres especificados.
Conexión de Lokomotive Kubernetes
Como probablemente sepa, también tenemos nuestra propia distribución de Kubernetes: Lokomotive . Usamos Headlamp en Lokomotive para el propósito previsto, pero queremos enfatizar que estos son proyectos independientes e independientes. No vamos a vincular Headlamp a ningún proveedor de servicios de K8, y lo estamos diseñando para que funcione en cualquier clúster de Kubernetes típico.
Prueba Headlamp en tu grupo.
Es muy fácil hacer esto: implemente la implementación en su clúster y vaya a la dirección correspondiente en el navegador, o descargue e instale la versión de escritorio para Windows, macOS o Linux. Los detalles están en la documentación .
Headlamp es una herramienta de código completamente abierto lanzada bajo la licencia Apache 2.0. Como se mencionó anteriormente, lo hicimos independiente de los proveedores de servicios de Kubernetes y versátil en su uso (cubriendo una gran cantidad de casos de uso). ¡Hoy invitamos a todos a participar en el desarrollo del proyecto! Para hacer esto, lea las pautas correspondientes .
¡Esperamos que disfrute de Headlamp!
PD del traductor
Lea también en nuestro blog: