operator

package
v0.86.0 Latest Latest
Warning

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

Go to latest
Published: Oct 7, 2025 License: Apache-2.0 Imports: 55 Imported by: 5

Documentation

Index

Constants

View Source
const (

	// ShardEnvVar is the name of the environment variable injected into the
	// config-reloader container that contains the shard number.
	ShardEnvVar = "SHARD"

	// PodNameEnvVar is the name of the environment variable injected in the
	// config-reloader container that contains the pod name.
	PodNameEnvVar = "POD_NAME"

	// NodeNameEnvVar is the name of the environment variable injected in the
	// config-reloader container that contains the node name.
	NodeNameEnvVar = "NODE_NAME"
)
View Source
const (
	// DefaultAlertmanagerVersion is a default image tag for the prometheus alertmanager.
	DefaultAlertmanagerVersion = "v0.28.1"
	// DefaultAlertmanagerBaseImage is a base container registry address for the prometheus alertmanager.
	DefaultAlertmanagerBaseImage = "quay.io/prometheus/alertmanager"
	// DefaultAlertmanagerImage is a default image pulling address for the prometheus alertmanager.
	DefaultAlertmanagerImage = DefaultAlertmanagerBaseImage + ":" + DefaultAlertmanagerVersion

	// DefaultThanosVersion is a default image tag for the Thanos long-term prometheus storage collector.
	DefaultThanosVersion = "v0.39.2"
	// DefaultThanosBaseImage is a base container registry address for the Thanos long-term prometheus
	// storage collector.
	DefaultThanosBaseImage = "quay.io/thanos/thanos"
	// DefaultThanosImage is a default image pulling address for the Thanos long-term prometheus storage collector.
	DefaultThanosImage = DefaultThanosBaseImage + ":" + DefaultThanosVersion
)
View Source
const (
	// InputHashAnnotationKey is the name of the annotation used to store the
	// operator's computed hash value.
	InputHashAnnotationKey = "prometheus-operator-input-hash"

	// ApplicationNameLabelKey is the name of the application.
	ApplicationNameLabelKey = "app.kubernetes.io/name"

	// ManagedByLabelKey is the tool managing the application (e.g. this operator).
	ManagedByLabelKey = "app.kubernetes.io/managed-by"

	// ManagedByLabelValue is the name of this operator.
	ManagedByLabelValue = "prometheus-operator"

	// ApplicationInstanceLabelKey is the unique name identifying the application's instance.
	ApplicationInstanceLabelKey = "app.kubernetes.io/instance"

	// ApplicationVersionLabelKey is the version of the application.
	ApplicationVersionLabelKey = "app.kubernetes.io/version"

	// DefaultContainerAnnotationKey is the annotation defining the default container of the pod.
	DefaultContainerAnnotationKey = "kubectl.kubernetes.io/default-container"
)
View Source
const (
	PrometheusOperatorFieldManager = "PrometheusOperator"

	InvalidConfigurationEvent = "InvalidConfiguration"
)
View Source
const (
	AddEvent    = HandlerEvent("add")
	DeleteEvent = HandlerEvent("delete")
	UpdateEvent = HandlerEvent("update")
)
View Source
const MaxSecretDataSizeBytes = v1.MaxSecretSize - 50_000

MaxSecretDataSizeBytes is the maximum data size that a single secret shard may use. This is lower than v1.MaxSecretSize in order to reserve space for metadata and the rest of the secret k8s object.

Variables

View Source
var (
	// DefaultPrometheusVersion is a default image tag for the prometheus.
	DefaultPrometheusVersion = PrometheusCompatibilityMatrix[len(PrometheusCompatibilityMatrix)-1]
	// DefaultPrometheusV2 is latest version of Prometheus v2.
	DefaultPrometheusV2 = getLatestPrometheusV2()
	// DefaultPrometheusBaseImage is a base container registry address for the prometheus.
	DefaultPrometheusBaseImage = "quay.io/prometheus/prometheus"
	// DefaultPrometheusImage is a default image pulling address for the prometheus.
	DefaultPrometheusImage = DefaultPrometheusBaseImage + ":" + DefaultPrometheusVersion

	// DefaultPrometheusConfigReloaderImage is an image that will be used as a sidecar to provide dynamic prometheus
	// configuration reloading.
	DefaultPrometheusConfigReloaderImage = "quay.io/prometheus-operator/prometheus-config-reloader:v" + version.Version

	// PrometheusCompatibilityMatrix is a list of supported prometheus versions.
	// prometheus-operator end-to-end tests verify that the operator can deploy from the current LTS version to the latest stable release.
	// This list should be updated every time a new LTS is released.
	PrometheusCompatibilityMatrix = []string{
		"v2.45.0",
		"v2.46.0",
		"v2.47.0",
		"v2.47.1",
		"v2.47.2",
		"v2.48.0",
		"v2.48.1",
		"v2.49.0",
		"v2.49.1",
		"v2.50.0",
		"v2.50.1",
		"v2.51.0",
		"v2.51.1",
		"v2.51.2",
		"v2.52.0",

		"v2.53.0",
		"v2.53.1",
		"v2.53.2",
		"v2.53.3",
		"v2.54.0",
		"v2.54.1",
		"v2.55.0",
		"v2.55.1",
		"v3.0.0",
		"v3.0.1",
		"v3.1.0",
		"v3.2.0",
		"v3.2.1",
		"v3.3.0",
		"v3.3.1",
		"v3.4.0",
		"v3.4.1",
		"v3.4.2",
		"v3.5.0",
		"v3.6.0",
	}
)
View Source
var (
	DefaultReloaderTestConfig = &Config{
		ReloaderConfig: ContainerConfig{
			CPURequests:    Quantity{q: resource.MustParse("100m")},
			CPULimits:      Quantity{q: resource.MustParse("100m")},
			MemoryRequests: Quantity{q: resource.MustParse("50Mi")},
			MemoryLimits:   Quantity{q: resource.MustParse("50Mi")},
			Image:          "quay.io/prometheus-operator/prometheus-config-reloader:latest",
		},
	}
)
View Source
var MaxConfigMapDataSize = int(float64(v1.MaxSecretSize) * 0.5)

