Changes for version 1.108 - 2026-09-22

  • New ensure_crd(@classes): create-or-update CustomResourceDefinitions from typed IO::K8s classes, wait until Established, then invalidate_discovery. Several versions of one CRD need storage => '<version>'.
  • A Kind the cluster serves but no class resolves now inflates to IO::K8s::Unstructured instead of failing closed; shipped, `with` and AutoGen classes still win. build_path gains additive kind, api_version, resource and namespaced arguments for such paths.
  • The cluster resource map no longer invents IO::K8s::Api::<Group> class names for CRD groups without a shipped class; those resolve through the inner IO::K8s (`with` providers, then AutoGen) or fail closed.
  • A short name served in several versions resolves to the version the cluster marks preferred, not to a fixed stable-over-beta ranking.
  • New constructor attribute `with`: external IO::K8s resource-map providers (CRD bundles) passed through to the inner IO::K8s, e.g. with => ['IO::K8s::GatewayAPI'].
  • The cluster resource map comes from aggregated discovery (/api, /apis) instead of /openapi/v2, now fetched lazily for schema_for/compare_schema only; a failed discovery fetch warns and uses the built-in map.
  • New invalidate_discovery: drop the cached discovery catalog and resource map so a freshly installed CRD resolves without a new client.
  • New CLI tool kube_crd2class: renders a CustomResourceDefinition (from a file with -f, or from the cluster with --from_cluster <Kind>) as typed IO::K8s class source, to STDOUT or a tree with -d.
  • Fix kube_watch taking the first option as the Kind when options precede it ("kube_watch -n default Pod" watched Kind "-n").
  • New CLI tool kube_test_minikube: fetches minikube (SHA-256 verified), runs a profile with its own kubeconfig, exports the live-test variables and runs the given command, e.g. "kube_test_minikube prove -lr t/".
  • Require IO::K8s 1.108 (Kubernetes v1.37 sync).
  • inflate_list() warns once per list naming every item it drops instead of discarding uninflatable items silently.
  • expand_class() is a client method that resolves names the built-in map knows without fetching the cluster resource map.
  • Kubeconfig context()/cluster()/user() croak with a message naming what is missing (no entries, no current-context, name not found) instead of an uninitialized-value warning and an empty "Context not found: ".

Documentation

Kubernetes CLI client using Kubernetes::REST
Generate IO::K8s classes from a CustomResourceDefinition
Run a command against a throwaway minikube cluster
Watch Kubernetes resources for changes

Modules

A Perl REST Client for the Kubernetes API
Compatibility helper for deprecated v0 Admission Registration calls
Compatibility helper for deprecated v0 API Extensions calls
Compatibility helper for deprecated v0 API Registration calls
Compatibility helper for deprecated v0 Apps calls
Kubernetes API authentication token
Bearer token read from a file, re-read when the file changes
Compatibility helper for deprecated v0 Authentication calls
Compatibility helper for deprecated v0 Authorization calls
Compatibility helper for deprecated v0 Autoscaling calls
Compatibility helper for deprecated v0 Batch calls
CLI base class for Kubernetes::REST command-line tools
The create command of kube_client
The delete command of kube_client
The get command of kube_client
The raw command of kube_client
Generate IO::K8s classes from a CustomResourceDefinition
Bring up a minikube test cluster and run a command against it
Shared kubeconfig/auth options for CLI tools
CLI for watching Kubernetes resources
Compatibility helper for deprecated v0 Certificates calls
Compatibility helper for deprecated v0 Coordination calls
Compatibility helper for deprecated v0 Core calls
Compatibility helper for deprecated v0 error handling
Compatibility helper for deprecated v0 Events calls
Working examples for Kubernetes::REST with Minikube, K3s, and other clusters
HTTP request object
HTTP response object
HTTP client using HTTP::Tiny
Parse kubeconfig files and create Kubernetes::REST instances
HTTP client using LWP::UserAgent
A single log line from the Kubernetes Pod Log API
Compatibility helper for deprecated v0 Networking calls
Compatibility helper for deprecated v0 Policy calls
Compatibility helper for deprecated v0 RBAC calls
Compatibility helper for deprecated v0 remote errors
Interface role for HTTP backends
Compatibility helper for deprecated v0 Scheduling calls
Kubernetes API server connection configuration
Compatibility helper for deprecated v0 Storage calls
Base class for backwards-compatible v0 API group wrappers
A single event from the Kubernetes Watch API

Examples