Fabric8 Kubernetes Client 7.7 is now available!
On behalf of the Fabric8
team and everyone who has contributed, I'm happy to announce that the Fabric8 Kubernetes Client 7.7.0 has been
released and is now available from
Maven Central 🎉.
This marks the seventh minor release of the Fabric8 Kubernetes Client 7, bringing new features, bug fixes, and improvements while keeping the breaking changes minimal.
Thanks to all of you who have contributed with issue reports, pull requests, feedback, and spreading the word with blogs, videos, comments, and so on. We really appreciate your help, keep it up!
What's new?
Without further ado, let's have a look at the most significant updates:
- Kubernetes 1.36 support (Haru)
- Server-side content negotiation (Table and PartialObjectMetadata)
- API ergonomics: isSameResource, subresource() and addOwnerReference
- Reliability fixes in leader election, informers and exec WebSockets
- 🐛 Many other bug fixes and minor improvements
You can find the full changelog for this version in our GitHub release page.
Kubernetes 1.36 support (Haru)
This release adds support for Kubernetes v1.36 (ハル / Haru), ensuring you have access to the latest API resources and CRDs.
Several upstream dependencies have also been bumped, including k8s.io/apimachinery to 0.36.0, Istio client-go to 1.29.1, Knative to 0.49, Gateway API to 1.5.0 and the Prometheus Operator model to 0.91.0.
Note that the scheduling.k8s.io/v1alpha1 workload-scheduling model classes (Workload, WorkloadList, PodGroup, etc.) have been removed following the upstream KEP-5832 rearchitecture.
Note
Please note that you can still access newer Kubernetes clusters with older versions of the Fabric8 client.
The client provides a GenericKubernetesResources class to interact with resources that are not yet supported by the client. We do recommend to always use the latest version of the client to benefit from the latest features and bug fixes, but it's not mandatory.
Server-side content negotiation (Table and PartialObjectMetadata)
The client now supports server-side content negotiation, allowing you to request Table and PartialObjectMetadata responses from the API server.
This is the same mechanism kubectl get uses to render its tabular output, and PartialObjectMetadata is particularly useful when you need to list large numbers of resources but only care about their metadata, drastically reducing the payload size and parsing cost.
API ergonomics: isSameResource, subresource() and addOwnerReference
A few targeted API additions make day-to-day code a bit nicer to write:
- A new
HasMetadata#isSameResourcehelper lets you test whether twoHasMetadatainstances point to the same logical cluster resource, with an optional strict mode that also requires matchingkindandresourceVersion. - The generic
subresource()method has been expanded with broader support and enhanced documentation and examples, making it easier to interact with custom or less common subresources. addOwnerReferencenow has a variant that lets you set thecontrollerandblockOwnerDeletionfields in a single call, which is handy when writing operators.- A new
ResourceEventHandler#onListmethod has been added (deprecatingonNothing), giving informer consumers a more meaningful hook to react to the initial list event.
Reliability fixes in leader election, informers and exec WebSockets
This release includes a notable batch of stability fixes that are worth calling out:
- Leader election: fixed an improper callback timing that could lead to a dual-leader situation.
- Informers:
SerialExecutor.execute()now returns immediately after shutdown, fixing a post-stop NPE race inSharedProcessor.distribute(...), and ephemeral index entries are now properly removed from informer caches. - Exec WebSockets: handshake failures with a non-null upgrade response no longer throw
IllegalStateExceptionsynchronously, exit codes are no longer overwritten by peer-close exceptions, and pending stdout/stderr writes are flushed before the exit signal is delivered. - MockWebServer:
shutdown()is now idempotent and avoids theRejectedExecutionExceptionthat could appear in JUnit@NestedafterAllcascades, and chunked responses no longer sendContent-Lengthtogether withTransfer-Encoding.
Using this release
If your project is based on Maven, you just need to add the Fabric8 Kubernetes Client to your Maven dependencies:
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>7.7.0</version>
</dependency>If your project is based on Gradle, you just need to add the Fabric8 Kubernetes Client to your Gradle dependencies:
dependencies {
api "io.fabric8:kubernetes-client:7.7.0"
}Once your project is ready, you can create a new instance of the client to perform operations. In the following code snippet, I show you how to instantiate the client and retrieve a list of Pods:
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
client.pods().list().getItems().forEach(p -> System.out.println(p.getMetadata().getName()));
}How can you help?
If you're interested in helping out and are a first-time contributor, check out the "good first issue" tag in the issue repository. We've tagged extremely easy issues so that you can get started contributing to Open Source.
We're also excited to read articles and posts mentioning our project and sharing the user experience. Giving a star to the project, and spreading the word in general, helps us reach more users and broaden the feedback. Feedback is the only way to improve.
Project Page | Issues | Discussions | Gitter | Stack Overflow

