Changes for version 0.001 - 2026-10-01

  • First release. A Comb is a self-contained "micro collection of Kubernetes parts" that deploys itself, reports its status and publishes its endpoints as a live Perl instance.
  • Comb custom resource: Kubernetes::Comb::CRD::* classes for the CR, its spec and status conditions; Kubernetes::Comb::CRD generates the IO::K8s resource map for it; Kubernetes::Comb::Endpoint is the resolved-endpoint value object.
  • spec.config and spec.upstream are free-form: declared as IO::K8s Opaque, so nested values round-trip through the CR untouched (needs IO::K8s 1.109).
  • Client seam: Kubernetes::Comb::Role::Client defines the request surface every Comb goes through; Kubernetes::Comb::Client::Sync (on Kubernetes::REST) and Kubernetes::Comb::Client::Async (on Net::Async::Kubernetes, an optional dependency) implement it, both returning Futures. Client::Async refuses a Net::Async::Kubernetes older than 0.009 when it is loaded, naming the version needed and the one found. Requires IO::K8s 1.109 and Kubernetes::REST 1.109.
  • Comb lifecycle: from_crd builds an instance from a CR; deploy, status, healthy, logs, restart, stop, describe and endpoint each return a Future and never throw. restart and stop delete a Job with propagationPolicy Background, so its Pods go with it.
  • reconcile resolves upstreams, checks dependencies and the contract check, deploys and prunes only what the Comb owns, and writes status -- it never fails itself, turning any error into phase Error instead; a status message never carries Perl's own " at FILE line N.". deploy stamps every resource with a <prefix>applied-digest annotation, and reconcile deploys a healthy Comb again (phase Pending, then Running) when what it renders no longer matches the live digests. Pruning deletes with propagationPolicy Background too, so a Job's Pods and a Deployment's ReplicaSets go with the resource.
  • Upstreams and the bridge: Kubernetes::Comb::Role::Upstream, Upstream::Static (fixed endpoints) and Upstream::K8s (a peer Comb in another kube context) let a Comb borrow its service instead of running it; a bridge stays on record until replaced, and a stopped Comb is scaled back while its upstream is healthy.
  • Kubernetes::Comb::Static and Role::Static load manifests from .pk8s and YAML files, for a Comb with no code of its own.
  • examples/sync.pl and examples/async.pl show what a manager driving several Combs looks like, synchronously and on IO::Async.
  • Unit tests (prove -lr t/) need no cluster; the integration suite only runs with TEST_KUBERNETES_COMB_KUBECONFIG set.

Modules

A self-contained micro collection of Kubernetes parts as a live Perl instance
IO::K8s resource map provider for the Comb custom resource
The Comb custom resource
One condition in the status of a Comb custom resource
One resolved endpoint in the status of a Comb custom resource
Identity of one Kubernetes object a Comb manages
Spec of the Comb custom resource
Status of the Comb custom resource
Upstream section in the status of a Comb custom resource
Asynchronous Comb client on Net::Async::Kubernetes
Synchronous Comb client on Kubernetes::REST, returning done Futures
Value object for an endpoint a Comb offers
The Kubernetes client surface a Comb works through
Comb manifests loaded from .pk8s and YAML files
What a Comb borrows its service from instead of running it
A Comb whose manifests are .pk8s and YAML files
Borrow a Comb's service from its peer Comb in another kube context
An upstream with fixed endpoints and no cluster behind it