Skip to content

Commit 3be2688

Browse files
authored
helm chart: support for TargetAllocators + multiple CRs (#118)
Signed-off-by: Jirka Kremser <jiri.kremser@gmail.com>
1 parent 7e851b9 commit 3be2688

File tree

16 files changed

+301
-120
lines changed

16 files changed

+301
-120
lines changed

e2e-tests/operator_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ var _ = Describe("Helm chart (op):", func() {
5353
})
5454
}
5555
It("kedify/keda should be possible to install", func() {
56-
params := fmt.Sprintf("--version=%s --namespace keda --create-namespace", kedifyKedaHelmChartVersion)
56+
params := fmt.Sprintf("--version=%s --namespace keda --create-namespace --set webhooks.enabled=false", kedifyKedaHelmChartVersion)
5757
err := helmChartInstall("kedify", params)
5858
Expect(err).NotTo(HaveOccurred(), "helm upgrade -i failed: %s", err)
5959
})
60-
It("kedify-otel should be possible to install", func() {
60+
It("keda-otel-scaler should be possible to install", func() {
6161
pwd, err := os.Getwd()
6262
Expect(err).NotTo(HaveOccurred())
6363
_, err = execCmdOE("helm dependency build", pwd+"/../helmchart/otel-add-on")
@@ -66,7 +66,7 @@ var _ = Describe("Helm chart (op):", func() {
6666
execCmdE("kubectl create ns keda")
6767
execCmdE(fmt.Sprintf("kubectl create secret -nkeda generic gh-token --from-literal=GH_PAT=%s", ghPat))
6868
time.Sleep(1 * time.Second)
69-
cmd := "helm upgrade -i kedify-otel ../helmchart/otel-add-on --namespace keda --create-namespace -f ./testdata/scaler-operator-values.yaml"
69+
cmd := "helm upgrade -i keda-otel-scaler ../helmchart/otel-add-on --namespace keda --create-namespace -f ./testdata/scaler-operator-values.yaml"
7070
if len(otelScalerVersion) > 0 {
7171
cmd += fmt.Sprintf(" --set image.tag=%s", otelScalerVersion)
7272
}
@@ -86,12 +86,12 @@ var _ = Describe("Helm chart (op):", func() {
8686
})
8787
When("otel scaler installed", func() {
8888
It("should become ready", func() {
89-
waitForDeployment("otel-add-on-scaler", "keda", defaultTimeoutSec)
89+
waitForDeployment("keda-otel-scaler", "keda", defaultTimeoutSec)
9090
})
9191
})
9292
When("OTel collector installed", func() {
9393
It("should become ready", func() {
94-
waitForDeployment("otel-add-on-otc-collector", "keda", defaultTimeoutSec)
94+
waitForDeployment("otel-add-on-collector", "keda", defaultTimeoutSec)
9595
})
9696
})
9797
Context("Scaled Object", func() {

e2e-tests/podinfo_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,20 +86,20 @@ var _ = Describe("Helm chart:", func() {
8686
err := helmChartInstall("podinfo", params)
8787
Expect(err).NotTo(HaveOccurred(), "helm upgrade -i failed: %s", err)
8888
})
89-
It("kedify-otel should be possible to install", func() {
89+
It("keda-otel-scaler should be possible to install", func() {
9090
pwd, err := os.Getwd()
9191
Expect(err).NotTo(HaveOccurred())
9292
_, err = execCmdOE("helm dependency build", pwd+"/../helmchart/otel-add-on")
9393
Expect(err).NotTo(HaveOccurred())
94-
cmd := "helm upgrade -i kedify-otel ../helmchart/otel-add-on --namespace keda --create-namespace -f ./testdata/scaler-values.yaml"
94+
cmd := "helm upgrade -i keda-otel-scaler ../helmchart/otel-add-on --namespace keda --create-namespace -f ./testdata/scaler-values.yaml"
9595
if len(otelScalerVersion) > 0 {
9696
cmd += fmt.Sprintf(" --set image.tag=%s", otelScalerVersion)
9797
}
9898
err = execCmdE(cmd)
9999
Expect(err).NotTo(HaveOccurred(), "helm upgrade -i failed: %s", err)
100100
})
101101
It("kedify/keda should be possible to install", func() {
102-
params := fmt.Sprintf("--version=%s --namespace keda --create-namespace", kedifyKedaHelmChartVersion)
102+
params := fmt.Sprintf("--version=%s --namespace keda --create-namespace --set webhooks.enabled=false", kedifyKedaHelmChartVersion)
103103
err := helmChartInstall("kedify", params)
104104
Expect(err).NotTo(HaveOccurred(), "helm upgrade -i failed: %s", err)
105105
})
@@ -114,9 +114,9 @@ var _ = Describe("Helm chart:", func() {
114114
waitForDeployment("keda-operator-metrics-apiserver", "keda", defaultTimeoutSec)
115115
})
116116
})
117-
When("kedify-otel installed", func() {
117+
When("keda-otel-scaler installed", func() {
118118
It("should become ready", func() {
119-
waitForDeployment("otel-add-on-scaler", "keda", defaultTimeoutSec)
119+
waitForDeployment("keda-otel-scaler", "keda", defaultTimeoutSec)
120120
})
121121
})
122122
Context("Scaled Object", func() {
@@ -160,7 +160,7 @@ var _ = Describe("Helm chart:", func() {
160160
Should(Succeed())
161161
})
162162
time.Sleep(10 * time.Second)
163-
ctx5min, _ := context.WithTimeout(context.TODO(), 5*time.Minute)
163+
ctx10min, _ := context.WithTimeout(context.TODO(), 10*time.Minute)
164164
It("should eventually scale the podinfo back from N -> 1", func() {
165165
Eventually(func(g Gomega) {
166166
out, err := kubectl("get hpa keda-hpa-podinfo-pull-example -ojsonpath='{.status.desiredReplicas}'")
@@ -169,7 +169,7 @@ var _ = Describe("Helm chart:", func() {
169169
g.Expect(err).Should(Not(HaveOccurred()))
170170
g.Expect(desiredReplicas).Should(Equal(minReplicas))
171171
ctx.t.Logf("\n ->>> Pod info successfuly scaled back to %d <<<-\n\n", desiredReplicas)
172-
}).WithPolling(5 * time.Second).WithTimeout(5 * time.Minute).WithContext(ctx5min).Should(Succeed())
172+
}).WithPolling(5 * time.Second).WithTimeout(10 * time.Minute).WithContext(ctx10min).Should(Succeed())
173173
})
174174
})
175175
})

e2e-tests/test_utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const (
2525
k3dVersion = "v5.8.3"
2626
podinfoVesrsion = "v6.9.0"
2727
kedifyKedaHelmChartVersion = "v2.17.1-0"
28-
defaultTimeoutSec = 300
28+
defaultTimeoutSec = 600
2929
suiteOp = "operator"
3030
suitePi = "podinfo"
3131
)

examples/metric-pull/scaler-with-collector-pull-values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
settings:
2-
metricStoreRetentionSeconds: 30
2+
metricStoreRetentionSeconds: 20
33
logs:
44
logLvl: debug
55

examples/otel-operator/scaler-with-operator-with-collector-values.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ otelOperator:
99
collectorImage:
1010
repository: otel/opentelemetry-collector-contrib
1111

12-
otelOperatorCr:
12+
otelOperatorCrs:
13+
- name: otel-add-on
14+
enabled: true
1315
debug: true
1416
mode: deployment
1517
namespace: keda

helmchart/otel-add-on/templates/NOTES.txt

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,66 @@
1818
\___/ \__\___|_| \__,_|\__,_|\__,_| \___/|_| |_| ,
1919
.
2020
{{- end }}
21+
{{- $collectors := include "operatorCrs" . | fromJsonArray }}
2122
Following components were installed:
22-
- KEDA-OTel add-on
23+
{{- if .Values.deployScaler }}
24+
- KEDA-OTel add-on ✓
25+
{{- end }}
2326
{{- if .Values.otelOperator.enabled }}
24-
- OTel Operator
25-
{{- if .Values.otelOperatorCr.create }}
26-
- OTel Collector (using the operator)
27+
- OTel Operator ✓
2728
{{- end }}
29+
{{- range $collectors }}
30+
- OTel Collector with name '{{ .name | default $.Release.Name }}' (using the operator) ✓
2831
{{- end }}
2932
{{- if .Values.otelCollector.enabled }}
30-
- OTel Collector (using the helm chart)
33+
- OTel Collector (using the helm chart) ✓
34+
{{- $collectors = append $collectors .Values.otelCollector -}}
35+
{{- end }}
36+
37+
Architecture:
38+
{{- printf "\n" -}}
39+
{{- if $collectors }}
40+
{{- range $collectors }}
41+
{{- printf " ┌──────────────┐ " -}}
42+
{{- end }}
43+
{{- printf "\n" -}}
44+
{{- range $collectors }}
45+
{{- printf " │ 🚀 │ " -}}
46+
{{- end }}
47+
{{- printf "\n" -}}
48+
{{- range $collectors }}
49+
{{- printf " │ %-13s│ " ((.name | default "byHelmChart") | trunc 11) -}}
50+
{{- end }}
51+
{{- printf " (Collectors)" -}}
52+
{{- printf "\n" -}}
53+
{{- range $collectors }}
54+
{{- printf " │ %-13s│ " (printf "(%s)" (.mode | trunc 11)) -}}
55+
{{- end }}
56+
{{- printf "\n" -}}
57+
{{- range $collectors }}
58+
{{- printf " └──────────────┘ " -}}
59+
{{- end }}
60+
{{- printf "\n" -}}
61+
{{- if and .Values.deployScaler $collectors }}
62+
{{- printf " ┍" -}}
63+
{{- end }}
64+
{{- range $i, $cr := $collectors }}
65+
{{- if eq $i (sub (len ($collectors)) 1) -}}
66+
{{- printf "╺╺╺╺╺╺╺╺╺┛" -}}
67+
{{- else -}}
68+
{{- printf "╺╺╺╺╺╺╺╺╺┻╺╺╺╺╺╺╺╺╺╺╺╺╺" -}}
69+
{{- end -}}
70+
{{- end }}
71+
{{- printf "\n" -}}
72+
{{- if and .Values.deployScaler $collectors }}
73+
{{- printf " ╵ \n ╵ \n ╵ " -}}
74+
{{- end }}
75+
{{- end }}
76+
77+
{{- if .Values.deployScaler }}
78+
{{- printf " ╭──────────────────╮ ╭╸╸╸╸╸╸╮\n" -}}
79+
{{- if $collectors -}}{{- printf " └╴╴→" -}}{{- end -}}
80+
{{- printf " │ KEDA OTel Scaler │ ←╴╴╴╴╴→ ┆ KEDA ┆\n" -}}
81+
{{- if $collectors -}}{{- printf " " -}}{{- end -}}
82+
{{- printf " ╰──────────────────╯ ╰╸╸╸╸╸╸╯\n" -}}
3183
{{- end }}

helmchart/otel-add-on/templates/_helpers.tpl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,35 @@ Create the name of the service account to use
6060
{{- default "default" .Values.serviceAccount.name }}
6161
{{- end }}
6262
{{- end }}
63+
64+
{{/*
65+
Merge the default settings
66+
*/}}
67+
{{- define "operatorCrs" -}}
68+
{{- if .Values.otelOperatorCrs }}
69+
{{- $allmerged := list }}
70+
{{- $merged := dict }}
71+
{{- range .Values.otelOperatorCrs }}
72+
{{- if .enabled }}
73+
{{- $merged = merge . $.Values.otelOperatorCrDefaultTemplate }}
74+
{{- $allmerged = append $allmerged $merged }}
75+
{{- end }}
76+
{{- end }}
77+
{{- $allmerged | toJson -}}
78+
{{- end }}
79+
{{- end }}
80+
81+
{{/*
82+
Check if at least one otelOperatorCrs has .enabled set to true
83+
*/}}
84+
{{- define "atLeastOneOperatorCr" -}}
85+
{{- if .Values.otelOperatorCrs }}
86+
{{- $enablements := list }}
87+
{{- range .Values.otelOperatorCrs }}
88+
{{- $enablements = append $enablements .enabled }}
89+
{{- end }}
90+
{{- if has true $enablements }}
91+
{{- printf "true" -}}
92+
{{- end }}
93+
{{- end }}
94+
{{- end }}

helmchart/otel-add-on/templates/deployment.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
{{- if .Values.deployScaler }}
12
apiVersion: apps/v1
23
kind: Deployment
34
metadata:
4-
name: {{ include "otel-add-on.name" . }}-scaler
5+
name: {{ .Release.Name }}
56
namespace: {{ .Values.namespace | default .Release.Namespace }}
67
labels:
78
{{- include "otel-add-on.labels" . | nindent 4 }}
@@ -30,7 +31,7 @@ spec:
3031
imagePullSecrets:
3132
{{- toYaml . | nindent 8 }}
3233
{{- end }}
33-
serviceAccountName: {{ include "otel-add-on.serviceAccountName" . }}
34+
serviceAccountName: {{ .Release.Name }}
3435
securityContext:
3536
{{- toYaml .Values.podSecurityContext | nindent 8 }}
3637
containers:
@@ -109,3 +110,4 @@ spec:
109110
tolerations:
110111
{{- toYaml . | nindent 8 }}
111112
{{- end }}
113+
{{- end }}
Lines changed: 53 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,86 @@
1-
{{- if and .Values.otelOperator.enabled .Values.otelOperatorCr.create }}
2-
{{- if .Values.otelOperatorCr.serviceAccount.create }}
1+
{{- range include "operatorCrs" . | fromJsonArray }}
2+
3+
{{- if .serviceAccount.create }}
34
---
45
apiVersion: v1
56
kind: ServiceAccount
67
metadata:
7-
name: {{ .Values.otelOperatorCr.serviceAccount.name | default (include "otel-add-on.name" .) }}
8-
namespace: {{ .Values.otelOperatorCr.namespace | default .Release.Namespace }}
8+
name: {{ .serviceAccount.name | default (printf "%s-op" $.Release.Name) }}
9+
namespace: {{ .namespace | default $.Release.Namespace }}
910
labels:
10-
{{- include "otel-add-on.labels" . | nindent 4 }}
11-
{{- with .Values.otelOperatorCr.serviceAccount.annotations }}
11+
{{- include "otel-add-on.labels" $ | nindent 4 }}
12+
{{- with .serviceAccount.annotations }}
1213
annotations:
1314
{{- toYaml . | nindent 4}}
1415
{{- end }}
1516
{{- end }}
16-
{{- if and .Values.otelOperatorCr.clusterRole.create .Values.otelOperatorCr.clusterRole.rules }}
17+
18+
{{- if and .clusterRole.create .clusterRole.rules }}
1719
---
1820
apiVersion: rbac.authorization.k8s.io/v1
1921
kind: ClusterRole
2022
metadata:
21-
name: {{ include "otel-add-on.name" . }}
23+
name: {{ .serviceAccount.name | default (printf "%s-op" $.Release.Name) }}
2224
labels:
23-
{{- include "otel-add-on.labels" . | nindent 4 }}
24-
{{- with .Values.otelOperatorCr.clusterRole.annotations }}
25+
{{- include "otel-add-on.labels" $ | nindent 4 }}
26+
{{- with .clusterRole.annotations }}
2527
annotations:
2628
{{- toYaml . | nindent 4}}
2729
{{- end }}
2830
rules:
29-
{{- toYaml .Values.otelOperatorCr.clusterRole.rules | nindent 0 }}
31+
{{- toYaml .clusterRole.rules | nindent 0 }}
3032
---
3133
apiVersion: rbac.authorization.k8s.io/v1
3234
kind: ClusterRoleBinding
3335
metadata:
34-
name: {{ .Values.otelOperatorCr.serviceAccount.name | default (include "otel-add-on.name" .) }}
36+
name: {{ .serviceAccount.name | default (printf "%s-op" $.Release.Name) }}
3537
labels:
36-
{{- include "otel-add-on.labels" . | nindent 4 }}
37-
{{- with .Values.otelOperatorCr.clusterRole.annotations }}
38+
{{- include "otel-add-on.labels" $ | nindent 4 }}
39+
{{- with .clusterRole.annotations }}
3840
annotations:
3941
{{- toYaml . | nindent 4}}
4042
{{- end }}
4143
roleRef:
4244
apiGroup: rbac.authorization.k8s.io
4345
kind: ClusterRole
44-
name: {{ include "otel-add-on.name" . }}
46+
name: {{ .serviceAccount.name | default $.Release.Name }}
4547
subjects:
4648
- kind: ServiceAccount
47-
name: {{ .Values.otelOperatorCr.serviceAccount.name | default (include "otel-add-on.name" .) }}
48-
namespace: {{ .Values.otelOperatorCr.namespace | default .Release.Namespace }}
49+
name: {{ .serviceAccount.name | default $.Release.Name }}
50+
namespace: {{ .namespace | default $.Release.Namespace }}
4951
{{- end }}
52+
53+
{{- if and .targetAllocatorEnabled (.targetAllocator).serviceAccount }}
54+
---
55+
apiVersion: v1
56+
kind: ServiceAccount
57+
metadata:
58+
name: {{ .targetAllocator.serviceAccount }}
59+
namespace: {{ .namespace | default $.Release.Namespace }}
60+
labels:
61+
{{- include "otel-add-on.labels" $ | nindent 4 }}
62+
{{- with .serviceAccount.annotations }}
63+
annotations:
64+
{{- toYaml . | nindent 4}}
65+
{{- end }}
66+
{{- $crScope := . -}}
67+
{{- range .targetAllocatorClusterRoles }}
68+
---
69+
apiVersion: rbac.authorization.k8s.io/v1
70+
kind: ClusterRoleBinding
71+
metadata:
72+
name: {{ . }}
73+
labels:
74+
{{- include "otel-add-on.labels" $ | nindent 4 }}
75+
roleRef:
76+
apiGroup: rbac.authorization.k8s.io
77+
kind: ClusterRole
78+
name: {{ . }}
79+
subjects:
80+
- kind: ServiceAccount
81+
name: {{ $crScope.targetAllocator.serviceAccount }}
82+
namespace: {{ $crScope.namespace | default $.Release.Namespace }}
83+
{{- end }}
84+
{{- end }}
85+
5086
{{- end }}

0 commit comments

Comments
 (0)