Skip to content

Commit bea0769

Browse files
authored
K8s: Multiple nodes browser in Helm configs (#2475)
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 6dc901e commit bea0769

23 files changed

+436
-294
lines changed

.keda/scalers/selenium-grid-scaler.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ metadata:
5555
name: selenium-grid-chrome-scaledobject
5656
namespace: keda
5757
labels:
58-
deploymentName: selenium-chrome-node
58+
deploymentName: selenium-node-chrome
5959
spec:
6060
maxReplicaCount: 8
6161
scaleTargetRef:
62-
name: selenium-chrome-node
62+
name: selenium-node-chrome
6363
triggers:
6464
- type: selenium-grid
6565
metadata:
@@ -78,11 +78,11 @@ metadata:
7878
name: selenium-grid-firefox-scaledobject
7979
namespace: keda
8080
labels:
81-
deploymentName: selenium-firefox-node
81+
deploymentName: selenium-node-firefox
8282
spec:
8383
maxReplicaCount: 8
8484
scaleTargetRef:
85-
name: selenium-firefox-node
85+
name: selenium-node-firefox
8686
triggers:
8787
- type: selenium-grid
8888
metadata:
@@ -99,11 +99,11 @@ metadata:
9999
name: selenium-grid-edge-scaledobject
100100
namespace: keda
101101
labels:
102-
deploymentName: selenium-edge-node
102+
deploymentName: selenium-node-edge
103103
spec:
104104
maxReplicaCount: 8
105105
scaleTargetRef:
106-
name: selenium-edge-node
106+
name: selenium-node-edge
107107
triggers:
108108
- type: selenium-grid
109109
metadata:
@@ -121,11 +121,11 @@ metadata:
121121
name: selenium-grid-chrome-scaledobject
122122
namespace: keda
123123
labels:
124-
deploymentName: selenium-chrome-node
124+
deploymentName: selenium-node-chrome
125125
spec:
126126
maxReplicaCount: 8
127127
scaleTargetRef:
128-
name: selenium-chrome-node
128+
name: selenium-node-chrome
129129
triggers:
130130
- type: selenium-grid
131131
metadata:
@@ -143,11 +143,11 @@ metadata:
143143
name: selenium-grid-chrome-91-scaledobject
144144
namespace: keda
145145
labels:
146-
deploymentName: selenium-chrome-node-91
146+
deploymentName: selenium-node-chrome-91
147147
spec:
148148
maxReplicaCount: 8
149149
scaleTargetRef:
150-
name: selenium-chrome-node-91
150+
name: selenium-node-chrome-91
151151
triggers:
152152
- type: selenium-grid
153153
metadata:
@@ -163,11 +163,11 @@ metadata:
163163
name: selenium-grid-chrome-90-scaledobject
164164
namespace: keda
165165
labels:
166-
deploymentName: selenium-chrome-node-90
166+
deploymentName: selenium-node-chrome-90
167167
spec:
168168
maxReplicaCount: 8
169169
scaleTargetRef:
170-
name: selenium-chrome-node-90
170+
name: selenium-node-chrome-90
171171
triggers:
172172
- type: selenium-grid
173173
metadata:
@@ -219,11 +219,11 @@ metadata:
219219
name: selenium-grid-chrome-scaledobject
220220
namespace: keda
221221
labels:
222-
deploymentName: selenium-chrome-node
222+
deploymentName: selenium-node-chrome
223223
spec:
224224
maxReplicaCount: 8
225225
scaleTargetRef:
226-
name: selenium-chrome-node
226+
name: selenium-node-chrome
227227
triggers:
228228
- type: selenium-grid
229229
metadata:

charts/selenium-grid/CONFIGURATION.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,10 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
348348
| autoscaling.scaledObjectOptions.scaleTargetRef.kind | string | `"Deployment"` | Target reference for KEDA ScaledObject |
349349
| autoscaling.terminationGracePeriodSeconds | int | `3600` | Define terminationGracePeriodSeconds for scalingType "deployment". Period for `deregisterLifecycle` to gracefully shut down the node before force terminating it |
350350
| autoscaling.deregisterLifecycle | string | `nil` | Define preStop command to shut down the node gracefully when scalingType is set to "deployment" |
351+
| crossBrowsers.chromeNode | list | `[{"nameOverride":null}]` | Additional chrome nodes, array of objects with the same structure as `chromeNode` |
352+
| crossBrowsers.firefoxNode | list | `[{"nameOverride":null}]` | Additional firefox nodes, array of objects with the same structure as `firefoxNode` |
353+
| crossBrowsers.edgeNode | list | `[{"nameOverride":null}]` | Additional edge nodes, array of objects with the same structure as `edgeNode` |
354+
| crossBrowsers.relayNode | list | `[{"nameOverride":null}]` | Additional release nodes, array of objects with the same structure as `relayNode` |
351355
| chromeNode.enabled | bool | `true` | Enable chrome nodes |
352356
| chromeNode.deploymentEnabled | bool | `true` | NOTE: Only used when autoscaling.enabled is false Enable creation of Deployment true (default) - if you want long-living pods false - for provisioning your own custom type such as Jobs |
353357
| chromeNode.updateStrategy | object | `{"type":"RollingUpdate"}` | Global update strategy will be overwritten by individual component |
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
crossBrowsers:
2+
chromeNode:
3+
# Keep the first iteration with latest version of Chrome
4+
- nameOverride:
5+
- nameOverride: '{{ $.Release.Name }}-node-chrome-130'
6+
imageTag: '130.0'
7+
hpa:
8+
browserVersion: '130.0'
9+
- nameOverride: '{{ $.Release.Name }}-node-chrome-129'
10+
imageTag: '129.0'
11+
hpa:
12+
browserVersion: '129.0'
13+
- nameOverride: '{{ $.Release.Name }}-node-chrome-128'
14+
imageTag: '128.0'
15+
hpa:
16+
browserVersion: '128.0'
17+
firefoxNode:
18+
# Keep the first iteration with latest version of Firefox
19+
- nameOverride:
20+
- nameOverride: '{{ $.Release.Name }}-node-firefox-130'
21+
imageTag: '130.0'
22+
hpa:
23+
browserVersion: '130.0'
24+
- nameOverride: '{{ $.Release.Name }}-node-firefox-129'
25+
imageTag: '129.0'
26+
hpa:
27+
browserVersion: '129.0'
28+
- nameOverride: '{{ $.Release.Name }}-node-firefox-128'
29+
imageTag: '128.0'
30+
hpa:
31+
browserVersion: '128.0'
32+
edgeNode:
33+
# Keep the first iteration with latest version of Edge
34+
- nameOverride:
35+
- nameOverride: '{{ $.Release.Name }}-node-edge-130'
36+
imageTag: '130.0'
37+
hpa:
38+
browserVersion: '130.0'
39+
- nameOverride: '{{ $.Release.Name }}-node-edge-129'
40+
imageTag: '129.0'
41+
hpa:
42+
browserVersion: '129.0'
43+
- nameOverride: '{{ $.Release.Name }}-node-edge-128'
44+
imageTag: '128.0'
45+
hpa:
46+
browserVersion: '128.0'

charts/selenium-grid/templates/_nameHelpers.tpl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,28 +123,36 @@ SessionQueue fullname
123123
Chrome node fullname
124124
*/}}
125125
{{- define "seleniumGrid.chromeNode.fullname" -}}
126-
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-chrome-node" $)) .Values.chromeNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
126+
{{- $component := index . 0 }}
127+
{{- $root := index . 1 }}
128+
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-node-chrome" $root)) $component.nameOverride) $root | trunc 63 | trimSuffix "-" -}}
127129
{{- end -}}
128130

