Changes for version 1.106 - 2026-08-08
- Fix "HTTP::Message content must be bytes" on any request body containing a non-ASCII character. The internal JSON encoder now uses utf8 => 1 (plus canonical and convert_blessed), so request bodies leave as UTF-8 bytes. Applying manifests with e.g. a section sign or an en dash in a description -- the upstream cert-manager CRDs, among others -- died before ever reaching the cluster.
- Fix silent mojibake on non-ASCII response values under the default LWP backend. LWPIO used decoded_content(), handing back characters that IO::K8s then decoded a second time; it now uses decoded_content(charset => 'none'), matching HTTPTinyIO. Both backends now inflate identical objects from identical bytes, which t/24_encoding.t pins.
- Response bodies and streaming chunks are bytes across every IO backend -- documented in Kubernetes::REST::Role::IO as the encoding contract that custom backends must honour, and in a new ENCODING section in Kubernetes::REST. Objects handed to and returned by the API carry characters; log() output stays bytes, as container output is not guaranteed to be text.
- API error messages are now UTF-8 decoded before being croaked, so a non-ASCII error body from the cluster is readable instead of garbled.
- The CLI's JSON output encoder now sets utf8, so non-ASCII values print as correct UTF-8 instead of triggering "Wide character in print".
- Require IO::K8s 1.105 (was 1.008). IO::K8s has decoded with utf8 => 1 since 1.000, so the encoding fix above works on the old minimum too -- the bump just tracks the current release.
- Move the five packages that shared a file with another package into files of their own: Kubernetes::REST::RemoteError (was in Error.pm) and the four Kubernetes::REST::CLI::Cmd::* command classes (were in CLI.pm). All five reported $VERSION 1.003, the version they were written in, because RewriteVersion and BumpVersionAfterRelease only ever rewrite the first "our $VERSION" per file -- while the metadata reported the release version, so 1.105 shipped a CLI::Cmd::Get saying 1.003 in the code and 1.105 in META. One package per file removes the whole class of problem; t/25_one_package_per_file.t keeps it removed.
- Kubernetes::REST::RemoteError has to be loaded explicitly now. Loading Kubernetes::REST::Error no longer brings it along -- RemoteError inherits from it, so the parent file has to finish loading first, which a circular use cannot do. Code catching these deprecated exceptions is unaffected; code throwing one needs "use Kubernetes::REST::RemoteError".
- Give bin/kube_client and bin/kube_watch a $VERSION of their own; they were the only files in the distribution without one.
Documentation
Kubernetes CLI client using Kubernetes::REST
Watch Kubernetes resources for changes
Modules
A Perl REST Client for the Kubernetes API
DEPRECATED - v0 API group for Admission Registration resources
DEPRECATED - v0 API group for API Extensions resources
DEPRECATED - v0 API group for API Registration resources
DEPRECATED - v0 API group for Apps resources
Kubernetes API authentication token
DEPRECATED - v0 API group for Authentication resources
DEPRECATED - v0 API group for Authorization resources
DEPRECATED - v0 API group for Autoscaling resources
DEPRECATED - v0 API group for Batch resources
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
Shared kubeconfig/auth options for CLI tools
CLI for watching Kubernetes resources
DEPRECATED - v0 API group for Certificates resources
DEPRECATED - v0 API group for Coordination resources
DEPRECATED - v0 API group for Core resources
DEPRECATED - v0 error classes
DEPRECATED - v0 API group for Events resources
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
DEPRECATED - v0 API group for Networking resources
DEPRECATED - v0 API group for Policy resources
DEPRECATED - v0 API group for RBAC resources
DEPRECATED - v0 remote error class
Interface role for HTTP backends
DEPRECATED - v0 API group for Scheduling resources
Kubernetes API server connection configuration
DEPRECATED - v0 API group for Storage resources
Base class for backwards-compatible v0 API group wrappers
A single event from the Kubernetes Watch API