Desarrollo de aplicaciones Java cloud-native en Kubernetes con Okteto Cloud
Introducción
En este artículo, te mostraré cómo configurar un proyecto Java Spring Boot para el desarrollo inner loop en Okteto Cloud Kubernetes con Kubernetes Maven Plugin de Eclipse JKube. Este enfoque permite un desarrollo y pruebas eficientes en un entorno remoto de Kubernetes.
Requisitos
Necesitarás lo siguiente para poder seguir este artículo:
- Java JDK
- Cuenta de Okteto: Puedes registrarte gratis usando tu cuenta de GitHub. Okteto no requiere una tarjeta de crédito para empezar, esta es una de mis características favoritas de esta plataforma.
- Okteto CLI y credenciales de Kubernetes: Sigue las instrucciones detalladas en la siguiente sección.
- Acceso al registro de contenedores
Acceso a Kubernetes
Para poder desplegar en tu clúster de desarrollo, configura las credenciales de acceso a Kubernetes de la siguiente manera.
- Instala el CLI de Okteto descargando la última versión para tu plataforma desde la página de releases de GitHub.
- Configura la variable de entorno PATH para incluir el binario descargado.
- Comprueba que la instalación se ha realizado correctamente:
$ okteto version okteto version 2.22.2
A continuación, necesitarás configurar las credenciales de acceso a Kubernetes.
Okteto proporciona un mecanismo muy sencillo para ello.
Solo necesitas descargar el archivo .kube/config
personalizado,
y configurar tu entorno de consola actual.
Si has iniciado sesión en tu cuenta de Okteto, puedes descargar el archivo desde tu panel de control.
A continuación, necesitarás configurar tu entorno para usar el archivo descargado:
MacOS/Linux
export KUBECONFIG=$HOME/Downloads/okteto-kube.config:${KUBECONFIG:-$HOME/.kube/config}
Windows
$Env:KUBECONFIG=("$HOME\Downloads\okteto-kube.config;$Env:KUBECONFIG;$HOME\.kube\config")
Por último, necesitas conectar el CLI de okteto
a tu contexto en la nube ejecutando:
okteto context use cloud.okteto.com
Una nueva ventana del navegador se abrirá, y se te pedirá que inicies sesión en tu cuenta de Okteto o te redirigirá automáticamente si ya has iniciado sesión.
La consola mostrará un mensaje similar a:
✓ Context 'cloud.okteto.com' created
✓ Using user @ cloud.okteto.com
Container Registry
Okteto dispone de su propio registro de contenedores. Esto permite a cada namespace de Okteto disponer de un registro privado para almacenar sus imágenes de contenedor. Para el desarrollo inner loop, es muy interesante aprovechar esta característica.
La forma más sencilla de autenticarse sin persistir las credenciales en el proyecto o el entorno es usar el CLI de Docker para iniciar sesión en el registro.
docker login registry.cloud.okteto.net
El nombre de usuario es el correo electrónico asociado a tu cuenta de Okteto, o tu nombre de usuario de GitHub.
Para el password, necesitarás generar un Personal Access Token de Okteto. Puedes generar uno desde tu panel de control de Okteto Cloud.
Si todo está configurado correctamente, ahora deberías estar conectado y poder subir una imagen al registro. Continuemos configurando el proyecto.
Configuración del proyecto
Continuemos configurando nuestro proyecto para que sea compatible con Okteto.
Comenzaremos configurando el plugin Maven de Kubernetes que se encargará de construir y desplegar nuestra aplicación en el clúster.
Kubernetes Maven Plugin
Si tu proyecto no está usando Kubernetes Maven Plugin, o incluso si ya lo está usando, necesitarás añadir la siguiente configuración a la sección de plugins:
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>kubernetes-maven-plugin</artifactId>
<version>1.17.0</version>
<configuration>
<resources>
<annotations>
<service>
<property>
<name>dev.okteto.com/auto-ingress</name>
<value>true</value>
</property>
</service>
</annotations>
<imagePullPolicy>Always</imagePullPolicy>
</resources>
</configuration>
</plugin>
Comenzamos configurando el plugin para usar la última versión de JKube.
A continuación, añadimos ajustes específicos de Okteto para generar automáticamente el Ingress.
Esto lo hacemos añadiendo una sección de configuración resources
con una anotación annotation
para los recursos de tipo service
.
En este caso, estamos configurando JKube para que añada automáticamente la anotación dev.okteto.com/auto-ingress: true
al servicio.
Teniendo en cuenta que estamos desarrollando para el inner loop, y el proyecto tiene una versión -SNAPSHOT
, JKube etiqueta automáticamente la imagen del contenedor generado con latest
.
Al añadir una Image Pull Policy de Always
, estamos indicando a Kubernetes/Okteto que siempre descargue la última versión de la imagen.
De esta forma, cualquier cambio que realices durante tu ciclo de desarrollo iterativo, se reflejará en la versión desplegada de la aplicación.
Además de la configuración del plugin, también necesitaremos añadir algunas propiedades al fichero pom.xml
del proyecto:
<properties>
<jkube.generator.name>
registry.cloud.okteto.net/your-namespace/jkube-okteto-demo
</jkube.generator.name>
</properties>
Para poder usar el registro de contenedores de Okteto, necesitaremos configurar un nombre específico para nuestra imagen.
En las propiedades del proyecto,
debemos establecer un nombre de imagen para el registro registry.cloud.okteto.net
, y nuestro namespace.
En el fragmento anterior, necesitas reemplazar your-namespace
por el namespace de tu usuario.
Desplegando la aplicación
Con tu entorno configurado, ya estás listo para desplegar la aplicación. Si has configurado tu entorno como se especifica en la sección de acceso a Kubernetes, ahora puedes desplegar la aplicación ejecutando:
mvn clean package k8s:build k8s:push k8s:resource k8s:apply
Tu despliegue debería de mostrarse en el panel de control de Okteto Cloud:
Una vez el Pod se haya iniciado, deberías poder ejecutar cURL sobre el endpoint expuesto:
$ curl https://jkube-okteto-your-namespace.cloud.okteto.net/
Hello Okteto!
Como estamos usando JKube, todos los goals específicos para desarrolladores como depurar (k8s:debug
), recuperar los logs (k8s:log
), etc, están disponibles.
Conclusión
En este artículo, te he mostrado cómo configurar un proyecto Java Maven para el desarrollo inner loop en Okteto Cloud Kubernetes con Kubernetes Maven Plugin de Eclipse JKube. Desarrollar y probar tu aplicación cloud-native en un clúster remoto es fundamental hoy en día. Como puedes ver, JKube proporciona una forma muy sencilla de hacerlo posible.
Puedes encontrar el código fuente completo de este artículo en GitHub.
Referencias
- Documentación de Okteto Cloud: Descarga tus credenciales de Kubernetes
- Documentación de Okteto Cloud: Okteto Registry
- Documentación de Kubernetes Maven Plugin