operator-component-framework

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 27, 2026 License: Apache-2.0

README

Operator Component Framework

Go Reference Go Report Card License

A Go framework for building highly maintainable Kubernetes operators using a behavioral component model and version-gated feature mutations.


Overview

Every Kubernetes operator starts simple: a reconciler, a few resources, some status updates. Then reality sets in. The reconciler grows into a monolith where creation, update, health-checking, suspension, and version-compatibility logic are all interleaved in a single function. Lifecycle behavior gets copy-pasted across resources because there is no shared abstraction for "a deployment that can be suspended" or "a job that runs to completion." Status reporting drifts: one resource sets a condition, another logs a warning, a third does nothing. And when you need to support multiple product versions, compatibility shims get wired directly into orchestration code, making it impossible to reason about what the baseline behavior actually is.

The Operator Component Framework exists because these problems are structural, not incidental. They cannot be solved by writing more careful code in the same flat reconciler model. They require a different organizational unit for operator logic.

The framework introduces three composable layers that separate concerns that operators routinely conflate:

  • Components are logical feature units that reconcile multiple resources together and report a single user-facing condition. A component is the answer to "what does this feature need, and is it healthy?"
  • Resource Primitives are reusable, type-safe wrappers for individual Kubernetes objects with built-in lifecycle semantics. A primitive knows how to create, update, suspend, and report health for its resource, so your reconciler does not have to.
  • Feature Mutations are composable, version-gated modifications that keep baseline resource definitions clean. Instead of scattering if version < X checks throughout your reconciler, mutations declare their applicability and are applied in a predictable sequence.

Mental Model

Controller
  └─ Component
      └─ Resource Primitive
           └─ Kubernetes Object
Layer Responsibility
Controller Determines which components should exist; orchestrates reconciliation at a high level
Component Represents one logical feature; reconciles its resources and reports a single condition
Resource Primitive Encapsulates desired state and lifecycle behavior for a single Kubernetes object
Kubernetes Object The raw client.Object (e.g. Deployment) persisted to the cluster

Features

  • Structured reconciliation with predictable, phased lifecycle management
  • Condition aggregation across multiple resources into a single component condition
  • Grace period support to avoid premature degraded status during normal operations like rolling updates
  • Suspension handling with configurable behavior (scale to zero, delete, or custom logic)
  • Version-gated mutations to apply backward-compatibility patches only when needed
  • Composable mutation layers that stack without interfering with each other
  • Built-in lifecycle interfaces (Alive, Graceful, Suspendable, Completable, Operational, DataExtractable) covering the full range of Kubernetes workload types
  • Typed mutation editors for kubernetes resource primitives
  • Metrics and event recording integrations out of the box

Installation

go get github.com/sourcehawk/operator-component-framework

Requires Go 1.25.6+ and a project using controller-runtime.

Quick Start

The following example builds a component that manages a single Deployment, with an optional tracing feature applied as a mutation.

import (
    "time"
    appsv1 "k8s.io/api/apps/v1"
    corev1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "github.com/sourcehawk/operator-component-framework/pkg/component"
    "github.com/sourcehawk/operator-component-framework/pkg/primitives/deployment"
)

func buildWebInterfaceComponent(owner *MyOperatorCR) (*component.Component, error) {
    // 1. Define the baseline resource
    dep := &appsv1.Deployment{
        ObjectMeta: metav1.ObjectMeta{
            Name:      "web-server",
            Namespace: owner.Namespace,
        },
        Spec: appsv1.DeploymentSpec{
            Selector: &metav1.LabelSelector{
                MatchLabels: map[string]string{"app": "web-server"},
            },
            Template: corev1.PodTemplateSpec{
                ObjectMeta: metav1.ObjectMeta{
                    Labels: map[string]string{"app": "web-server"},
                },
                Spec: corev1.PodSpec{
                    Containers: []corev1.Container{
                        {Name: "app", Image: "my-app:latest"},
                    },
                },
            },
        },
    }

    // 2. Build a resource primitive, applying optional feature mutations
    res, err := deployment.NewBuilder(dep).
        WithMutation(TracingFeature(owner.Spec.Version, owner.Spec.TracingEnabled)).
        Build()
    if err != nil {
        return nil, err
    }

    // 3. Assemble the component
    return component.NewComponentBuilder().
        WithName("web-interface").
        WithConditionType("WebInterfaceReady").
        WithResource(res, component.ResourceOptions{}).
        WithGracePeriod(5 * time.Minute).
        Suspend(owner.Spec.Suspended).
        Build()
}

