✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Extensibility Areas

Kubernetes Extensibility Areas let you customize and expand the platform via plugins, controllers, and APIs for tailored infrastructure and operations.

Kubernetes Extensibility Areas are the distinct architectural surfaces the Kubernetes control plane exposes for adding new behavior without modifying core Kubernetes source code, spanning API definition, admission control, scheduling, authentication, storage, networking, and client tooling, each with its own extension mechanism and integration contract.


API-Level Extensibility

Custom Resource Definitions

The most widely used extensibility area allows new resource kinds to be registered with the API server, giving them full support for kubectl, RBAC, and etcd storage without requiring changes to the API server binary.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: cronbackups.batch.example.com
spec:
  group: batch.example.com
  scope: Namespaced
  names:
    kind: CronBackup
    plural: cronbackups
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object

Aggregated API Servers

For extension authors who need behavior beyond what a CRD's declarative schema and generic storage can provide, such as custom business logic executed synchronously during a request, an aggregated API server registers as an APIService and receives proxied requests for its group directly from the main API server, exactly as the Metrics API does for metrics.k8s.io.

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: v1beta1.custom.example.com
spec:
  service:
    name: custom-api-server
    namespace: extensions
  group: custom.example.com
  version: v1beta1
  groupPriorityMinimum: 100
  versionPriority: 100

Admission Control Extensibility

Validating and Mutating Webhooks

Admission webhooks intercept requests to the API server after authentication and authorization but before persistence, allowing external logic to validate or mutate an object.

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: enforce-resource-limits
webhooks:
  - name: limits.policy.example.com
    rules:
      - apiGroups: [""]
        apiVersions: ["v1"]
        operations: ["CREATE"]
        resources: ["pods"]
    clientConfig:
      service:
        name: policy-webhook
        namespace: policy-system
        path: "/validate"
    admissionReviewVersions: ["v1"]
    sideEffects: None

Policy-as-Code Alternatives

Newer built-in mechanisms such as ValidatingAdmissionPolicy express admission rules using the Common Expression Language directly as a Kubernetes resource, avoiding the operational overhead of running a separate webhook service for straightforward validation logic.

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: require-resource-limits
spec:
  validations:
    - expression: "object.spec.containers.all(c, has(c.resources.limits))"

Scheduling Extensibility

Custom Schedulers

Kubernetes allows entirely separate scheduler binaries to run alongside the default scheduler, with pods opting in via spec.schedulerName, giving specialized workloads (batch, GPU-aware, or topology-sensitive scheduling) their own placement logic.

Scheduler Framework Plugins

For extending rather than replacing the default scheduler, the Scheduler Framework defines extension points (Filter, Score, Bind, PreBind, and others) at which custom plugins compiled into the scheduler binary can influence placement decisions without a full scheduler rewrite.


Networking and Storage Extensibility

Container Network Interface

CNI plugins implement pod networking, and the CNI specification defines the exact contract (a binary invoked with a JSON configuration) that any network implementation, from a simple bridge network to an overlay mesh, must satisfy to be usable by the kubelet.

Container Storage Interface

CSI similarly standardizes how storage systems provision, attach, and mount volumes, allowing a storage vendor to implement a driver once and have it work across any CSI-compliant Kubernetes cluster without kubelet code changes.

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: csi.example-storage.com
spec:
  attachRequired: true
  podInfoOnMount: true
Portability = Standardized Interface Vendor-Specific Coupling

Client and Authentication Extensibility

kubectl Plugins

The kubectl CLI supports plugins discovered as executables named kubectl-<name> on the system PATH, allowing new subcommands to be added without modifying kubectl itself.

kubectl krew install neat
kubectl neat get pod my-pod -o yaml

Authentication Webhooks and Exec Plugins

The API server can delegate token or certificate verification to an external webhook, and client tools can obtain credentials dynamically through exec-based authentication plugins, extending how identity is established without hardcoding a single authentication scheme into the control plane.


Relationship Between the Areas

These extensibility areas are largely orthogonal but frequently composed together: an Operator (built on CRDs and controllers) commonly ships its own admission webhook for validation, relies on the default CSI driver for persistent storage, and may register a custom metrics API to expose Operator-specific data, illustrating that most non-trivial platform extensions in practice span several of these extensibility areas simultaneously rather than relying on just one.

API server CRDs Admission webhooks Aggregated API CNI / CSI Schedulers