Cliente de Kubernetes para Java: Introducción a Fabric8
Introducción
El mundo de Kubernetes Java es un ecosistema muy rico lleno de infinidad de recursos. A la hora de interactuar con Kubernetes API server, tienes varias opciones entre las que elegir.
En una publicación anterior os introduje YAKC, un cliente que implementé como un proyecto paralelo. Hoy os voy a hablar de otro cliente que además mantengo de forma oficial, Fabric8 Kubernetes Client.
Fabric8 Kubernetes Client es el cliente de Kubernetes para Java más antiguo de los que hay disponibles. A pesar de que ahora hay un cliente oficial de Kubernetes para Java promovido por la CNCF, Fabric8 sigue siendo una de las opciones más populares.
El cliente de Fabric8 se diferencia del resto porque proporciona una API basada en un DSL fluido. Mediante este DSL se pueden tanto realizar operaciones como instanciar o modificar recursos.
¿Cuáles son los componentes principales de Fabric8 Kubernetes Client?
Implementaciones específicas por Cluster
Dependiendo del tipo de cluster al que apuntes hay distintas opciones entre las que elegir. La opción más común es el artefacto kubernetes-client
, que debería de ser compatible con cualquier implementación de Kubernetes (incluyendo OpenShift). No obstante, si quieres aprovechar al máximo las ventajas de OpenShift y sus recursos específicos, entonces deberías de utilizar el artefacto openshift-client
.
Cluster | Componente/Artefacto |
---|---|
Kubernetes | kubernetes-client |
OpenShift | openshift-client |
Extensiones disponibles
Además de los clientes básicos, hay un número creciente de extensiones que forman parte de la distribución de Fabric8 Kubernetes Client.
¿Cómo puedo utilizar Fabric8 Kubernetes Client en mi proyecto?
La forma más sencilla de empezar es incluir la dependencia del componente requerido en tu proyecto.
Si estás utilizando Maven, esto es tan sencillo como:
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>6.13.0</version>
</dependency>
O si tu proyecto está basado en Gradle:
dependencies {
implementation 'io.fabric8:kubernetes-client:6.13.0'
}
Operaciones disponibles
El cliente de Fabric8 debería permitir al menos todas las operaciones que puedes ejecutar con Kubectl or el cliente de Go para Kubernetes.
A continuación expongo un resumen de las tareas más comunes (normalmente tipo CRUD) que puedes conseguir empleando el cliente de Fabric8.
Obtener una lista de recursos
El siguiente ejemplo devuelve una lista de Pods
para el namespace especificado:
try (KubernetesClient kc = new KubernetesClientBuilder().build()) {
kc.pods().inNamespace("my-namespace").list().getItems()
.forEach(pod ->
System.out.printf("Pod %s %n", pod.getMetadata().getName()));
}
Recuperar un recurso con determinado nombre
El ejemplo a continuación recupera un Pod
con el nombre proporcionado desde el namespace especificado:
Pod pod = kc.pods().inNamespace("my-namespace").withName("my-pod").get();
Crear un recurso
En el siguiente ejemplo creamos un ConfigMap
en el namespace especificado:
kc.configMaps().inNamespace("my-namespace").create(new ConfigMapBuilder()
.withNewMetadata().withName("my-configmap").endMetadata()
.addToData("data-field", "data-value")
.build()
);
Editar un recurso con un nombre determinado
El siguiente ejemplo añade una anotación a un Pod
con el nombre proporcionado en el namespace especificado:
kc.pods().inNamespace("my-namespace").withName("my-pod")
.edit(p -> new PodBuilder(p)
.editMetadata().addToAnnotations("edited", "true").endMetadata().build());
Borrar un recurso con un nombre determinado
En este ejemplo borramos un Pod
con el nombre proporcionado en el namespace especificado y esperamos 10 segundos a que la operación se complete:
kc.pods().inNamespace("my-namespace").withName("my-pod").delete();
kc.pods().inNamespace("my-namespace").withName("my-pod")
.waitUntilCondition(Objects::isNull, 10, TimeUnit.SECONDS);
Estos son sólo unos pocos ejemplos que muestran alguna de las múltiples ventajas que obtendrás si eliges utilizar el cliente de Kubernetes Fabric8. Tienes muchos más ejemplos disponibles en la Chuleta oficial.
Conclusión
En esta publicación te he introducido brevemente a Fabric8 Kubernetes Client y sus componentes. También he incluido pequeños fragmentos de código para realizar las operaciones más básicas en tu clúster.
Publicaré más artículos con instrucciones detalladas para operaciones de mayor complejidad. También hay componentes adicionales en la suite de Fabric8 (como el Mock Server) que me gustaría mostrar en artículos exclusivos y dedicados.
De momento, puedes aprender más acerca del cliente visitando los siguientes recursos: