Fabric8 Kubernetes Client 7.8 está disponible!
En nombre de todo el equipo de Fabric8
y de todos sus contribuidores, estoy muy contento de anunciar que hemos
liberado
la versión 7.8.0 de Fabric8 Kubernetes Client y que está disponible para su descarga desde
Maven Central 🎉.
Esta es la octava versión menor de Fabric8 Kubernetes Client 7, que trae nuevas características, bug fixes y mejoras, minimizando los cambios que puedan romper la compatibilidad.
Muchas gracias a todos los que habéis contribuido reportando issues, creando pull requests, dando feedback y promocionando el proyecto mediante blogs, videos, comentarios, etc. Valoramos muchísimo vuestra ayuda ¡seguid así!
Novedades
Sin más dilación, veamos cuáles son las novedades más importantes de esta versión:
- Selectores de shard para list, watch e informers
- Calentamiento de TLS opcional para el cliente HTTP de Vert.x
- Generador de CRDs: descripciones a nivel de clase con @JsonClassDescription
- 🐛 Muchas otras mejoras y bug-fixes
Puedes encontrar la lista completa de cambios para esta versión en la release page en GitHub.
Selectores de shard para list, watch e informers
Las operaciones de list y watch, incluyendo los informers, ahora soportan selectores de shard mediante el nuevo método withShardSelector.
Esto te permite particionar un conjunto grande de recursos entre varios consumidores, de modo que cada instancia sólo lista y observa la porción de la que es responsable.
Es una pieza muy útil cuando necesitas escalar controladores u operadores horizontalmente y repartir la carga de watch, en lugar de que cada instancia reciba todos los eventos.
Un selector de shard es una expresión CEL, normalmente un shardRange(...) sobre el UID del recurso, que adjuntas a cualquier operación de list, watch, inform o delete:
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
// Esta instancia sólo ve la primera mitad del espacio de UIDs
String shard = "shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')";
client.configMaps()
.withShardSelector(shard)
.inform(handler);
}Ten en cuenta que esto depende del soporte de list y watch fragmentados (sharded) en el servidor, una característica alpha de Kubernetes, así que el feature gate correspondiente debe estar habilitado en tu clúster. El soporte inicial se ha completado con algunos follow-ups para pulir los detalles.
Calentamiento de TLS opcional para el cliente HTTP de Vert.x
Las factorías del cliente HTTP de Vert.x (Vertx5HttpClientFactory y VertxHttpClientFactory) exponen ahora un método setTlsWarmup(TlsWarmup) con tres modos: OFF, CONTEXT (el valor por defecto, con el comportamiento sin cambios) y FULL.
Cuando se configura como FULL, el cliente realiza un handshake TLS de loopback síncrono, desechable y una sola vez por JVM, fuera del event loop, en el momento en que se construye.
De esta forma se paga por adelantado el coste único de la carga de clases TLS de JDK/Netty, así que la primera conexión real ya no bloquea el event loop por ese motivo.
Está pensado específicamente para usuarios que ejecutan en JVMs en frío o con la CPU fuertemente limitada, que sufrían bloqueos o timeouts en la primera conexión.
Para activarlo, configuras el modo de warm-up en la factoría del cliente HTTP y se la pasas al builder:
Vertx5HttpClientFactory factory = new Vertx5HttpClientFactory();
factory.setTlsWarmup(TlsWarmup.FULL);
try (KubernetesClient client = new KubernetesClientBuilder()
.withHttpClientFactory(factory)
.build()) {
// La primera conexión TLS ya no paga el coste de carga de clases en el event loop
}El comportamiento por defecto (CONTEXT) no cambia, así que sólo lo activas si lo necesitas.
Generador de CRDs: descripciones a nivel de clase con @JsonClassDescription
El generador de CRDs ahora respeta la anotación @JsonClassDescription de Jackson, permitiéndote añadir descripciones a clases completas en el esquema de CRD generado.
Esto complementa el soporte ya existente para descripciones a nivel de campo, de modo que la documentación embebida en tus CRDs puede ser más completa y estar más cerca de tu modelo de código.
Cómo utilizar esta versión
Si tu proyecto está basado en Maven, lo único que hay que hacer es añadir Fabric8 Kubernetes Client a las dependencias del proyecto:
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>7.8.0</version>
</dependency>Si tu proyecto está basado en Gradle, lo único que tienes que hacer es añadir Fabric8 Kubernetes Client a las dependencias de Gradle:
dependencies {
api "io.fabric8:kubernetes-client:7.8.0"
}Una vez hayas configurado tu proyecto, puedes crear una instancia del cliente para realizar distintas operaciones. En el siguiente fragmento de código muestro como instanciar el cliente y obtener una lista de Pods:
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
client.pods().list().getItems().forEach(p -> System.out.println(p.getMetadata().getName()));
}Cómo ayudar y colaborar
Si estás interesado o interesada en ayudar con el proyecto y es la primera vez que contribuyes, puedes echar un vistazo al tag "good first issue" en el repositorio. Hemos etiquetado issues muy sencillas para que puedas iniciarte en el mundo Open Source.
También nos encanta leer artículos y publicaciones mencionando nuestro proyecto y compartiendo la experiencia. Dar una estrella al proyecto, y en general, ayudar a promocionar el proyecto, nos ayuda a llegar a más usuarios e incrementar el feedback. El feedback es la única forma de mejorar y siempre es bienvenido.
Project Page | Issues | Discussions | Gitter | Stack Overflow