// 4. Reconcile from your controller
func (r *MyReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
    owner := &MyOperatorCR{}
    if err := r.Get(ctx, req.NamespacedName, owner); err != nil {
        return reconcile.Result{}, client.IgnoreNotFound(err)
    }

    comp, err := buildWebInterfaceComponent(owner)
    if err != nil {
        return reconcile.Result{}, err
    }

    recCtx := component.ReconcileContext{
        Client:   r.Client,
        Scheme:   r.Scheme,
        Recorder: r.Recorder,
        Metrics:  r.Metrics,
        Owner:    owner,
    }

    return reconcile.Result{}, comp.Reconcile(ctx, recCtx)
}

Feature Mutations

Mutations decouple version-specific or feature-gated logic from the baseline resource definition. A mutation declares a condition under which it applies and a function that modifies the resource.

import (
    corev1 "k8s.io/api/core/v1"
    "github.com/sourcehawk/operator-component-framework/pkg/feature"
    "github.com/sourcehawk/operator-component-framework/pkg/primitives/deployment"
    "github.com/sourcehawk/operator-component-framework/pkg/mutation/editors"
    "github.com/sourcehawk/operator-component-framework/pkg/mutation/selectors"
)

func TracingFeature(version string, enabled bool) deployment.Mutation {
    return deployment.Mutation{
        Name:    "enable-tracing",
        Feature: feature.NewResourceFeature(version, nil).When(enabled),
        Mutate: func(m *deployment.Mutator) error {
            m.EditContainers(selectors.ContainerNamed("app"), func(e *editors.ContainerEditor) error {
                e.EnsureEnvVar(corev1.EnvVar{Name: "TRACING_ENABLED", Value: "true"})
                return nil
            })
            return nil
        },
    }
}

Mutations are applied in registration order. Each mutation is independent: multiple mutations can target the same resource without interfering with each other, and the framework guarantees a consistent application sequence.

Resource Lifecycle Interfaces

Resource primitives implement behavioral interfaces that the component layer uses for status aggregation:

Interface Behavior Example resources
Alive Observable health with rolling-update awareness Deployments, StatefulSets, DaemonSets
Graceful Time-bounded convergence with degradation Workloads with slow rollouts
Suspendable Controlled deactivation (scale to zero or delete) Workloads, task primitives
Completable Run-to-completion tracking Jobs
Operational External dependency readiness Services, Ingresses, Gateways, CronJobs
DataExtractable Post-reconciliation data harvest Any resource exposing status fields

Implementing a Custom Resource

You can wrap any Kubernetes object, including custom CRDs, by implementing the Resource interface:

type Resource interface {
    // Object returns the desired-state Kubernetes object.
    Object() (client.Object, error)

    // Mutate receives the current cluster state and applies the desired state to it.
    Mutate(current client.Object) error

    // Identity returns a stable string that uniquely identifies this resource.
    Identity() string
}

Optionally implement any of the lifecycle interfaces (Alive, Suspendable, etc.) to participate in condition aggregation. The framework provides generic building blocks in pkg/generic that handle reconciliation mechanics, mutation sequencing, and suspension so you can wrap any custom CRD without reimplementing these from scratch.

See the Custom Resource Implementation Guide for a complete walkthrough.

Documentation

Document Description
Component Framework Reconciliation lifecycle, condition model, grace periods, suspension
Resource Primitives Primitive categories, Server-Side Apply, mutation system
Custom Resources Implementing custom resource wrappers using the generic building blocks

Contributing

Contributions are welcome. Please open an issue to discuss significant changes before submitting a pull request.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Commit your changes
  4. Open a pull request against main

All new code should include tests. The project uses Ginkgo and Gomega for testing.

go test ./...

License

Apache License 2.0. See LICENSE for details.

Directories