MaxConfigMapDataSize represents the maximum size for ConfigMap's data. The maximum `Data` size of a ConfigMap seems to differ between environments. This is probably due to different meta data sizes which count into the overall maximum size of a ConfigMap. Thereby lets leave a large buffer.

Functions

func BuildArgs added in v0.63.0

func BuildArgs(args []monitoringv1.Argument, additionalArgs []monitoringv1.Argument) ([]string, error)

BuildArgs takes a list of arguments and a list of additional arguments and returns a []string to use in a container Args.

func BuildImagePath added in v0.42.0

func BuildImagePath(specImage, baseImage, version, tag, sha string) (string, error)

BuildImagePath builds a container image path based on the given parameters. Return specImage if not empty. If image contains a tag or digest then image will be returned. Otherwise, return image suffixed by either SHA, tag or version(in that order). Inspired by kubernetes code handling of image building.

func BuildImagePathForAgent added in v0.75.0

func BuildImagePathForAgent(specImage, baseImage, version string) (string, error)

BuildImagePathForAgent builds a container image path based on the given parameters for Prometheus Agent. Return specImage if not empty. Otherwise a combination of baseImage and version.

func CheckStorageClass added in v0.69.1

func CheckStorageClass(ctx context.Context, canReadStorageClass bool, kclient kubernetes.Interface, storage *monitoringv1.StorageSpec) error

func ConfigMapGVK added in v0.85.0

func ConfigMapGVK() schema.GroupVersionKind

ConfigMapGVK returns the GroupVersionKind representing ConfigMap objects.

func CreateConfigReloader added in v0.43.0

func CreateConfigReloader(name string, options ...ReloaderOption) v1.Container

CreateConfigReloader returns the definition of the config-reloader container.

func ExecAction added in v0.75.0

func ExecAction(u string) *v1.ExecAction

ExecAction returns an ExecAction probing the given URL.

func FindStatusCondition added in v0.65.0

func FindStatusCondition(conditions []monitoringv1.Condition, conditionType monitoringv1.ConditionType) *monitoringv1.Condition

FindStatusCondition returns the condition matching the given type. If the condition isn't present, it returns nil.

func GenerationChanged added in v0.85.0

func GenerationChanged(ep EventPayload) bool

GenerationChanged returns true if the old and current objects don't have the same generation.

It always returns true for creation and deletion events.

func GetObjectFromKey added in v0.84.0

func GetObjectFromKey[T runtime.Object](infs *informers.ForResource, key string) (T, error)

GetObjectFromKey retrieves an object from the informer cache using the provided key. It returns a nil value and no error if the object is not found. The function will panic if the caller provides an informer which doesn't reference objects of type T.

func GunzipConfig added in v0.59.0

func GunzipConfig(b []byte) (string, error)

func GzipConfig added in v0.59.0

func GzipConfig(w io.Writer, conf []byte) error

func LabelsChanged added in v0.85.0

func LabelsChanged(ep EventPayload) bool

LabelsChanged returns true if the old and current objects don't have the same labels.

It always returns true for creation and deletion events.

func ListMatchingNamespaces added in v0.64.0

func ListMatchingNamespaces(selector labels.Selector, nsInf cache.SharedIndexInformer) ([]string, error)

ListMatchingNamespaces lists all the namespaces that match the provided selector.

func MakeHostAliases added in v0.57.0

func MakeHostAliases(input []monitoringv1.HostAlias) []v1.HostAlias

MakeHostAliases converts array of monitoringv1 HostAlias to array of corev1 HostAlias.

func MakeVolumeClaimTemplate added in v0.42.0

func ManagedByOperatorLabelSelector added in v0.85.0

func ManagedByOperatorLabelSelector() string

ManagedByOperatorLabelSelector returns a label selector which selects objects managed by this operator.

func ResourceVersionChanged added in v0.85.0

func ResourceVersionChanged(ep EventPayload) bool

ResourceVersionChanged returns true if the old and current objects don't have the same resource version.

It always returns true for creation and deletion events.

func SanitizeSTS added in v0.42.0

func SanitizeSTS(sts *appsv1.StatefulSet)

SanitizeSTS removes values for APIVersion and Kind from the VolumeClaimTemplates. This prevents update failures due to these fields changing when applied. See https://github.com/kubernetes/kubernetes/issues/87583

func SecretGVK added in v0.85.0

func SecretGVK() schema.GroupVersionKind

SecretGVK returns the GroupVersionKind representing Secret objects.

func StatusPoller added in v0.65.0

func StatusPoller(ctx context.Context, sr StatusReconciler)

StatusPoller refreshes regularly the objects for which the Available condition isn't True. It ensures that the status subresource eventually reflects the pods conditions. For instance when a new version of the statefulset is rolled out and the updated pod has non-ready containers, the statefulset status won't see any update because the number of ready/updated replicas doesn't change. Without the periodic refresh, the object's status would report "containers with incomplete status: [init-config-reloader]" forever.

