Skip to content

Commit 2dcc8a7

Browse files
Add leader election for cluster metrics
1 parent 8b19638 commit 2dcc8a7

7 files changed

Lines changed: 85 additions & 6 deletions

File tree

‎charts/ctrlplane/Chart.lock‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ dependencies:
44
version: 0.1.6
55
- name: otel
66
repository: file://charts/otel
7-
version: 0.2.2
7+
version: 0.2.3
88
- name: wandb-base
99
repository: https://charts.wandb.ai
1010
version: 0.11.11
@@ -14,5 +14,5 @@ dependencies:
1414
- name: wandb-base
1515
repository: https://charts.wandb.ai
1616
version: 0.11.11
17-
digest: sha256:f1eac868446cb9d10c2be8327207e72acda8c5136350a5a4b271463b25cc348b
18-
generated: "2026-05-08T15:38:09.858607-05:00"
17+
digest: sha256:72e6062b790e1d667365e54d31762af5ae4a16cddb4422a697843329ef6863a0
18+
generated: "2026-05-11T10:43:19.537489-05:00"

‎charts/ctrlplane/Chart.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: ctrlplane
33
description: Ctrlplane Helm chart for Kubernetes
44
type: application
5-
version: 1.1.3
5+
version: 1.1.4
66
appVersion: 1.0.0
77

88
maintainers:

‎charts/ctrlplane/charts/otel/Chart.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ name: otel
33
type: application
44
description: A Helm chart for Kubernetes
55

6-
version: 0.2.2
6+
version: 0.2.3
77
appVersion: "0.109.0"

‎charts/ctrlplane/charts/otel/templates/_config.tpl‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ exporters:
4141
{{- define "otel.extensions" -}}
4242
extensions:
4343
health_check: {}
44+
{{- if .Values.presets.receivers.kubernetesCluster }}
45+
k8s_leader_elector:
46+
auth_type: serviceAccount
47+
lease_name: {{ include "otel.fullname" . }}-leader
48+
lease_namespace: {{ .Release.Namespace }}
49+
{{- end }}
4450
{{- end }}
4551

4652
{{- define "otel.processors" -}}
@@ -91,6 +97,9 @@ processors:
9197
service:
9298
extensions:
9399
- health_check
100+
{{- if .Values.presets.receivers.kubernetesCluster }}
101+
- k8s_leader_elector
102+
{{- end }}
94103
pipelines: {}
95104
telemetry:
96105
metrics:

‎charts/ctrlplane/charts/otel/templates/_receivers.tpl‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ receivers:
159159
receivers:
160160
k8s_cluster:
161161
collection_interval: 10s
162+
k8s_leader_elector: k8s_leader_elector
162163
{{- end }}
163164
164165
{{- define "otel.statsdReceiver" -}}

‎charts/ctrlplane/charts/otel/templates/clusterrole.yaml‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,9 @@ rules:
5151
# kubernetesEvents
5252
- apiGroups: ["events.k8s.io"]
5353
resources: ["events"]
54-
verbs: ["watch", "list"]
54+
verbs: ["watch", "list"]
55+
56+
# leaderElection (k8s_leader_elector extension)
57+
- apiGroups: ["coordination.k8s.io"]
58+
resources: ["leases"]
59+
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
suite: otel leader election wiring for k8s_cluster receiver
2+
release:
3+
name: ctrlplane
4+
namespace: ctrlplane
5+
6+
tests:
7+
- it: clusterrole grants leases permissions (always — preset-independent)
8+
template: charts/otel/templates/clusterrole.yaml
9+
asserts:
10+
- contains:
11+
path: rules
12+
content:
13+
apiGroups: ["coordination.k8s.io"]
14+
resources: ["leases"]
15+
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
16+
17+
- it: configmap does NOT include k8s_leader_elector when kubernetesCluster preset is off (default)
18+
template: charts/otel/templates/configmap.yaml
19+
asserts:
20+
- notMatchRegex:
21+
path: data.config
22+
pattern: 'k8s_leader_elector'
23+
24+
- it: configmap includes k8s_leader_elector extension when kubernetesCluster preset is on
25+
template: charts/otel/templates/configmap.yaml
26+
set:
27+
otel:
28+
presets:
29+
receivers:
30+
kubernetesCluster: true
31+
asserts:
32+
- matchRegex:
33+
path: data.config
34+
pattern: 'k8s_leader_elector:\s+auth_type: serviceAccount'
35+
- matchRegex:
36+
path: data.config
37+
pattern: 'lease_name: ctrlplane-otel-leader'
38+
- matchRegex:
39+
path: data.config
40+
pattern: 'lease_namespace: ctrlplane'
41+
42+
- it: k8s_cluster receiver references the elector when kubernetesCluster preset is on
43+
template: charts/otel/templates/configmap.yaml
44+
set:
45+
otel:
46+
presets:
47+
receivers:
48+
kubernetesCluster: true
49+
asserts:
50+
- matchRegex:
51+
path: data.config
52+
pattern: 'k8s_cluster:[\s\S]*k8s_leader_elector: k8s_leader_elector'
53+
54+
- it: service.extensions includes k8s_leader_elector when kubernetesCluster preset is on
55+
template: charts/otel/templates/configmap.yaml
56+
set:
57+
otel:
58+
presets:
59+
receivers:
60+
kubernetesCluster: true
61+
asserts:
62+
- matchRegex:
63+
path: data.config
64+
pattern: 'extensions:\s*\n\s+- health_check\s*\n\s+- k8s_leader_elector'

0 commit comments

Comments
 (0)