kube-client-ext
Extension traits (helpers) for kube::Client to make working with Kubernetes resources more ergonomic and convenient.
Overview
This crate provides extension traits for kube::Client that add convenience methods for:
- Resource API access: Direct access to common Kubernetes APIs (pods, deployments, services, etc.)
- Parameter builders: Pre-configured parameter objects for common operations
- Async helpers: High-level async methods for fetching and manipulating resources
- Resource relationships: Methods to find related resources (pods by deployment, etc.)
- Error handling: Utilities for handling common error scenarios like "not found"
Features
KubeClientExt - Synchronous Extensions
The KubeClientExt trait adds methods for:
Parameter Builders:
use KubeClientExt;
let client = try_default.await?;
// Pre-configured parameter objects
let delete_params = client.delete_params; // with grace_period(0)
let post_params = client.post_params_with_manager;
let patch_params = client.patch_params_with_manager;
Direct API Access:
// Cluster-scoped resources
let nodes_api = client.nodes;
let crds_api = client.crds;
let cluster_roles_api = client.clusterroles;
// Namespaced resources (with optional namespace)
let pods_api = client.pods;
let pods_api_default = client.pods; // uses default namespace
let deployments_api = client.deployments;
let services_api = client.services;
KubeClientExt2 - Async Extensions
The KubeClientExt2 trait provides high-level async methods:
Resource Fetching:
use KubeClientExt2;
// Get resources with optional return (None if not found)
let pod = client.get_pod_opt.await?;
let deployment = client.get_deployment_opt.await?;
// Get resources (returns error if not found)
let secret = client.get_secret.await?;
let configmap = client.get_configmap.await?;
Resource Listing:
// List resources in namespace
let pods = client.list_pods.await?;
let deployments = client.list_deployments.await?;
let jobs = client.list_jobs.await?;
let secrets = client.list_secrets.await?;
let services = client.list_services.await?;
let statefulsets = client.list_statefulsets.await?;
let configmaps = client.list_configmaps.await?;
let serviceaccounts = client.list_serviceaccounts.await?;
Resource Relationships:
// Get pods controlled by a deployment
let pods = client.get_pods_by_deployment_name.await?;
// Get owner resource from owner reference
let owner = client..await?;
Error Handling Utilities
use not_found_ok;
// Convert "not found" errors into Ok(Right(status))
client.namespaces
.delete
.await
.or_else?;
Usage
Add this to your Cargo.toml:
[]
= "3.0"
= { = "0.96", = ["client"] }
= { = "0.27", = ["latest"] }
= "0.27"
Basic Example
use Client;
use ;
use ;
async
Advanced Usage
use ;
use ;
async
Supported Kubernetes Versions
This crate supports the same Kubernetes versions as the underlying kube and k8s-openapi crates:
- Kubernetes 1.24+
- Latest tested: Kubernetes 1.31
Features
default: Enablesk8s-openapi/latestfeature for the most recent Kubernetes APIs
Why Use This Crate?
Before (using kube directly):
use ;
use ;
use corev1;
let client = try_default.await?;
let pods: = namespaced;
let lp = default;
let pod_list = pods.list.await?.items;
let mut delete_params = default;
delete_params.grace_period = Some;
After (using kube-client-ext):
use ;
use corev1;
let client = try_default.await?;
let pods = client.list_pods.await?;
let delete_params = client.delete_params; // grace_period(0) included
License
Licensed under the Apache License, Version 2.0 (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).
This project follows the same license as the Kubernetes project and the kube ecosystem.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development
This project uses just for task automation:
# Run tests
# Run clippy
# Run all checks (format, update, test, clippy)
# Build project
# Clean and rebuild
Related Projects
kube- The main Kubernetes client library for Rustk8s-openapi- Kubernetes API bindings for Rustk8s-openapi-ext- Extension traits for Kubernetes resource types