func StringValOrDefault added in v0.42.0

func StringValOrDefault(val, defaultVal string) string

StringValOrDefault returns the default val if the given string is empty/whitespace. Otherwise returns the value of the string..

func TestSidecarsResources added in v0.63.0

func TestSidecarsResources(t *testing.T, makeStatefulSet func(reloaderConfig ContainerConfig) *appsv1.StatefulSet)

func UpdateConditions added in v0.65.0

func UpdateConditions(conditions []monitoringv1.Condition, newConditions ...monitoringv1.Condition) []monitoringv1.Condition

UpdateConditions merges the existing conditions with newConditions.

func UpdateObject added in v0.71.0

func UpdateObject(o metav1.Object, opts ...ObjectOption)

UpdateObject updates the object's metadata with the provided options. It automatically injects the "managed-by" and "app.kubernetes.io/managed-by" labels which identifies the operator as the managing entity.

func ValidateRule added in v0.61.0

func ValidateRule(promRuleSpec monitoringv1.PrometheusRuleSpec, validationScheme model.ValidationScheme) []error

ValidateRule takes PrometheusRuleSpec and validates it using the upstream prometheus rule validator.

func ValidationSchemeForPrometheus added in v0.86.0

func ValidationSchemeForPrometheus(version semver.Version) model.ValidationScheme

ValidationSchemeForPrometheus returns the appropriate validation scheme based on Prometheus version.

func ValidationSchemeForThanos added in v0.86.0

func ValidationSchemeForThanos(version semver.Version) model.ValidationScheme

ValidationSchemeForThanos returns the appropriate validation scheme based on Thanos version.

func WaitForNamedCacheSync added in v0.43.1

func WaitForNamedCacheSync(ctx context.Context, controllerName string, logger *slog.Logger, inf cache.SharedIndexInformer) bool

WaitForNamedCacheSync synchronizes the informer's cache and will log a warning every minute if the operation hasn't completed yet, until it reaches a timeout of 10 minutes. Under normal circumstances, the cache sync should be fast. If it takes more than 1 minute, it means that something is stuck and the message will indicate to the admin which informer is the culprit. See https://github.com/prometheus-operator/prometheus-operator/issues/3347.

Types

type Accessor added in v0.64.0

type Accessor struct {
	// contains filtered or unexported fields
}

Accessor can manipulate objects returned by informers and handlers.

func NewAccessor added in v0.64.0

func NewAccessor(l *slog.Logger) *Accessor

func (*Accessor) MetaNamespaceKey added in v0.64.0

func (a *Accessor) MetaNamespaceKey(obj any) (string, bool)

MetaNamespaceKey returns a key from the object's metadata. For namespaced objects, the format is `<namespace>/<name>`, otherwise `name`.

func (*Accessor) ObjectMetadata added in v0.64.0

func (a *Accessor) ObjectMetadata(obj any) (metav1.Object, bool)

ObjectMetadata returns the object's metadata and bool indicating if the conversion succeeded.

type Config

type Config struct {
	// Version reported by the Kubernetes API.
	KubernetesVersion semver.Version

	// Cluster domain for Kubernetes services managed by the operator.
	ClusterDomain string

	// Global configuration for the reloader config sidecar.
	ReloaderConfig ContainerConfig

	// Base container images for operands.
	AlertmanagerDefaultBaseImage string
	PrometheusDefaultBaseImage   string
	ThanosDefaultBaseImage       string

	// Allow and deny lists for namespace watchers.
	Namespaces Namespaces

	// Metadata applied to all resources managed by the operator.
	Annotations Map
	Labels      Map

	// Custom name to use for "localhost".
	LocalHost string

	// Label and field selectors for resource watchers.
	PromSelector                 LabelSelector
	AlertmanagerSelector         LabelSelector
	ThanosRulerSelector          LabelSelector
	SecretListWatchFieldSelector FieldSelector
	SecretListWatchLabelSelector LabelSelector

	// Controller id for pod ownership.
	ControllerID string

	// Event recorder factory.
	EventRecorderFactory EventRecorderFactory

	// Feature gates.
	Gates *FeatureGates

	WatchObjectRefsInAllNamespaces bool
}

Config defines configuration parameters for the Operator.

func DefaultConfig added in v0.68.0

func DefaultConfig(cpu, memory string) Config

DefaultConfig returns a default operator configuration.

func (*Config) RegisterFeatureGatesFlags added in v0.75.0

func (c *Config) RegisterFeatureGatesFlags(fs *flag.FlagSet, flags *k8sflag.MapStringBool)

type ConfigReloader added in v0.49.0

type ConfigReloader struct {
	// contains filtered or unexported fields
}

ConfigReloader contains the options to configure a config-reloader container.

type ContainerConfig added in v0.63.0

type ContainerConfig struct {
	// The struct tag are needed for github.com/mitchellh/hashstructure to take
	// the field values into account when generating the statefulset hash.
	CPURequests    Quantity `hash:"string"`
	CPULimits      Quantity `hash:"string"`
	MemoryRequests Quantity `hash:"string"`
	MemoryLimits   Quantity `hash:"string"`
	Image          string
	EnableProbes   bool
}

ContainerConfig holds some configuration for the ConfigReloader sidecar that can be set through prometheus-operator command line arguments.

func (ContainerConfig) ResourceRequirements added in v0.68.0

func (cc ContainerConfig) ResourceRequirements() v1.ResourceRequirements

type EventHandler added in v0.73.0

type EventHandler struct {
	// contains filtered or unexported fields
}