129131
{{/*
130132
Firefox node fullname
131133
*/}}
132134
{{- define "seleniumGrid.firefoxNode.fullname" -}}
133-
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-firefox-node" $)) .Values.firefoxNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
135+
{{- $component := index . 0 }}
136+
{{- $root := index . 1 }}
137+
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-node-firefox" $root)) $component.nameOverride) $root | trunc 63 | trimSuffix "-" -}}
134138
{{- end -}}
135139

136140
{{/*
137141
Edge node fullname
138142
*/}}
139143
{{- define "seleniumGrid.edgeNode.fullname" -}}
140-
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-edge-node" $)) .Values.edgeNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
144+
{{- $component := index . 0 }}
145+
{{- $root := index . 1 }}
146+
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-node-edge" $root)) $component.nameOverride) $root | trunc 63 | trimSuffix "-" -}}
141147
{{- end -}}
142148

143149
{{/*
144150
Relay node fullname
145151
*/}}
146152
{{- define "seleniumGrid.relayNode.fullname" -}}
147-
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-relay-node" $)) .Values.relayNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
153+
{{- $component := index . 0 }}
154+
{{- $root := index . 1 }}
155+
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-node-relay" $root)) $component.nameOverride) $root | trunc 63 | trimSuffix "-" -}}
148156
{{- end -}}
149157

