crdmetrics

command module
v0.0.0-...-ca727f0 Latest Latest
Warning

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

Go to latest
Published: Sep 12, 2024 License: Apache-2.0 Imports: 13 Imported by: 0

README

crdmetrics: Custom Resource Definition Metrics

CI Go Report Card Go Reference

Summary

Custom Resource Definition Metrics (crdmetrics) is a Kubernetes controller that builds on Kube-State-Metrics' Custom Resource State's ideology and generates metrics for custom resources based on the configuration specified in its managed resource, CRDMetricsResource.

The project's conformance benchmarking shows 3x faster RTT for crdmetrics as compared to Kube-State-Metrics' Custom Resource Definition Metrics (f8aa7d9b) feature-set:

Tue Aug 20 21:18:58 IST 2024
[CRDMETRICS]
BUILD:  1021ms
RTT:    1044ms
[KUBESTATEMETRICS]
BUILD:  1042ms
RTT:    3122ms

Development

Start developing by following these steps:

  • Set up dependencies with make setup.
  • Test out your changes with make apply apply-testdata local.
    • Telemetry metrics, by default, are exposed on :9998/metrics.
    • Resource metrics, by default, are exposed on :9999/metrics.
  • Start a pprof interactive session with make pprof.

For more details, take a look at the Makefile targets.

Notes

  • Garbage in, garbage out: Invalid configurations will generate invalid metrics. The exception to this being that certain checks that ensure metric structure are still present (for e.g., value should be a float64).
  • Library support: The module is never intended to be used as a library, and as such, does not export any functions or types, with pkg/ being an exception (for managed types and such).
  • Metrics stability: There are no metrics stability guarantees, as the metrics are user-generated.
  • No middle-ware: The configuration is unmarshalled into a set of stores that the codebase directly operates on. There is no middle-ware that processes the configuration before it is used, in order to avoid unnecessary complexity. However, the expression(s) within the value and labelValues may need to be evaluated before being used, and as such, are exceptions.

TODO

In the order of priority:

  • CEL expressions for metric generation (or *unstructured.Unstructured, if that suffices).
  • Conformance test(s) for Kube-State-Metrics' Custom Resource State API.
  • Benchmark(s) for Kube-State-Metrics' Custom Resource State API.
  • E2E tests covering the controller's basic functionality.
  • s/CRSM/CRDMetrics.
  • Graduate to ALPHA, i.e., draft out a KEP.
  • Make CRDMetricsResource namespaced-scope. This allows for:
    • per-namespace configuration (separate configurations between teams), and,
    • garbage collection, since currently the namespace-scoped deployment manages its cluster-scoped resources, which are not garbage collect-able in Kubernetes by design.
  • Meta-metrics for metric generation failures.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
version
Package version prints the version metadata of the binary.
Package version prints the version metadata of the binary.
pkg
apis/crdmetrics/v1alpha1
Package v1alpha1 is the v1alpha1 version of the API.
Package v1alpha1 is the v1alpha1 version of the API.
generated/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
generated/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
generated/clientset/versioned/typed/crdmetrics/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
generated/clientset/versioned/typed/crdmetrics/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
tests

Jump to

Keyboard shortcuts

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