Eclipse JKube: Herramientas y plugins de Java para Kubernetes y OpenShift
Introducción
En este post os presentaré Eclipse JKube y cómo arrancar con el proyecto para desplegar vuestras aplicaciones Java en la Nube. Eclipse JKube es una colección de plugins y librerías que te ayudarán a desarrollar aplicaciones Java cloud-native. Incluye herramientas para construir imágenes de contenedores empleando estrategias de construcción como Docker, JIB o S2I. Además, JKube proporciona los medios necesarios para generar ficheros de configuración para el cluster (YAML) y desplegarlos en OpenShift o Kubernetes.
El origen de JKube
Eclipse JKube no es un proyecto original sino el cambio de imagen y puesta al día del gran Fabric8 Maven Plugin. Fabric8 Maven Plugin formaba parte del ecosistema de Fabric8 que ahora está descatalogado.
A pesar de que la suite de fabric8 está descatalogada, aún quedan varios proyectos activos pertenecientes al ecosistema fabric8. Con respecto a JKube, en noviembre de 2019, el proyecto se donó y fue aceptado por la fundación Eclipse. Los esfuerzos de desarrollo han continuado bajo este nombre y la versión 1.0.0 fue finalmente liberada en septiembre de 2020.
Componentes de JKube
A día de hoy, JKube proporciona 3 componentes distintos:
- JKube Kit: Contiene la lógica de la librería y se utiliza por el resto de componentes (plugins).
- Kubernetes Maven Plugin: Especialmente diseñado para apuntar a clusters Kubernetes estándar. Construye imágenes utilizando Docker o JIB. Genera ficheros de configuración estándar para Kubernetes.
- OpenShift Maven Plugin: Construido encima de Kubernetes Maven Plugin, proporciona funcionalidades específicas para OpenShift. Construye imágenes empleando S2I. Genera ficheros de configuración específicos para OpenShift.
- Kubernetes Gradle Plugin: Plugin para Gradle que proporciona funcionalidades análogas a las de Kubernetes Maven Plugin para proyectos basados en Gradle.
- OpenShift Gradle Plugin: Plugin para Gradle que proporciona funcionalidades análogas a las de OpenShift Maven Plugin para proyectos basados en Gradle.
Primeros pasos
La forma más rápida de comenzar con JKube es empleando uno de los Plugins de Maven proporcionados. Hacer que tu aplicación sea amigable con Kubernetes es tan sencillo como añadir el plugin a la sección build de tu proyecto:
<build>
<plugins>
<!-- ... -->
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>kubernetes-maven-plugin</artifactId>
<version>1.17.0</version>
</plugin>
</plugins>
<!-- ... -->
</build>
O en el caso en que estés apuntando a un cluster OpenShift:
<build>
<plugins>
<!-- ... -->
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>openshift-maven-plugin</artifactId>
<version>1.17.0</version>
</plugin>
</plugins>
<!-- ... -->
</build>
Si tu aplicación está basada en uno de los frameworks soportados (Spring, Quarkus, Vert.x, OpenLiberty, etc.) esta será toda la configuración que necesites. También puedes dirigirte a la sección de quickstarts en la web de JKube para encontrar algún ejemplo que se ajuste mejor a tus necesidades.
Construyendo la imagen de tu contenedor
Una vez compilada y empaquetada tu aplicación (mvn clean package
), es la hora de construir su imagen.
Si estás usando Minikube, puedes compartir el Docker daemon y registry de tu cluster ejecutando eval $(minikube docker-env)
.
De este modo no será necesario publicar tu imagen en un registro compartido remoto.
Lanzando el siguiente comando, daremos instrucciones a JKube para que construya una imagen Docker para tu proyecto Maven:
mvn k8s:build
Publicando la imagen en un registro de contenedores
Tal como he comentado, este paso no será necesario si estás utilizando Minikube y has compartido el Docker daemon de tu cluster. También puedes saltarte este paso si estás apuntando a un cluster OpenShift y has utilizado OpenShift Maven Plugin.
Por otro lado, si necesitas publicar la imagen, lo más probable es que tengas que configurar su nombre. Puedes hacer esto de forma muy sencilla con JKube empleando una propiedad Maven:
<properties>
<!-- ... -->
<jkube.generator.name>your-docker-hub-user/image-name:latest</jkube.generator.name>
</properties>
Ya podemos lanzar el goal de Maven para publicar la imagen:
mvn k8s:push
Generando los recursos de configuración del cluster
JKube también proporciona un mecanismo para detectar los requisitos de tu proyecto y generar manifiestos de configuración del cluster (YAML files) específicos para tu aplicación.
Del mismo modo que en los pasos anteriores, si tu aplicación emplea uno de los frameworks soportados, lo único que tendrás que hacer es lanzar este comando:
mvn k8s:resource
Despliega tu aplicación
Por último, puedes desplegar los ficheros de configuración que acabas de generar en tu cluster.
Internamente, Eclipse JKube utiliza Fabric8 Kubernetes Client
para acceder al cluster leyendo tu .kube/config
.
Por tanto, a menos que quieras apuntar a un cluster diferente, tampoco es necesario que proporciones ninguna configuración adicional.
mvn k8s:apply
Si todo ha ido bien, tu aplicación ya debería de encontrarse disponible en el cluster.
Si estás usando OpenShift, JKube además creará un Route
.
Tu aplicación debería de ser públicamente accesible desde la ruta preconfigurada.
Limpiando recursos
En el caso en el que algo haya ido mal, o simplemente para borrar tu aplicación del cluster, puedes lanzar el siguiente comando:
mvn k8s:undeploy
Maven goals adicionales
Además de los que ya hemos visto, JKube proporciona una serie de Maven goals para facilitarte la vida como desarrollador:
k8s:log
: Muestra las trazas de la aplicación desplegada.k8s:debug
: Habilita el modo depuración de tu aplicación Java en el cluster.k8s:watch
: Monitoriza el espacio de trabajo de tu proyecto para detectar cambios y redesplegar automáticamente tu aplicación.- Muchos más...
Barcelona JUG 2020
En diciembre de 2020 presenté una charla en un meetup organizado por el Barcelona JUG. El siguiente video es una grabación de la sesión dónde resumo lo que has podido leer en este artículo.
Conclusión
En este artículo os he presentado Eclipse JKube y cómo dar vuestros primeros pasos con la librería. También os he mostrado como configurar vuestro proyecto y los principales Maven goals proporcionados por los plugins de JKube.
Si quieres conocer con más detalle lo que Eclipse JKube puede ofrecerte, visita la página web del proyecto y su documentación. No olvides seguir jkubeio en Twitter para suscribirte a las últimas noticias y actualizaciones acerca del proyecto.