EventHandler implements the k8s.io/tools/cache.ResourceEventHandler interface.

func NewEventHandler added in v0.73.0

func NewEventHandler(
	logger *slog.Logger,
	accessor *Accessor,
	metrics *Metrics,
	objName string,
	enqueueFunc func(ns string),
	options ...EventHandlerOption,
) *EventHandler

NewEventHandler returns a new event handler.

func (*EventHandler) OnAdd added in v0.73.0

func (e *EventHandler) OnAdd(obj any, _ bool)

OnAdd implements the k8s.io/tools/cache.ResourceEventHandler interface.

func (*EventHandler) OnDelete added in v0.73.0

func (e *EventHandler) OnDelete(obj any)

OnDelete implements the k8s.io/tools/cache.ResourceEventHandler interface.

func (*EventHandler) OnUpdate added in v0.73.0

func (e *EventHandler) OnUpdate(old, cur any)

OnUpdate implements the k8s.io/tools/cache.ResourceEventHandler interface.

type EventHandlerOption added in v0.85.0

type EventHandlerOption func(*EventHandler)

EventHandlerOption allows to configure the event handler.

func WithFilter added in v0.85.0

func WithFilter(filter FilterFunc) EventHandlerOption

WithFilter adds a filter function to the event handler.

type EventPayload added in v0.85.0

type EventPayload struct {
	EventType   EventType
	Old         any
	OldMeta     metav1.Object
	Current     any
	CurrentMeta metav1.Object
}

EventPayload represents the object(s) being notified.

It contains both the raw object and the object's metadata to avoid redundant type-casting.

The Old and OldMeta fields are only set for update events.

type EventRecorder added in v0.86.0

type EventRecorder struct {
	// contains filtered or unexported fields
}

EventRecorder records events which are related to the associated Object.

func NewFakeRecorder added in v0.86.0

func NewFakeRecorder(bufferSize int, related runtime.Object) *EventRecorder

func (*EventRecorder) Eventf added in v0.86.0

func (er *EventRecorder) Eventf(regarding runtime.Object, eventtype, reason, action, note string, args ...interface{})

Eventf records a Kubernetes event.

type EventRecorderFactory added in v0.72.0

type EventRecorderFactory func(client kubernetes.Interface, component string) NewEventRecorderFunc

EventRecorderFactory returns an function to create EventRecorder objects.

func NewEventRecorderFactory added in v0.72.0

func NewEventRecorderFactory(emitEvents bool) EventRecorderFactory

type EventType added in v0.85.0

type EventType int

EventType reports whether the event is a creation, update or deletion.

const (
	// EventTypeOnAdd represents a creation event.
	EventTypeOnAdd EventType = iota

	// EventTypeOnUpdate represents an update event.
	EventTypeOnUpdate

	// EventTypeOnDelete represents a deletion event.
	EventTypeOnDelete
)

type FeatureGate added in v0.75.0

type FeatureGate struct {
	// contains filtered or unexported fields
}

type FeatureGateName added in v0.75.0

type FeatureGateName string
const (
	// PrometheusAgentDaemonSetFeature enables the DaemonSet mode for PrometheusAgent.
	PrometheusAgentDaemonSetFeature FeatureGateName = "PrometheusAgentDaemonSet"

	// PrometheusTopologyShardingFeature enables the zone-aware sharding for Prometheus.
	PrometheusTopologyShardingFeature FeatureGateName = "PrometheusTopologySharding"

	// PrometheusShardRetentionPolicyFeature enables the shard retention policy for Prometheus.
	PrometheusShardRetentionPolicyFeature FeatureGateName = "PrometheusShardRetentionPolicy"

	// StatusForConfigurationResourcesFeature enables the status subresource for Prometheus-Operator Config Objects.
	StatusForConfigurationResourcesFeature FeatureGateName = "StatusForConfigurationResources"
)

type FeatureGates added in v0.75.0

type FeatureGates map[FeatureGateName]FeatureGate

func (*FeatureGates) Collect added in v0.75.0

func (fg *FeatureGates) Collect(ch chan<- prometheus.Metric)

Collect implements the prometheus.Collector interface.

func (*FeatureGates) Describe added in v0.75.0

func (fg *FeatureGates) Describe(ch chan<- *prometheus.Desc)

Describe implements the prometheus.Collector interface.

func (*FeatureGates) Descriptions added in v0.75.0

func (fg *FeatureGates) Descriptions() []string

func (*FeatureGates) Enabled added in v0.75.0

func (fg *FeatureGates) Enabled(name FeatureGateName) bool

func (*FeatureGates) String added in v0.75.0

func (fg *FeatureGates) String() string

func (*FeatureGates) UpdateFeatureGates added in v0.75.0

func (fg *FeatureGates) UpdateFeatureGates(flags map[string]bool) error

UpdateFeatureGates merges the current feature gate values with the values provided by the user.

type FieldSelector added in v0.70.0

type FieldSelector string

func (*FieldSelector) Set added in v0.70.0

func (fs *FieldSelector) Set(value string) error

Set implements the flag.Value interface.

func (*FieldSelector) String added in v0.70.0

func (fs *FieldSelector) String() string

String implements the flag.Value interface.

type FilterFunc added in v0.85.0

type FilterFunc func(EventPayload) bool

FilterFunc is a function that gets an EventPayload and returns true if the object should trigger a reconciliation.

func AnyFilter added in v0.85.0

func AnyFilter(filters ...FilterFunc) FilterFunc

AnyFilter returns a FilterFunc which calls the filters sequentially and returns true as soon as one filter returns true.

func HasReferenceFunc added in v0.85.0

func HasReferenceFunc(
	informerGetter InformerGetter,
	refResolver RefResolver,
) FilterFunc

HasReferenceFunc returns a function which takes a object (secret or configmap) as input parameter and returns true if at least one workload watched by the controller has a reference to this object or is in the same namespace.

The object is expected to be a *metav1.PartialObjectMetadata.

type FinalizerSyncer added in v0.84.0

type FinalizerSyncer struct {
	// contains filtered or unexported fields
}

FinalizerSyncer holds the configuration and dependencies required to perform finalizer synchronization.

func NewFinalizerSyncer added in v0.84.0

func NewFinalizerSyncer(
	mdClient metadata.Interface,
	gvr schema.GroupVersionResource,
	configResourcesStatusEnabled bool,
) *FinalizerSyncer

func (*FinalizerSyncer) Sync added in v0.84.0

func (s *FinalizerSyncer) Sync(ctx context.Context, p metav1.Object, deletionInProgress bool, statusCleanup func() error) (bool, error)

Sync ensures the `monitoring.coreos.com/status-cleanup` finalizer is correctly set on the given workload resource (Prometheus, PrometheusAgent, Alertmanager, or ThanosRuler). It adds the finalizer if necessary, or removes it when appropriate.

Returns true if the finalizer was added, otherwise false. The second return value indicates any error encountered during the operation.

type GoverningObject added in v0.65.0

type GoverningObject interface {
	metav1.Object
	ExpectedReplicas() int
	SetReplicas(int)
	SetUpdatedReplicas(int)
	SetAvailableReplicas(int)
	SetUnavailableReplicas(int)
}

type HandlerEvent added in v0.61.0

type HandlerEvent string

type InformerGetter added in v0.85.0

type InformerGetter interface {
	GetInformers() []informers.InformLister
}

type LabelSelector added in v0.70.0

type LabelSelector string

func (*LabelSelector) Set added in v0.70.0

func (ls *LabelSelector) Set(value string) error

Set implements the flag.Value interface.

func (*LabelSelector) String added in v0.70.0

func (ls *LabelSelector) String() string

String implements the flag.Value interface.

type Map added in v0.67.0

type Map map[string]string

func (*Map) Merge added in v0.67.0

func (m *Map) Merge(other map[string]string) map[string]string

Merge returns a map which is a merge of the original map and the other parameter. The keys of the original map take precedence over other.

func (*Map) Set added in v0.67.0

func (m *Map) Set(value string) error

Set implements the flag.Value interface.

func (*Map) SortedKeys added in v0.67.0

func (m *Map) SortedKeys() []string

SortedKeys returns a slice of the keys in increasing order.

func (*Map) String added in v0.67.0

func (m *Map) String() string

String implements the flag.Value interface.

type Metrics added in v0.42.0

type Metrics struct {
	// contains filtered or unexported fields
}

Metrics represents metrics associated to an operator.

func NewMetrics added in v0.42.0

func NewMetrics(r prometheus.Registerer) *Metrics

NewMetrics initializes operator metrics and registers them with the given registerer.

func (*Metrics) Collect added in v0.43.0

func (m *Metrics) Collect(ch chan<- prometheus.Metric)

Collect implements the prometheus.Collector interface.

func (*Metrics) Describe added in v0.43.0

func (m *Metrics) Describe(ch chan<- *prometheus.Desc)

Describe implements the prometheus.Collector interface.

func (*Metrics) MustRegister added in v0.42.0

func (m *Metrics) MustRegister(metrics ...prometheus.Collector)

MustRegister registers metrics with the Metrics registerer.

func (*Metrics) NewInstrumentedListerWatcher added in v0.42.0

func (m *Metrics) NewInstrumentedListerWatcher(lw cache.ListerWatcher) cache.ListerWatcher

NewInstrumentedListerWatcher returns a cache.ListerWatcher with instrumentation.

func (*Metrics) Ready added in v0.43.0

func (m *Metrics) Ready() prometheus.Gauge

Ready returns a gauge to track whether the controller is ready or not.

func (*Metrics) SetRejectedResources added in v0.43.0

func (m *Metrics) SetRejectedResources(objKey, resource string, v int)

SetRejectedResources sets the number of resources that the controller rejected for the given object's key.

func (*Metrics) SetSelectedResources added in v0.43.0

func (m *Metrics) SetSelectedResources(objKey, resource string, v int)

SetSelectedResources sets the number of resources that the controller selected for the given object's key.

func (*Metrics) StsDeleteCreateCounter added in v0.42.0

func (m *Metrics) StsDeleteCreateCounter() prometheus.Counter

StsDeleteCreateCounter returns a counter to track statefulset's recreations.

func (*Metrics) TriggerByCounter added in v0.42.0

func (m *Metrics) TriggerByCounter(triggeredBy string, action HandlerEvent) prometheus.Counter

TriggerByCounter returns a counter to track operator actions by resource type and action (add/delete/update).

type Namespaces added in v0.43.0

type Namespaces struct {
	// Allow list of namespaces for common custom resources.
	// If not empty, DenyList must be empty.
	AllowList StringSet
	// Deny list of namespaces for common custom resources.
	// If not empty, AllowList must be empty.
	DenyList StringSet
	// Allow list of namespaces for Prometheus custom resources.
	PrometheusAllowList StringSet
	// Allow list of namespaces for Alertmanager custom resources.
	AlertmanagerAllowList StringSet
	// Allow list of namespaces for AlertmanagerConfig custom resources.
	AlertmanagerConfigAllowList StringSet
	// Allow list of namespaces for ThanosRuler custom resources.
	ThanosRulerAllowList StringSet
}