Path Synopsis
e2e
framework
Package framework provides shared infrastructure for E2E tests.
Package framework provides shared infrastructure for E2E tests.
examples
clusterrole-primitive command
Package main is the entry point for the clusterrole primitive example.
Package main is the entry point for the clusterrole primitive example.
clusterrole-primitive/app
Package app provides a sample controller using the clusterrole primitive.
Package app provides a sample controller using the clusterrole primitive.
clusterrole-primitive/features
Package features provides sample mutations for the clusterrole primitive example.
Package features provides sample mutations for the clusterrole primitive example.
clusterrole-primitive/resources
Package resources provides resource implementations for the clusterrole primitive example.
Package resources provides resource implementations for the clusterrole primitive example.
clusterrolebinding-primitive command
Package main is the entry point for the clusterrolebinding primitive example.
Package main is the entry point for the clusterrolebinding primitive example.
clusterrolebinding-primitive/app
Package app provides a sample controller using the clusterrolebinding primitive.
Package app provides a sample controller using the clusterrolebinding primitive.
clusterrolebinding-primitive/features
Package features provides sample mutations for the clusterrolebinding primitive example.
Package features provides sample mutations for the clusterrolebinding primitive example.
clusterrolebinding-primitive/resources
Package resources provides resource implementations for the clusterrolebinding primitive example.
Package resources provides resource implementations for the clusterrolebinding primitive example.
configmap-primitive command
Package main is the entry point for the configmap primitive example.
Package main is the entry point for the configmap primitive example.
configmap-primitive/app
Package app provides a sample controller using the configmap primitive.
Package app provides a sample controller using the configmap primitive.
configmap-primitive/features
Package features provides sample mutations for the configmap primitive example.
Package features provides sample mutations for the configmap primitive example.
configmap-primitive/resources
Package resources provides resource implementations for the configmap primitive example.
Package resources provides resource implementations for the configmap primitive example.
cronjob-primitive command
Package main is the entry point for the cronjob primitive example.
Package main is the entry point for the cronjob primitive example.
cronjob-primitive/app
Package app provides a sample controller using the cronjob primitive.
Package app provides a sample controller using the cronjob primitive.
cronjob-primitive/features
Package features contains example CronJob mutation features.
Package features contains example CronJob mutation features.
cronjob-primitive/resources
Package resources provides resource implementations for the cronjob primitive example.
Package resources provides resource implementations for the cronjob primitive example.
daemonset-primitive command
Package main is the entry point for the daemonset primitive example.
Package main is the entry point for the daemonset primitive example.
daemonset-primitive/app
Package app provides a sample controller using the daemonset primitive.
Package app provides a sample controller using the daemonset primitive.
daemonset-primitive/features
Package features provides sample features for the daemonset primitive.
Package features provides sample features for the daemonset primitive.
daemonset-primitive/resources
Package resources provides resource implementations for the daemonset primitive example.
Package resources provides resource implementations for the daemonset primitive example.
deployment-primitive command
Package main is the entry point for the deployment primitive example.
Package main is the entry point for the deployment primitive example.
deployment-primitive/app
Package app provides a sample controller using the deployment primitive.
Package app provides a sample controller using the deployment primitive.
deployment-primitive/features
Package features provides example feature mutations for the deployment primitive.
Package features provides example feature mutations for the deployment primitive.
deployment-primitive/resources
Package resources provides resource implementations for the deployment primitive example.
Package resources provides resource implementations for the deployment primitive example.
hpa-primitive command
Package main is the entry point for the HPA primitive example.
Package main is the entry point for the HPA primitive example.
hpa-primitive/app
Package app provides a sample controller using the HPA primitive.
Package app provides a sample controller using the HPA primitive.
hpa-primitive/features
Package features provides sample features for the HPA primitive example.
Package features provides sample features for the HPA primitive example.
hpa-primitive/resources
Package resources provides resource implementations for the HPA primitive example.
Package resources provides resource implementations for the HPA primitive example.
ingress-primitive command
Package main is the entry point for the ingress primitive example.
Package main is the entry point for the ingress primitive example.
ingress-primitive/app
Package app provides a sample controller using the ingress primitive.
Package app provides a sample controller using the ingress primitive.
ingress-primitive/features
Package features provides modular feature mutations for the ingress primitive example.
Package features provides modular feature mutations for the ingress primitive example.
ingress-primitive/resources
Package resources provides resource implementations for the ingress primitive example.
Package resources provides resource implementations for the ingress primitive example.
job-primitive command
Package main is the entry point for the job primitive example.
Package main is the entry point for the job primitive example.
job-primitive/app
Package app provides a sample controller using the job primitive.
Package app provides a sample controller using the job primitive.
job-primitive/features
Package features provides sample features for the job primitive.
Package features provides sample features for the job primitive.
job-primitive/resources
Package resources provides resource implementations for the job primitive example.
Package resources provides resource implementations for the job primitive example.
networkpolicy-primitive command
Package main is the entry point for the networkpolicy primitive example.
Package main is the entry point for the networkpolicy primitive example.
networkpolicy-primitive/app
Package app provides a sample controller using the networkpolicy primitive.
Package app provides a sample controller using the networkpolicy primitive.
networkpolicy-primitive/features
Package features provides sample mutations for the networkpolicy primitive example.
Package features provides sample mutations for the networkpolicy primitive example.
networkpolicy-primitive/resources
Package resources provides resource implementations for the networkpolicy primitive example.
Package resources provides resource implementations for the networkpolicy primitive example.
pdb-primitive command
Package main is the entry point for the PDB primitive example.
Package main is the entry point for the PDB primitive example.
pdb-primitive/app
Package app provides a sample controller using the PDB primitive.
Package app provides a sample controller using the PDB primitive.
pdb-primitive/features
Package features provides sample mutations for the PDB primitive example.
Package features provides sample mutations for the PDB primitive example.
pdb-primitive/resources
Package resources provides resource implementations for the PDB primitive example.
Package resources provides resource implementations for the PDB primitive example.
pod-primitive command
Package main is the entry point for the pod primitive example.
Package main is the entry point for the pod primitive example.
pod-primitive/app
Package app provides a sample controller using the pod primitive.
Package app provides a sample controller using the pod primitive.
pod-primitive/features
Package features provides sample mutations for the pod primitive example.
Package features provides sample mutations for the pod primitive example.
pod-primitive/resources
Package resources provides resource implementations for the pod primitive example.
Package resources provides resource implementations for the pod primitive example.
pv-primitive command
Package main is the entry point for the pv primitive example.
Package main is the entry point for the pv primitive example.
pv-primitive/app
Package app provides a sample controller using the pv primitive.
Package app provides a sample controller using the pv primitive.
pv-primitive/features
Package features provides sample mutations for the pv primitive example.
Package features provides sample mutations for the pv primitive example.
pv-primitive/resources
Package resources provides resource implementations for the pv primitive example.
Package resources provides resource implementations for the pv primitive example.
pvc-primitive command
Package main is the entry point for the PVC primitive example.
Package main is the entry point for the PVC primitive example.
pvc-primitive/app
Package app provides a sample controller using the PVC primitive.
Package app provides a sample controller using the PVC primitive.
pvc-primitive/features
Package features provides sample mutations for the PVC primitive example.
Package features provides sample mutations for the PVC primitive example.
pvc-primitive/resources
Package resources provides resource implementations for the PVC primitive example.
Package resources provides resource implementations for the PVC primitive example.
replicaset-primitive command
Package main is the entry point for the replicaset primitive example.
Package main is the entry point for the replicaset primitive example.
replicaset-primitive/app
Package app provides a sample controller using the replicaset primitive.
Package app provides a sample controller using the replicaset primitive.
replicaset-primitive/features
Package features provides feature plan mutations for the replicaset-primitive example.
Package features provides feature plan mutations for the replicaset-primitive example.
replicaset-primitive/resources
Package resources provides resource implementations for the replicaset primitive example.
Package resources provides resource implementations for the replicaset primitive example.
role-primitive command
Package main is the entry point for the role primitive example.
Package main is the entry point for the role primitive example.
role-primitive/app
Package app provides a sample controller using the role primitive.
Package app provides a sample controller using the role primitive.
role-primitive/features
Package features provides sample mutations for the role primitive example.
Package features provides sample mutations for the role primitive example.
role-primitive/resources
Package resources provides resource implementations for the role primitive example.
Package resources provides resource implementations for the role primitive example.
rolebinding-primitive command
Package main is the entry point for the rolebinding primitive example.
Package main is the entry point for the rolebinding primitive example.
rolebinding-primitive/app
Package app provides a sample controller using the rolebinding primitive.
Package app provides a sample controller using the rolebinding primitive.
rolebinding-primitive/features
Package features provides sample mutations for the rolebinding primitive example.
Package features provides sample mutations for the rolebinding primitive example.
rolebinding-primitive/resources
Package resources provides resource implementations for the rolebinding primitive example.
Package resources provides resource implementations for the rolebinding primitive example.
secret-primitive command
Package main is the entry point for the secret primitive example.
Package main is the entry point for the secret primitive example.
secret-primitive/app
Package app provides a sample controller using the secret primitive.
Package app provides a sample controller using the secret primitive.
secret-primitive/features
Package features provides sample mutations for the secret primitive example.
Package features provides sample mutations for the secret primitive example.
secret-primitive/resources
Package resources provides resource implementations for the secret primitive example.
Package resources provides resource implementations for the secret primitive example.
service-primitive command
Package main is the entry point for the service primitive example.
Package main is the entry point for the service primitive example.
service-primitive/app
Package app provides a sample controller using the service primitive.
Package app provides a sample controller using the service primitive.
service-primitive/features
Package features provides sample mutations for the service primitive example.
Package features provides sample mutations for the service primitive example.
service-primitive/resources
Package resources provides resource implementations for the service primitive example.
Package resources provides resource implementations for the service primitive example.
serviceaccount-primitive command
Package main is the entry point for the serviceaccount primitive example.
Package main is the entry point for the serviceaccount primitive example.
serviceaccount-primitive/app
Package app provides a sample controller using the serviceaccount primitive.
Package app provides a sample controller using the serviceaccount primitive.
serviceaccount-primitive/features
Package features provides sample mutations for the serviceaccount primitive example.
Package features provides sample mutations for the serviceaccount primitive example.
serviceaccount-primitive/resources
Package resources provides resource implementations for the serviceaccount primitive example.
Package resources provides resource implementations for the serviceaccount primitive example.
shared/app
Package app provides the ExampleApp CRD definition shared across examples.
Package app provides the ExampleApp CRD definition shared across examples.
statefulset-primitive command
Package main is the entry point for the statefulset primitive example.
Package main is the entry point for the statefulset primitive example.
statefulset-primitive/app
Package app provides a sample controller using the statefulset primitive.
Package app provides a sample controller using the statefulset primitive.
statefulset-primitive/features
Package features provides sample features for the statefulset primitive.
Package features provides sample features for the statefulset primitive.
statefulset-primitive/resources
Package resources provides resource implementations for the statefulset primitive example.
Package resources provides resource implementations for the statefulset primitive example.
internal
scope
Package scope provides utilities for determining Kubernetes resource scope compatibility, particularly for owner reference eligibility.
Package scope provides utilities for determining Kubernetes resource scope compatibility, particularly for owner reference eligibility.
pkg
component
Package component provides the core framework for managing Kubernetes resources as logical components.
Package component provides the core framework for managing Kubernetes resources as logical components.
component/concepts
Package concepts defines the core concepts for the operator component framework.
Package concepts defines the core concepts for the operator component framework.
feature
Package feature provides mechanisms for version-gated feature mutations.
Package feature provides mechanisms for version-gated feature mutations.
generic
Package generic provides generic builders and resources for operator components.
Package generic provides generic builders and resources for operator components.
mutation/editors
Package editors provides editors for mutating Kubernetes objects.
Package editors provides editors for mutating Kubernetes objects.
mutation/selectors
Package selectors provides selectors for filtering Kubernetes objects.
Package selectors provides selectors for filtering Kubernetes objects.
primitives/clusterrole
Package clusterrole provides a builder and resource for managing Kubernetes ClusterRoles.
Package clusterrole provides a builder and resource for managing Kubernetes ClusterRoles.
primitives/clusterrolebinding
Package clusterrolebinding provides a builder and resource for managing Kubernetes ClusterRoleBindings.
Package clusterrolebinding provides a builder and resource for managing Kubernetes ClusterRoleBindings.
primitives/configmap
Package configmap provides a builder and resource for managing Kubernetes ConfigMaps.
Package configmap provides a builder and resource for managing Kubernetes ConfigMaps.
primitives/cronjob
Package cronjob provides a builder and resource for managing Kubernetes CronJobs.
Package cronjob provides a builder and resource for managing Kubernetes CronJobs.
primitives/daemonset
Package daemonset provides a builder and resource for managing Kubernetes DaemonSets.
Package daemonset provides a builder and resource for managing Kubernetes DaemonSets.
primitives/deployment
Package deployment provides a builder and resource for managing Kubernetes Deployments.
Package deployment provides a builder and resource for managing Kubernetes Deployments.
primitives/hpa
Package hpa provides a builder and resource for managing Kubernetes HorizontalPodAutoscalers.
Package hpa provides a builder and resource for managing Kubernetes HorizontalPodAutoscalers.
primitives/ingress
Package ingress provides a builder and resource for managing Kubernetes Ingresses.
Package ingress provides a builder and resource for managing Kubernetes Ingresses.
primitives/job
Package job provides a builder and resource for managing Kubernetes Jobs.
Package job provides a builder and resource for managing Kubernetes Jobs.
primitives/networkpolicy
Package networkpolicy provides a builder and resource for managing Kubernetes NetworkPolicies.
Package networkpolicy provides a builder and resource for managing Kubernetes NetworkPolicies.
primitives/pdb
Package pdb provides a builder and resource for managing Kubernetes PodDisruptionBudgets.
Package pdb provides a builder and resource for managing Kubernetes PodDisruptionBudgets.
primitives/pod
Package pod provides a builder and resource for managing Kubernetes Pods.
Package pod provides a builder and resource for managing Kubernetes Pods.
primitives/pv
Package pv provides a builder and resource for managing Kubernetes PersistentVolumes.
Package pv provides a builder and resource for managing Kubernetes PersistentVolumes.
primitives/pvc
Package pvc provides a builder and resource for managing Kubernetes PersistentVolumeClaims.
Package pvc provides a builder and resource for managing Kubernetes PersistentVolumeClaims.
primitives/replicaset
Package replicaset provides a builder and resource for managing Kubernetes ReplicaSets.
Package replicaset provides a builder and resource for managing Kubernetes ReplicaSets.
primitives/role
Package role provides a builder and resource for managing Kubernetes Roles.
Package role provides a builder and resource for managing Kubernetes Roles.
primitives/rolebinding
Package rolebinding provides a builder and resource for managing Kubernetes RoleBindings.
Package rolebinding provides a builder and resource for managing Kubernetes RoleBindings.
primitives/secret
Package secret provides a builder and resource for managing Kubernetes Secrets.
Package secret provides a builder and resource for managing Kubernetes Secrets.
primitives/service
Package service provides a builder and resource for managing Kubernetes Services.
Package service provides a builder and resource for managing Kubernetes Services.
primitives/serviceaccount
Package serviceaccount provides a builder and resource for managing Kubernetes ServiceAccounts.
Package serviceaccount provides a builder and resource for managing Kubernetes ServiceAccounts.
primitives/statefulset
Package statefulset provides a builder and resource for managing Kubernetes StatefulSets.
Package statefulset provides a builder and resource for managing Kubernetes StatefulSets.
primitives/unstructured
Package unstructured provides shared types for building unstructured Kubernetes resource primitives.
Package unstructured provides shared types for building unstructured Kubernetes resource primitives.
primitives/unstructured/integration
Package integration provides an unstructured resource primitive for Kubernetes integration objects that depend on external assignments and require operational status tracking and suspension support.
Package integration provides an unstructured resource primitive for Kubernetes integration objects that depend on external assignments and require operational status tracking and suspension support.
primitives/unstructured/static
Package static provides an unstructured resource primitive for static Kubernetes objects that do not model convergence health, grace periods, or suspension.
Package static provides an unstructured resource primitive for static Kubernetes objects that do not model convergence health, grace periods, or suspension.
primitives/unstructured/task
Package task provides an unstructured resource primitive for Kubernetes objects that run to completion, requiring completion status tracking and suspension support.
Package task provides an unstructured resource primitive for Kubernetes objects that run to completion, requiring completion status tracking and suspension support.
primitives/unstructured/workload
Package workload provides an unstructured resource primitive for long-running Kubernetes workload objects that require health tracking, graceful rollouts, and suspension support.
Package workload provides an unstructured resource primitive for long-running Kubernetes workload objects that require health tracking, graceful rollouts, and suspension support.
recording
Package recording provides utilities for recording Kubernetes events.
Package recording provides utilities for recording Kubernetes events.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL