Kubernetes Client for Java: Presentando YAKC


Introducción

Desde hace algún tiempo, soy uno de los miembros del equipo que se encarga del mantenimiento de Fabric8 Kubernetes Client, uno de los clientes Java más populares para KubernetesOpenShift. Fabric8 Kubernetes Client es una de las mejores opciones disponibles ya que nos permite hacer la mayoría de operaciones soportadas por kubectl desde Java con una API muy elegante y fluida. No obstante, acceder a las operaciones de bajo nivel de la API REST o a una versión específica de la API es complicado, ya que el cliente de Fabric8 no lo permite (de momento). Este es el principal motivo que me ha llevado a implementar Yet Another Kubernetes Client (YAKC), un proyecto paralelo durante las vacaciones de Pascua.

El objetivo de Fabric8 Kubernetes Client es proporcionar un sustituto de kubectl para Java siendo básicamente una adaptación de client-go. Por otro lado, YAKC es un cliente Java REST declarativo para la API de Kubernetes. YAKC proporciona acceso a las operaciones y modelo definidos en el esquema OpenAPI de Kubernetes además de  herramientas para detectar la configuración de seguridad y extensiones para acceder a operaciones no documentadas en dicho esquema. También proporciona interfaces reactivas para acceder a los recursos y soporte para Streams.

YAKC – Yet Another Kubernetes Client

Veamos ahora cómo podemos emplear YAKC para realizar alguna de las operaciones básicas. También puedes examinar la carpeta quickstarts  en el repositorio para acceder a una  lista creciente de proyectos de ejemplo.

Setup

El cliente se compone de varios módulos que permitirán hacerlo extensible en el futuro. Para poder acceder a todas las características del proyecto hay que agregar dependencias a los módulos kubernetes-clientkubernetes-api.

Maven

Gradle

Una vez el proyecto se ha configurado, obtener una instancia del cliente con la configuración autodetectada es bastante sencillo:

También se puede proporcionar una configuración manual si no queremos que YAKC detecte la configuración automáticamente:

Gestión de objetos correspondientes a Recursos

Aunque el proyecto no proporciona una interfaz fluida, construir un objeto es bastante sencillo y rápido ya que hay builders disponibles para todos las clases de Modelos.

La siguiente definición de un recurso en formato YAML:

podría ser reescrita de este modo:

Ejemplos básicos

A continuación se muestran algunos ejemplos de como realizar alguna de las operaciones básicas:

Crear un Pod

El siguiente código crea un Pod en el namespace “default” con un label, una anotación y un único contenedor con la imagen containous/whoami.

Listar Pods en todos los namespaces

El siguiente código listará los Pods en todos los namespaces empleando la interfaz Streams (Java 8) para imprimir sus nombres por el standard output (consola).

Observar los recursos Pod en todos los namespaces

Este ejemplo demuestra como podemos emplear la clase Observable de ReactiveX para observar algunos recursos y aplicar filtrado del lado del cliente para completar la suscripción una vez el primer evento de tipo MODIFIED se recibe.

Conclusión

En esta publicación hemos visto como realizar una configuración básica de un proyecto Java para poder utilizar YAKC (Yet Another Kubernetes Client)  y algunos ejemplos sencillos de cómo realizar algunas operaciones básicas en nuestro clúster.

En breve se publicarán más artículos describiendo lo que ya se puede ver en la sección de proyectos Quick start del repositorio en GitHub.

YAKC - Yet Another Kubernetes Client

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *