Skip to content

Commit 4f33f70

Browse files
committed
feat(helm): wire controller deployment for opt-in metrics
Add METRICS_BIND_ADDRESS and METRICS_SECURE env vars and a `metrics` containerPort to the controller pod, all gated on `controller.metrics.enabled`. The new env vars are emitted before the `controller.env` passthrough so user-supplied values continue to win (later entries take precedence in env arrays), preserving the existing escape hatch. The controller binary already understands METRICS_BIND_ADDRESS and METRICS_SECURE via its env-var loader (see go/core/pkg/app/app.go), so no controller changes are required. Signed-off-by: Daniel Orbach <ddorbach@gmail.com>
1 parent d488452 commit 4f33f70

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

helm/kagent/templates/controller-deployment.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ spec:
8484
{{- else }}
8585
{{ fail "No database connection configured. Set database.postgres.url, database.postgres.urlFile, or enable database.postgres.bundled." }}
8686
{{- end }}
87+
{{- if .Values.controller.metrics.enabled }}
88+
- name: METRICS_BIND_ADDRESS
89+
value: {{ .Values.controller.metrics.bindAddress | quote }}
90+
- name: METRICS_SECURE
91+
value: {{ .Values.controller.metrics.secureServing | quote }}
92+
{{- end }}
8793
{{- with .Values.controller.env }}
8894
{{- toYaml . | nindent 12 }}
8995
{{- end }}
@@ -97,6 +103,11 @@ spec:
97103
- name: http
98104
containerPort: {{ .Values.controller.service.ports.targetPort }}
99105
protocol: TCP
106+
{{- if .Values.controller.metrics.enabled }}
107+
- name: metrics
108+
containerPort: {{ .Values.controller.metrics.service.targetPort }}
109+
protocol: TCP
110+
{{- end }}
100111
resources:
101112
{{- toYaml .Values.controller.resources | nindent 12 }}
102113
{{- with (.Values.controller.securityContext | default .Values.securityContext) }}

helm/kagent/tests/controller-deployment_test.yaml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,3 +496,87 @@ tests:
496496
path: spec.template.spec.containers[0].env
497497
content:
498498
name: POSTGRES_PASSWORD
499+
500+
- it: should not expose metrics container port by default
501+
template: controller-deployment.yaml
502+
asserts:
503+
- lengthEqual:
504+
path: spec.template.spec.containers[0].ports
505+
count: 1
506+
- notContains:
507+
path: spec.template.spec.containers[0].ports
508+
content:
509+
name: metrics
510+
511+
- it: should not set metrics env vars by default
512+
template: controller-deployment.yaml
513+
asserts:
514+
- notContains:
515+
path: spec.template.spec.containers[0].env
516+
content:
517+
name: METRICS_BIND_ADDRESS
518+
any: true
519+
- notContains:
520+
path: spec.template.spec.containers[0].env
521+
content:
522+
name: METRICS_SECURE
523+
any: true
524+
525+
- it: should expose metrics container port when enabled
526+
template: controller-deployment.yaml
527+
set:
528+
controller.metrics.enabled: true
529+
asserts:
530+
- contains:
531+
path: spec.template.spec.containers[0].ports
532+
content:
533+
name: metrics
534+
containerPort: 8443
535+
protocol: TCP
536+
537+
- it: should set metrics env vars when enabled
538+
template: controller-deployment.yaml
539+
set:
540+
controller.metrics.enabled: true
541+
asserts:
542+
- contains:
543+
path: spec.template.spec.containers[0].env
544+
content:
545+
name: METRICS_BIND_ADDRESS
546+
value: ":8443"
547+
- contains:
548+
path: spec.template.spec.containers[0].env
549+
content:
550+
name: METRICS_SECURE
551+
value: "true"
552+
553+
- it: should reflect insecure serving in env
554+
template: controller-deployment.yaml
555+
set:
556+
controller.metrics.enabled: true
557+
controller.metrics.secureServing: false
558+
asserts:
559+
- contains:
560+
path: spec.template.spec.containers[0].env
561+
content:
562+
name: METRICS_SECURE
563+
value: "false"
564+
565+
- it: should reflect custom bind address and target port
566+
template: controller-deployment.yaml
567+
set:
568+
controller.metrics.enabled: true
569+
controller.metrics.bindAddress: ":9443"
570+
controller.metrics.service.targetPort: 9443
571+
asserts:
572+
- contains:
573+
path: spec.template.spec.containers[0].env
574+
content:
575+
name: METRICS_BIND_ADDRESS
576+
value: ":9443"
577+
- contains:
578+
path: spec.template.spec.containers[0].ports
579+
content:
580+
name: metrics
581+
containerPort: 9443
582+
protocol: TCP

0 commit comments

Comments
 (0)