150158
{{/*
Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,40 @@
1-
{{- if and .Values.chromeNode.enabled ((eq (include "seleniumGrid.useKEDA" .) "true") | ternary (eq .Values.autoscaling.scalingType "deployment") .Values.chromeNode.deploymentEnabled) }}
1+
{{- range $i, $newNode := .Values.crossBrowsers.chromeNode }}
2+
{{- $nodeConfig := merge $newNode $.Values.chromeNode -}}
3+
{{- if and $nodeConfig.enabled ((eq (include "seleniumGrid.useKEDA" $) "true") | ternary (eq $.Values.autoscaling.scalingType "deployment") $nodeConfig.deploymentEnabled) }}
24
apiVersion: apps/v1
35
kind: Deployment
46
metadata:
5-
name: {{ template "seleniumGrid.chromeNode.fullname" . }}
6-
namespace: {{ .Release.Namespace }}
7+
name: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
8+
namespace: {{ $.Release.Namespace }}
79
labels:
8-
app: {{ template "seleniumGrid.chromeNode.fullname" . }}
9-
app.kubernetes.io/name: {{ template "seleniumGrid.chromeNode.fullname" . }}
10-
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
11-
{{- with .Values.chromeNode.labels }}
10+
app: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
11+
app.kubernetes.io/name: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
12+
{{- include "seleniumGrid.commonLabels" $ | nindent 4 }}
13+
{{- with $nodeConfig.labels }}
1214
{{- toYaml . | nindent 4 }}
1315
{{- end }}
14-
{{- with .Values.customLabels }}
16+
{{- with $.Values.customLabels }}
1517
{{- toYaml . | nindent 4 }}
1618
{{- end }}
1719
spec:
1820
strategy:
19-
{{- template "seleniumGrid.updateStrategy" (list $.Values.chromeNode $.Values.global.seleniumGrid) }}
21+
{{- template "seleniumGrid.updateStrategy" (list $nodeConfig $.Values.global.seleniumGrid) }}
2022
{{- if not (eq (include "seleniumGrid.useKEDA" $) "true") }}
21-
replicas: {{ .Values.chromeNode.replicas }}
23+
replicas: {{ $nodeConfig.replicas }}
2224
{{- else }}
23-
replicas: {{ default $.Values.autoscaling.scaledOptions.minReplicaCount ($.Values.chromeNode.scaledOptions).minReplicaCount }}
25+
replicas: {{ default $.Values.autoscaling.scaledOptions.minReplicaCount ($nodeConfig.scaledOptions).minReplicaCount }}
2426
{{- end }}
25-
revisionHistoryLimit: {{ .Values.global.seleniumGrid.revisionHistoryLimit }}
27+
revisionHistoryLimit: {{ $.Values.global.seleniumGrid.revisionHistoryLimit }}
2628
selector:
2729
matchLabels:
28-
app: {{ template "seleniumGrid.chromeNode.fullname" . }}
29-
app.kubernetes.io/instance: {{ .Release.Name }}
30-
{{- $podScope := deepCopy . -}}
31-
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" .) -}}
32-
{{- $_ = set $podScope "node" .Values.chromeNode -}}
33-
{{- $_ = set $podScope "recorder" (mergeOverwrite .Values.videoRecorder .Values.chromeNode.videoRecorder) -}}
34-
{{- $_ = set $podScope "uploader" (get .Values.videoRecorder ($podScope.recorder.uploader.name | toString)) -}}
30+
app: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
31+
app.kubernetes.io/instance: {{ $.Release.Name }}
32+
{{- $podScope := deepCopy $ -}}
33+
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" (list $nodeConfig $)) -}}
34+
{{- $_ = set $podScope "node" $nodeConfig -}}
35+
{{- $_ = set $podScope "recorder" (mergeOverwrite $.Values.videoRecorder $nodeConfig.videoRecorder) -}}
36+
{{- $_ = set $podScope "uploader" (get $.Values.videoRecorder ($podScope.recorder.uploader.name | toString)) -}}
3537
{{- include "seleniumGrid.podTemplate" $podScope | nindent 2 }}
38+
---
39+
{{- end }}
3640
{{- end }}
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
1-
{{- if and .Values.chromeNode.enabled (eq (include "seleniumGrid.useKEDA" .) "true") (eq .Values.autoscaling.scalingType "deployment") }}
1+
{{- range $i, $newNode := .Values.crossBrowsers.chromeNode }}
2+
{{- $nodeConfig := merge $newNode $.Values.chromeNode -}}
3+
{{- if and $nodeConfig.enabled (eq (include "seleniumGrid.useKEDA" $) "true") (eq $.Values.autoscaling.scalingType "deployment") }}
24
apiVersion: keda.sh/v1alpha1
35
kind: ScaledObject
46
metadata:
5-
name: {{ template "seleniumGrid.chromeNode.fullname" . }}
6-
namespace: {{ .Release.Namespace }}
7+
name: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
8+
namespace: {{ $.Release.Namespace }}
79
annotations:
8-
{{- with .Values.autoscaling.annotations }}
10+
{{- with $.Values.autoscaling.annotations }}
911
{{- toYaml . | nindent 4 }}
1012
{{- end }}
1113
labels:
12-
deploymentName: {{ template "seleniumGrid.chromeNode.fullname" . }}
13-
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
14-
{{- include "seleniumGrid.autoscalingLabels" . | nindent 4 }}
15-
{{- with .Values.chromeNode.labels }}
14+
deploymentName: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
15+
{{- include "seleniumGrid.commonLabels" $ | nindent 4 }}
16+
{{- include "seleniumGrid.autoscalingLabels" $ | nindent 4 }}
17+
{{- with $nodeConfig.labels }}
1618
{{- toYaml . | nindent 4 }}
1719
{{- end }}
18-
{{- with .Values.customLabels }}
20+
{{- with $.Values.customLabels }}
1921
{{- toYaml . | nindent 4 }}
2022
{{- end }}
2123
spec:
22-
{{- $podScope := deepCopy . -}}
23-
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" .) -}}
24-
{{- $_ = set $podScope "node" .Values.chromeNode -}}
24+
{{- $podScope := deepCopy $ -}}
25+
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" (list $nodeConfig $)) -}}
26+
{{- $_ = set $podScope "node" $nodeConfig -}}
2527
{{- include "seleniumGrid.autoscalingTemplate" $podScope | nindent 2 }}
28+
---
29+
{{- end }}
2630
{{- end }}
Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1-
{{- if and .Values.chromeNode.enabled (include "seleniumGrid.useKEDA" .) (eq .Values.autoscaling.scalingType "job") }}
1+
{{- range $i, $newNode := .Values.crossBrowsers.chromeNode }}
2+
{{- $nodeConfig := merge $newNode $.Values.chromeNode -}}
3+
{{- if and $nodeConfig.enabled (include "seleniumGrid.useKEDA" $) (eq $.Values.autoscaling.scalingType "job") }}
24
apiVersion: keda.sh/v1alpha1
35
kind: ScaledJob
46
metadata:
5-
name: {{ template "seleniumGrid.chromeNode.fullname" . }}
6-
namespace: {{ .Release.Namespace }}
7+
name: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
8+
namespace: {{ $.Release.Namespace }}
79
annotations:
8-
{{- with .Values.autoscaling.annotations }}
10+
{{- with $.Values.autoscaling.annotations }}
911
{{- toYaml . | nindent 4 }}
1012
{{- end }}
1113
labels:
12-
app: {{ template "seleniumGrid.chromeNode.fullname" . }}
13-
app.kubernetes.io/name: {{ template "seleniumGrid.chromeNode.fullname" . }}
14-
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
15-
{{- include "seleniumGrid.autoscalingLabels" . | nindent 4 }}
16-
{{- with .Values.chromeNode.labels }}
14+
app: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
15+
app.kubernetes.io/name: {{ template "seleniumGrid.chromeNode.fullname" (list $nodeConfig $) }}
16+
{{- include "seleniumGrid.commonLabels" $ | nindent 4 }}
17+
{{- include "seleniumGrid.autoscalingLabels" $ | nindent 4 }}
18+
{{- with $nodeConfig.labels }}
1719
{{- toYaml . | nindent 4 }}
1820
{{- end }}
19-
{{- with .Values.customLabels }}
21+
{{- with $.Values.customLabels }}
2022
{{- toYaml . | nindent 4 }}
2123
{{- end }}
2224
spec:
23-
{{- $podScope := deepCopy . -}}
24-
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" .) -}}
25-
{{- $_ = set $podScope "node" .Values.chromeNode -}}
26-
{{- $_ = set $podScope "recorder" (mergeOverwrite .Values.videoRecorder .Values.chromeNode.videoRecorder) -}}
27-
{{- $_ = set $podScope "uploader" (get .Values.videoRecorder ($podScope.recorder.uploader.name | toString)) -}}
25+
{{- $podScope := deepCopy $ -}}
26+
{{- $_ := set $podScope "name" (include "seleniumGrid.chromeNode.fullname" (list $nodeConfig $)) -}}
27+
{{- $_ = set $podScope "node" $nodeConfig -}}
28+
{{- $_ = set $podScope "recorder" (mergeOverwrite $.Values.videoRecorder $nodeConfig.videoRecorder) -}}
29+
{{- $_ = set $podScope "uploader" (get $.Values.videoRecorder ($podScope.recorder.uploader.name | toString)) -}}
2830
{{- $_ = set $podScope "podTemplate" (include "seleniumGrid.podTemplate" $podScope | fromYaml) }}
2931
{{- include "seleniumGrid.autoscalingTemplate" $podScope | nindent 2 }}
32+
---
33+
{{- end }}
3034
{{- end }}

0 commit comments

Comments
 (0)