Operación en Kubernetes desde Java

Normalmente, cuando hablamos de Kubernetes, pensamos en él como el entorno de operación para nuestras aplicaciones, y cuya gestión haremos a través de herramientas como Kustomize, Kubectl, Helm, etc., y también mediante plataformas de gestión de Contenedores (CaaS) como pueden ser Rancher u Openshift.

No obstante puede surgir la necesidad de integrar alguna funcionalidad de Kubernetes con nuestra propia aplicación, bien para que sea la propia aplicación quien gestione algún aspecto del entorno operación o bien porque estemos desarrollando alguna herramienta que tenga que ofrecer de forma centralizada funcionalidades del propio Kubernetes a sus operadores, como es el caso del «Onesait Platform Center». En estos escenarios donde surge la necesidad de integrar con otros sistemas sistemas, siempre recurriremos a las APIs, y por supuesto Kubernetes tiene la suya propia, bajo el estándar de API REST.

Sin embargo, lidiar con un API tan extensa, hasta el punto de tener que implementar las llamadas REST para cada operación puede llegar a ser realmente tedioso para un programador. La solución está en utilizar las librerías de cliente para el API en el lenguaje de programación que trabajemos. En este sentido, Kubernetes ofrece su propia librería de cliente oficial en diferentes lenguajes, entre ellos Java.

Pero el problema que nos podemos encontrar al utilizar librerías cliente es que el fabricante no haya incluido el grueso de funcionalidades que ofrece el producto desde consola o desde el propio API REST, y en el caso de Kubernetes, tras haber evaluado la librería oficial incorporándola al proyecto del Onesait Platform Center, podemos constatar que así es: se muestra insuficiente en aspectos como enumerar Workloads, operar con ellos, extraer métricas, etc., así como la con la escasa documentación que ofrece.

Kubernetes-client Fabric8

Entre las alternativas a la librería oficial destaca kubernetes-client, un fork de fabric8 muy activo en GitHub:

Como se puede intuir, ofrece un recubrimiento completo tanto para el API de Kubernetes, como para el de OpenShift, ofreciendo cliente para ambos:

En la documentación de la librería en GitHub, podemos encontrar información sobre como:

  • Configurar el cliente (incluyendo la opción de hacerlo desde un fichero kubeconfig):
  • Crear y consultar recursos en el cluster (bien programáticamente o desde ficheros yaml al estilo de cómo lo haríamos con kubectl –f):
  • Escuchar eventos en el clúster Kubernetes mediante el registro de Watchers:

Otra funcionalidad muy interesante es que ofrece un modo «Mock», para desarrollo y pruebas con la librería:

En cuanto a ejemplos de uso, encontramos una sección de bastante completa en el propio GitHub:

Así como un «Cheat Sheet» con snippets de código muy útiles:

Y una sección muy interesante en la que se hace una correspondencia entre comandos Kubectl y su equivalente programático con la librería cliente.

Fabric 8 Kubernetes Client en el Onesait Platform Center

El Onesait Platform Center es la herramienta que estamos desarrollando para dar apoyo a los proyectos bajo una consola de gestión única, ofreciendo utilidades de apoyo a la migración al Cloud, diagramado, generación de artefactos y contenedores, aplantillamiento Helm, despliegue y monitorización de aplicaciones y soluciones en plataformas CaaS. En esta última parte donde entra en juego la librería.

Un Proyecto/Producto registrado en el Onesait Platform Center tendrá asociados uno o varios entornos de operación (Desarrollo, UAT, Preproducción, Producción, etc.) registrados a través de un kube config. Estos entornos de operación son externos al Onesait Platform Center, el único requisito es que se basen en Kubernetes, pudiendo ser desde un Rancher administrando un cluster en un entorno IaaS, al Openshift de una organización:

Mediante esta configuración, utilizando el cliente de la librería ya podemos establecer una conexión al entorno de operación y gestionar las cargas de trabajo de la aplicación en su entorno Kubernetes, sin que el usuario tenga que entrar específicamente a la plataforma CaaS para las tareas más cotidianas:

No obstante, como se ha podido apreciar en las diferentes funcionalidades que cubren los ejemplos de esta librería, las posibilidades de uso van mucho más allá de estas tareas cotidianas, lo que nos dará pie a ir añadiendo progresivamente nueva funcionalidad al Onesait Platform Center para cubrir de forma centralizada a muchos proyectos, diferentes tareas que realizan actualmente los equipos de desarrollo y operaciones accediendo a una plétora de entornos con diferentes características (unos administrados con Rancher, otros con Openshift, en diferentes proveedores cloud).

Imagen de cabecera: Pawel Czerwinski en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada.