Fabric8 Kubernetes Client 7.7 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.7.0 de Fabric8 Kubernetes Client y que está disponible para su descarga desde
Maven Central 🎉.
Esta es la séptima 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:
- Soporte para Kubernetes 1.36 (Haru)
- Negociación de contenido en el servidor (Table y PartialObjectMetadata)
- Mejoras de API: isSameResource, subresource() y addOwnerReference
- Correcciones de estabilidad en leader election, informers y WebSockets de exec
- 🐛 Muchas otras mejoras y bug-fixes
Puedes encontrar la lista completa de cambios para esta versión en la release page en GitHub.
Soporte para Kubernetes 1.36 (Haru)
Esta versión añade soporte para Kubernetes v1.36 (ハル / Haru), asegurando que tengas acceso a los últimos recursos y CRDs de la API.
También se han actualizado varias dependencias upstream, entre ellas k8s.io/apimachinery a 0.36.0, el cliente de Istio a 1.29.1, Knative a 0.49, Gateway API a 1.5.0 y el modelo de Prometheus Operator a 0.91.0.
Ten en cuenta que las clases del modelo de scheduling de workloads en scheduling.k8s.io/v1alpha1 (Workload, WorkloadList, PodGroup, etc.) se han eliminado siguiendo la reorganización de upstream definida en KEP-5832.
Nota
Ten en cuenta que puedes seguir accediendo a clústers de Kubernetes más nuevos con versiones anteriores del cliente de Fabric8.
El cliente proporciona una clase GenericKubernetesResources para interactuar con recursos que aún no son compatibles con el cliente. Siempre recomendamos usar la última versión del cliente para beneficiarte de las últimas características y correcciones de errores, pero no es obligatorio.
Negociación de contenido en el servidor (Table y PartialObjectMetadata)
El cliente ahora soporta negociación de contenido en el servidor, lo que te permite solicitar respuestas de tipo Table y PartialObjectMetadata al API server.
Este es el mismo mecanismo que utiliza kubectl get para renderizar su salida tabular, y PartialObjectMetadata es especialmente útil cuando necesitas listar grandes cantidades de recursos pero sólo te interesa su metadata, reduciendo drásticamente el tamaño del payload y el coste de parseo.
Mejoras de API: isSameResource, subresource() y addOwnerReference
Algunas pequeñas adiciones a la API hacen que el código del día a día sea un poco más agradable de escribir:
- Un nuevo método
HasMetadata#isSameResourcepermite comprobar si dos instancias deHasMetadataapuntan al mismo recurso lógico en el clúster, con un modo estricto opcional que además requiere que coincidankindyresourceVersion. - El método genérico
subresource()se ha ampliado con mayor soporte y documentación y ejemplos mejorados, facilitando la interacción con subrecursos personalizados o menos comunes. addOwnerReferencecuenta ahora con una variante que permite establecer los camposcontrolleryblockOwnerDeletionen una sola llamada, algo muy útil cuando escribes operadores.- Se ha añadido un nuevo método
ResourceEventHandler#onList(deprecandoonNothing), proporcionando a los consumidores de informers un hook más significativo para reaccionar al evento de listado inicial.
Correcciones de estabilidad en leader election, informers y WebSockets de exec
Esta versión incluye un lote importante de correcciones de estabilidad que merece la pena destacar:
- Leader election: se ha corregido un timing incorrecto en los callbacks que podía llevar a una situación de líder duplicado.
- Informers:
SerialExecutor.execute()ahora retorna inmediatamente tras el shutdown, corrigiendo una race condition que causaba NPEs enSharedProcessor.distribute(...)tras la parada, y las entradas efímeras de los índices se eliminan correctamente de las cachés de los informers. - Exec WebSockets: los fallos de handshake con una respuesta de upgrade no-nula ya no lanzan
IllegalStateExceptionde forma síncrona, los exit codes ya no son sobrescritos por excepciones de cierre del peer, y las escrituras pendientes de stdout/stderr se vuelcan antes de entregar la señal de salida. - MockWebServer:
shutdown()es ahora idempotente y evita elRejectedExecutionExceptionque podía aparecer en cascadas deafterAllde tests con@Nestedde JUnit, y las respuestas chunked ya no envíanContent-Lengthjunto conTransfer-Encoding.
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.7.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.7.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