Namespaces defines the namespaces which are watched by the operator. The zero value is valid and allows all namespaces.

func (*Namespaces) Finalize added in v0.70.0

func (n *Namespaces) Finalize() error

Finalize must be called to verify that the configuration is valid.

func (*Namespaces) String added in v0.70.0

func (n *Namespaces) String() string

type NewEventRecorderFunc added in v0.86.0

type NewEventRecorderFunc func(related runtime.Object) *EventRecorder

NewEventRecorderFunc returns an EventRecorder which will automatically inject the given runtime.Object as related.

type NodeAddressPriority added in v0.73.0

type NodeAddressPriority string

func (*NodeAddressPriority) Set added in v0.73.0

func (p *NodeAddressPriority) Set(value string) error

Set implements the flag.Value interface.

func (*NodeAddressPriority) String added in v0.73.0

func (p *NodeAddressPriority) String() string

String implements the flag.Value interface.

type ObjectOption added in v0.71.0

type ObjectOption func(metav1.Object)

func WithAnnotations added in v0.71.0

func WithAnnotations(annotations map[string]string) ObjectOption

WithAnnotations merges the given annotations with the existing object's annotations. The given annotations take precedence over the existing ones.

func WithInputHashAnnotation added in v0.76.0

func WithInputHashAnnotation(h string) ObjectOption

WithInputHashAnnotation records the given hash string in the object's annotations.

func WithLabels added in v0.71.0

func WithLabels(labels map[string]string) ObjectOption

WithLabels merges the given labels with the existing object's labels. The given labels take precedence over the existing ones.

func WithManagingOwner added in v0.71.0

func WithManagingOwner(owner Owner) ObjectOption

WithManagingOwner adds the given object as the managing object.

func WithName added in v0.71.0

func WithName(name string) ObjectOption

WithName updates the name of the object.

func WithNamespace added in v0.71.0

func WithNamespace(namespace string) ObjectOption

WithNamespace updates the namespace of the object.

func WithOwner added in v0.71.0

func WithOwner(owner Owner) ObjectOption

WithOwner adds the given object to the list of owner references.

func WithSelectorLabels added in v0.85.0

func WithSelectorLabels(selector *metav1.LabelSelector) ObjectOption

WithSelectorLabels merges the labels from the selector with the existing object's labels. The selector's labels take precedence over the existing ones.

func WithoutKubectlAnnotations added in v0.76.0

func WithoutKubectlAnnotations() ObjectOption

WithoutKubectlAnnotations removes kubectl annotations inherited from the governing object. Otherwise the managed object might be deleted when "kubectl apply --prune" is run against the governing object.

type OwnedResourceOwner added in v0.77.1

type OwnedResourceOwner interface {
	Get(string) (runtime.Object, error)
}

OwnedResourceOwner returns an object from its "<namespace>/<name>" key.

type Owner added in v0.71.0

type Owner interface {
	metav1.ObjectMetaAccessor
	schema.ObjectKind
}

type Pod added in v0.63.0

type Pod v1.Pod

Pod is an alias for the Kubernetes v1.Pod type.

func (*Pod) Message added in v0.63.0

func (p *Pod) Message() string

Message returns a human-readable and terse message about the state of the pod.

func (*Pod) Ready added in v0.63.0

func (p *Pod) Ready() bool

Ready returns true if the pod is ready.

type PrometheusRuleSelector added in v0.64.0

type PrometheusRuleSelector struct {
	// contains filtered or unexported fields
}

func NewPrometheusRuleSelector added in v0.64.0

func NewPrometheusRuleSelector(ruleFormat RuleConfigurationFormat, version string, labelSelector *metav1.LabelSelector, nsLabeler *namespacelabeler.Labeler, ruleInformer *informers.ForResource, eventRecorder *EventRecorder, logger *slog.Logger) (*PrometheusRuleSelector, error)

func (*PrometheusRuleSelector) Select added in v0.64.0

func (prs *PrometheusRuleSelector) Select(namespaces []string) (map[string]string, int, error)

Select selects PrometheusRules and translates them into native Prometheus/Thanos configurations. The second returned value is the number of rejected PrometheusRule objects.

type Quantity added in v0.68.0

type Quantity struct {
	// contains filtered or unexported fields
}

nolint:recvcheck,godoclint

func (*Quantity) Set added in v0.68.0

func (q *Quantity) Set(value string) error

Set implements the flag.Value interface.

func (Quantity) String added in v0.68.0

func (q Quantity) String() string

String implements the flag.Value and fmt.Stringer interfaces.

type ReconcilerMetrics added in v0.61.0

type ReconcilerMetrics interface {
	TriggerByCounter(string, HandlerEvent) prometheus.Counter
}

ReconcilerMetrics tracks reconciler metrics.

type ReconciliationStatus added in v0.56.0

type ReconciliationStatus struct {
	// contains filtered or unexported fields
}

func (ReconciliationStatus) Message added in v0.56.0

func (rs ReconciliationStatus) Message() string

func (ReconciliationStatus) Ok added in v0.56.0

func (rs ReconciliationStatus) Ok() bool

func (ReconciliationStatus) Reason added in v0.56.0

func (rs ReconciliationStatus) Reason() string

type ReconciliationTracker added in v0.56.0

type ReconciliationTracker struct {
	// contains filtered or unexported fields
}

ReconciliationTracker tracks reconciliation status per object.

It only uses their `<namespace>/<name>` key to identify objects.

The zero ReconciliationTracker is ready to use.

func (*ReconciliationTracker) Collect added in v0.56.0

func (rt *ReconciliationTracker) Collect(ch chan<- prometheus.Metric)

Collect implements the prometheus.Collector interface.

func (*ReconciliationTracker) Describe added in v0.56.0

func (rt *ReconciliationTracker) Describe(ch chan<- *prometheus.Desc)

Describe implements the prometheus.Collector interface.

func (*ReconciliationTracker) ForgetObject added in v0.56.0

func (rt *ReconciliationTracker) ForgetObject(key string)

ForgetObject removes the given object from the tracker. It should be called when the controller detects that the object has been deleted.

func (*ReconciliationTracker) GetCondition added in v0.65.0

func (rt *ReconciliationTracker) GetCondition(k string, gen int64) monitoringv1.Condition

GetCondition returns a monitoringv1.Condition for the last-known reconciliation status of the given object.

func (*ReconciliationTracker) HasRefTo added in v0.85.0

func (rt *ReconciliationTracker) HasRefTo(key string, obj runtime.Object) bool

HasRefTo returns true if the object identified by key has a direct or indirect reference to obj (secret or configmap).

func (*ReconciliationTracker) SetStatus added in v0.56.0

func (rt *ReconciliationTracker) SetStatus(key string, err error)

SetStatus updates the last reconciliation status for the object identified by key.

func (*ReconciliationTracker) UpdateReferenceTracker added in v0.85.0

func (rt *ReconciliationTracker) UpdateReferenceTracker(key string, refTracker ReferenceTracker)

UpdateReferenceTracker updates the reference tracker for the object identified by key.

type RefResolver added in v0.85.0

type RefResolver interface {
	HasRefTo(namespacedName string, obj runtime.Object) bool
}

type ReferenceTracker added in v0.85.0

type ReferenceTracker interface {
	Has(runtime.Object) bool
}

ReferenceTracker returns true if it has a reference to the object.

type ReloaderOption added in v0.49.0

type ReloaderOption = func(*ConfigReloader)

func ConfigEnvsubstFile added in v0.49.0

func ConfigEnvsubstFile(configEnvsubstFile string) ReloaderOption

ConfigEnvsubstFile sets the configEnvsubstFile option for the config-reloader container.

func ConfigFile added in v0.49.0

func ConfigFile(configFile string) ReloaderOption

ConfigFile sets the configFile option for the config-reloader container.

func ImagePullPolicy added in v0.62.0

func ImagePullPolicy(imagePullPolicy v1.PullPolicy) ReloaderOption

ImagePullPolicy sets the imagePullPolicy option for the config-reloader container.

func InitContainer added in v0.75.0

func InitContainer() ReloaderOption

InitContainer runs the config-reloader program as an init container meaning that it exits right after generating the configuration.

func ListenLocal added in v0.49.0

func ListenLocal(listenLocal bool) ReloaderOption

ListenLocal sets the listenLocal option for the config-reloader container.

func LocalHost added in v0.49.0

func LocalHost(localHost string) ReloaderOption

LocalHost sets the localHost option for the config-reloader container.

func LogFormat added in v0.49.0

func LogFormat(logFormat string) ReloaderOption

LogFormat sets the logFormat option for the config-reloader container.

func LogLevel added in v0.49.0

func LogLevel(logLevel string) ReloaderOption

LogLevel sets the logLevel option for the config-reloader container.

func ReloaderConfig added in v0.43.0

func ReloaderConfig(rc ContainerConfig) ReloaderOption

ReloaderConfig sets the config option for the config-reloader container.

func ReloaderURL added in v0.49.0

func ReloaderURL(u url.URL) ReloaderOption

ReloaderURL sets the reloaderURL option for the config-reloader container.

func ReloaderUseSignal added in v0.70.0

func ReloaderUseSignal() ReloaderOption

func RuntimeInfoURL added in v0.70.0

func RuntimeInfoURL(u url.URL) ReloaderOption

RuntimeInfoURL sets the runtimeInfoURL option for the config-reloader container.

func Shard added in v0.49.0

func Shard(shard int32) ReloaderOption

Shard sets the shard option for the config-reloader container.

func VolumeMounts added in v0.49.0

func VolumeMounts(mounts []v1.VolumeMount) ReloaderOption

VolumeMounts sets the volumeMounts option for the config-reloader container.

func WatchedDirectories added in v0.49.0

func WatchedDirectories(watchedDirectories []string) ReloaderOption

WatchedDirectories sets the watchedDirectories option for the config-reloader container.

func WebConfigFile added in v0.69.1

func WebConfigFile(config string) ReloaderOption

WebConfigFile sets the webConfigFile option for the config-reloader container.

func WithDaemonSetMode added in v0.76.0

func WithDaemonSetMode() ReloaderOption

WithDaemonSetMode sets the options that work for DaemonSet mode. Currently we set SHARD env equal to 0, eventhough DaemonSet doesn't use this env. TODO: Remove SHARD env for DaemonSet mode.

type ResourceReconciler added in v0.61.0

type ResourceReconciler struct {
	// contains filtered or unexported fields
}

ResourceReconciler reacts on changes for statefulset-based resources and triggers synchronization of the resources.

ResourceReconciler implements the cache.ResourceEventHandler interface and it can subscribe to resource events like this:

var statefulSetInformer, resourceInformer cache.SharedInformer ... rr := NewResourceReconciler(..., "Prometheus", ...) statefulSetInformer.AddEventHandler(rr) resourceInformer.AddEventHandler(rr)

ResourceReconciler will trigger object and status reconciliations based on the events received from the informer.

func NewResourceReconciler added in v0.61.0

func NewResourceReconciler(
	l *slog.Logger,
	syncer Syncer,
	getter OwnedResourceOwner,
	metrics ReconcilerMetrics,
	kind string,
	reg prometheus.Registerer,
	controllerID string,
) *ResourceReconciler

NewResourceReconciler returns a reconciler for the "kind" resource.

func (*ResourceReconciler) DeletionInProgress added in v0.61.0

func (rr *ResourceReconciler) DeletionInProgress(o metav1.Object) bool

DeletionInProgress returns true if the object deletion has been requested.

func (*ResourceReconciler) EnqueueForReconciliation added in v0.61.0

func (rr *ResourceReconciler) EnqueueForReconciliation(obj metav1.Object)

EnqueueForReconciliation asks for reconciling the object.

func (*ResourceReconciler) EnqueueForStatus added in v0.61.0

func (rr *ResourceReconciler) EnqueueForStatus(obj metav1.Object)

EnqueueForStatus asks for updating the status of the object.

func (*ResourceReconciler) OnAdd added in v0.61.0

func (rr *ResourceReconciler) OnAdd(obj any, _ bool)

OnAdd implements the cache.ResourceEventHandler interface.

func (*ResourceReconciler) OnDelete added in v0.61.0

func (rr *ResourceReconciler) OnDelete(obj any)

OnDelete implements the cache.ResourceEventHandler interface.

func (*ResourceReconciler) OnUpdate added in v0.61.0

func (rr *ResourceReconciler) OnUpdate(old, cur any)

OnUpdate implements the cache.ResourceEventHandler interface.

func (*ResourceReconciler) Run added in v0.61.0

func (rr *ResourceReconciler) Run(ctx context.Context)

Run the goroutines responsible for processing the reconciliation and status queues.

func (*ResourceReconciler) Stop added in v0.61.0

func (rr *ResourceReconciler) Stop()

Stop the processing queues and wait for goroutines to exit.

type RuleConfigurationFormat added in v0.64.0

type RuleConfigurationFormat int
const (
	// PrometheusFormat indicates that the rule configuration should comply with the Prometheus format.
	PrometheusFormat RuleConfigurationFormat = iota
	// ThanosFormat indicates that the rule configuration should comply with the Thanos format.
	ThanosFormat
)

type ShardedSecret added in v0.53.0

type ShardedSecret struct {
	// contains filtered or unexported fields
}

ShardedSecret can shard Secret data across multiple k8s Secrets. This is used to circumvent the size limitation of k8s Secrets.

func ReconcileShardedSecret added in v0.75.0

func ReconcileShardedSecret(ctx context.Context, data map[string][]byte, client kubernetes.Interface, template *v1.Secret) (*ShardedSecret, error)

func (*ShardedSecret) Hash added in v0.72.0

func (s *ShardedSecret) Hash() (uint64, error)

Hash implements the Hashable interface from github.com/mitchellh/hashstructure.

func (*ShardedSecret) Volume added in v0.72.0

func (s *ShardedSecret) Volume(name string) v1.Volume

Volume returns a v1.Volume object with all TLS assets ready to be mounted in a container. It must be called after UpdateSecrets().

type StatefulSetReporter added in v0.63.0

type StatefulSetReporter struct {
	Pods []*Pod
	// contains filtered or unexported fields
}

func NewStatefulSetReporter added in v0.63.0

func NewStatefulSetReporter(ctx context.Context, kclient kubernetes.Interface, sset *appsv1.StatefulSet) (*StatefulSetReporter, error)

NewStatefulSetReporter returns a statefulset's reporter.

func (*StatefulSetReporter) IsUpdated added in v0.63.0

func (sr *StatefulSetReporter) IsUpdated(p *Pod) bool

IsUpdated returns true if the given pod matches with the statefulset's revision.

func (*StatefulSetReporter) ReadyPods added in v0.63.0

func (sr *StatefulSetReporter) ReadyPods() []*Pod

ReadyPods returns the list of pods that are ready.

func (*StatefulSetReporter) Update added in v0.65.0

func (*StatefulSetReporter) UpdatedPods added in v0.63.0

func (sr *StatefulSetReporter) UpdatedPods() []*Pod

UpdatedPods returns the list of pods that match with the statefulset's revision.

type StatusReconciler added in v0.65.0

type StatusReconciler interface {
	Iterate(func(metav1.Object, []monitoringv1.Condition))
	RefreshStatusFor(metav1.Object)
}

type StringSet added in v0.70.0

type StringSet map[string]struct{}

StringSet represents a list of comma-separated strings.

func MergeAllowLists added in v0.85.0

func MergeAllowLists(a, b StringSet) StringSet

MergeAllowLists returns a StringSet which is the merge of a and b.

func (StringSet) Set added in v0.70.0

func (s StringSet) Set(value string) error

Set implements the flag.Value interface.

func (StringSet) Slice added in v0.70.0

func (s StringSet) Slice() []string

func (StringSet) String added in v0.70.0

func (s StringSet) String() string

String implements the flag.Value interface.

type Syncer added in v0.61.0

type Syncer interface {
	// Sync the state of the object identified by its key.
	Sync(context.Context, string) error
	// UpdateStatus updates the status of the object identified by its key.
	UpdateStatus(context.Context, string) error
}

Syncer knows how to synchronize statefulset-based or daemonset-based resources.

Jump to

Keyboard shortcuts

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