Skip to content

Commit a862efa

Browse files
authored
chart: Add templates for relay node (#2453)
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 3042ef1 commit a862efa

9 files changed

+388
-4
lines changed

Diff for: charts/selenium-grid/CONFIGURATION.md

+51
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,57 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
499499
| edgeNode.initContainers | list | `[]` | It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option |
500500
| edgeNode.sidecars | list | `[]` | It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option |
501501
| edgeNode.videoRecorder | object | `{}` | Override specific video recording settings for edge node |
502+
| relayNode.enabled | bool | `false` | Enable relay nodes |
503+
| relayNode.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 |
504+
| relayNode.updateStrategy | object | `{"type":"RollingUpdate"}` | Global update strategy will be overwritten by individual component |
505+
| relayNode.replicas | int | `1` | Number of relay nodes |
506+
| relayNode.imageRegistry | string | `nil` | Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter) |
507+
| relayNode.imageName | string | `"node-base"` | Image of relay nodes |
508+
| relayNode.imageTag | string | `nil` | Image of relay nodes (this overwrites global.seleniumGrid.nodesImageTag) |
509+
| relayNode.imagePullPolicy | string | `"IfNotPresent"` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) |
510+
| relayNode.imagePullSecret | string | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) |
511+
| relayNode.ports | list | `[]` | Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.) |
512+
| relayNode.port | int | `5555` | Node component port |
513+
| relayNode.nodePort | string | `nil` | Node component expose NodePort |
514+
| relayNode.affinity | object | `{}` | Specify affinity for relay-node pods, this overwrites global.seleniumGrid.affinity parameter |
515+
| relayNode.topologySpreadConstraints | list | `[]` | Specify topologySpreadConstraints for relay-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter |
516+
| relayNode.annotations | object | `{}` | Annotations for relay-node pods |
517+
| relayNode.labels | object | `{}` | Labels for relay-node pods |
518+
| relayNode.shareProcessNamespace | bool | `true` | Shared process namespace for relay-node pods |
519+
| relayNode.resources.requests | object | `{"cpu":"1","memory":"1Gi"}` | Request resources for relay-node pods |
520+
| relayNode.resources.limits | object | `{"cpu":"1","memory":"2Gi"}` | Limit resources for relay-node pods |
521+
| relayNode.securityContext | object | `{}` | SecurityContext for relay-node container |
522+
| relayNode.tolerations | list | `[]` | Tolerations for relay-node pods |
523+
| relayNode.nodeSelector | object | `{}` | Node selector for relay-node pods |
524+
| relayNode.hostAliases | string | `nil` | Custom host aliases for relay nodes |
525+
| relayNode.extraEnvironmentVariables | string | `nil` | Custom environment variables for relay nodes |
526+
| relayNode.extraEnvFrom | string | `nil` | Custom environment variables by sourcing entire configMap, Secret, etc. for relay nodes |
527+
| relayNode.service.enabled | bool | `false` | Create a service for node |
528+
| relayNode.service.type | string | `"ClusterIP"` | Service type |
529+
| relayNode.service.loadBalancerIP | string | `""` | Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) |
530+
| relayNode.service.ports | string | `nil` | Extra ports exposed in node service |
531+
| relayNode.service.annotations | object | `{}` | Custom annotations for service |
532+
| relayNode.dshmVolumeSizeLimit | string | `""` | Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi") |
533+
| relayNode.priorityClassName | string | `""` | Priority class name for relay-node pods |
534+
| relayNode.startupProbe | object | `{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}` | Startup probe settings |
535+
| relayNode.readinessProbe | object | `{"enabled":false,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
536+
| relayNode.livenessProbe | object | `{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}` | Liveness probe settings |
537+
| relayNode.terminationGracePeriodSeconds | int | `30` | Time to wait for pod termination |
538+
| relayNode.deregisterLifecycle | string | `nil` | Define preStop command to shut down the relay node gracefully. This overwrites autoscaling.deregisterLifecycle |
539+
| relayNode.lifecycle | object | `{}` | Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any |
540+
| relayNode.extraVolumeMounts | list | `[]` | Extra volume mounts for relay-node container |
541+
| relayNode.extraVolumes | list | `[]` | Extra volumes for relay-node pod |
542+
| relayNode.nodeMaxSessions | string | `nil` | Override the number of max sessions per node |
543+
| relayNode.scaledOptions | string | `nil` | Override the scaled options for relay nodes |
544+
| relayNode.scaledJobOptions | string | `nil` | Override the scaledJobOptions for relay nodes |
545+
| relayNode.scaledObjectOptions | string | `nil` | Override the scaledObjectOptions for relay nodes |
546+
| relayNode.hpa.browserName | string | `"chrome"` | browserName from the capability |
547+
| relayNode.hpa.sessionBrowserName | string | `""` | sessionBrowserName if the browserName is different from the sessionBrowserName |
548+
| relayNode.hpa.platformName | string | `"Android"` | platformName from the capability |
549+
| relayNode.hpa.unsafeSsl | string | `"{{ template \"seleniumGrid.graphqlURL.unsafeSsl\" . }}"` | Skip check SSL when connecting to the Graphql endpoint |
550+
| relayNode.initContainers | list | `[]` | It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option |
551+
| relayNode.sidecars | list | `[]` | It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option |
552+
| relayNode.videoRecorder | object | `{}` | Override specific video recording settings for edge node |
502553
| videoRecorder.enabled | bool | `false` | Enable video recording in all browser nodes |
503554
| videoRecorder.name | string | `"video"` | Container name is set to resource specs |
504555
| videoRecorder.imageRegistry | string | `nil` | Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter) |

Diff for: charts/selenium-grid/templates/_nameHelpers.tpl

+7
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ Edge node fullname
140140
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-edge-node" $)) .Values.edgeNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
141141
{{- end -}}
142142

143+
{{/*
144+
Relay node fullname
145+
*/}}
146+
{{- define "seleniumGrid.relayNode.fullname" -}}
147+
{{- tpl (default (include "seleniumGrid.component.name" (list "selenium-relay-node" $)) .Values.relayNode.nameOverride) $ | trunc 63 | trimSuffix "-" -}}
148+
{{- end -}}
149+
143150
{{/*
144151
Ingress fullname
145152
*/}}
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{{- if and .Values.relayNode.enabled ((eq (include "seleniumGrid.useKEDA" .) "true") | ternary (eq .Values.autoscaling.scalingType "deployment") .Values.relayNode.deploymentEnabled) }}
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: {{ template "seleniumGrid.relayNode.fullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
app: {{ template "seleniumGrid.relayNode.fullname" . }}
9+
app.kubernetes.io/name: {{ template "seleniumGrid.relayNode.fullname" . }}
10+
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
11+
{{- with .Values.relayNode.labels }}
12+
{{- toYaml . | nindent 4 }}
13+
{{- end }}
14+
{{- with .Values.customLabels }}
15+
{{- toYaml . | nindent 4 }}
16+
{{- end }}
17+
spec:
18+
strategy:
19+
{{- template "seleniumGrid.updateStrategy" (list $.Values.relayNode $.Values.global.seleniumGrid) }}
20+
{{- if not (eq (include "seleniumGrid.useKEDA" $) "true") }}
21+
replicas: {{ .Values.relayNode.replicas }}
22+
{{- else }}
23+
replicas: {{ default $.Values.autoscaling.scaledOptions.minReplicaCount ($.Values.relayNode.scaledOptions).minReplicaCount }}
24+
{{- end }}
25+
revisionHistoryLimit: {{ .Values.global.seleniumGrid.revisionHistoryLimit }}
26+
selector:
27+
matchLabels:
28+
app: {{ template "seleniumGrid.relayNode.fullname" . }}
29+
app.kubernetes.io/instance: {{ .Release.Name }}
30+
{{- $podScope := deepCopy . -}}
31+
{{- $_ := set $podScope "name" (include "seleniumGrid.relayNode.fullname" .) -}}
32+
{{- $_ = set $podScope "node" .Values.relayNode -}}
33+
{{- $_ = set $podScope "recorder" (mergeOverwrite .Values.videoRecorder .Values.relayNode.videoRecorder) -}}
34+
{{- $_ = set $podScope "uploader" (get .Values.videoRecorder (.Values.videoRecorder.uploader.name | toString)) -}}
35+
{{- include "seleniumGrid.podTemplate" $podScope | nindent 2 }}
36+
{{- end }}

Diff for: charts/selenium-grid/templates/relay-node-hpa.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{{- if and .Values.relayNode.enabled (eq (include "seleniumGrid.useKEDA" .) "true") (eq .Values.autoscaling.scalingType "deployment") }}
2+
apiVersion: keda.sh/v1alpha1
3+
kind: ScaledObject
4+
metadata:
5+
name: {{ template "seleniumGrid.relayNode.fullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
annotations:
8+
{{- with .Values.autoscaling.annotations }}
9+
{{- toYaml . | nindent 4 }}
10+
{{- end }}
11+
labels:
12+
deploymentName: {{ template "seleniumGrid.relayNode.fullname" . }}
13+
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
14+
{{- include "seleniumGrid.autoscalingLabels" . | nindent 4 }}
15+
{{- with .Values.relayNode.labels }}
16+
{{- toYaml . | nindent 4 }}
17+
{{- end }}
18+
{{- with .Values.customLabels }}
19+
{{- toYaml . | nindent 4 }}
20+
{{- end }}
21+
spec:
22+
{{- $podScope := deepCopy . -}}
23+
{{- $_ := set $podScope "name" (include "seleniumGrid.relayNode.fullname" .) -}}
24+
{{- $_ = set $podScope "node" .Values.relayNode -}}
25+
{{- include "seleniumGrid.autoscalingTemplate" $podScope | nindent 2 }}
26+
{{- end }}
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{{- if and .Values.relayNode.enabled (include "seleniumGrid.useKEDA" .) (eq .Values.autoscaling.scalingType "job") }}
2+
apiVersion: keda.sh/v1alpha1
3+
kind: ScaledJob
4+
metadata:
5+
name: {{ template "seleniumGrid.relayNode.fullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
annotations:
8+
{{- with .Values.autoscaling.annotations }}
9+
{{- toYaml . | nindent 4 }}
10+
{{- end }}
11+
labels:
12+
app: {{ template "seleniumGrid.relayNode.fullname" . }}
13+
app.kubernetes.io/name: {{ template "seleniumGrid.relayNode.fullname" . }}
14+
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
15+
{{- include "seleniumGrid.autoscalingLabels" . | nindent 4 }}
16+
{{- with .Values.relayNode.labels }}
17+
{{- toYaml . | nindent 4 }}
18+
{{- end }}
19+
{{- with .Values.customLabels }}
20+
{{- toYaml . | nindent 4 }}
21+
{{- end }}
22+
spec:
23+
{{- $podScope := deepCopy . -}}
24+
{{- $_ := set $podScope "name" (include "seleniumGrid.relayNode.fullname" .) -}}
25+
{{- $_ = set $podScope "node" .Values.relayNode -}}
26+
{{- $_ = set $podScope "recorder" (mergeOverwrite .Values.videoRecorder .Values.relayNode.videoRecorder) -}}
27+
{{- $_ = set $podScope "uploader" (get .Values.videoRecorder (.Values.videoRecorder.uploader.name | toString)) -}}
28+
{{- $_ = set $podScope "podTemplate" (include "seleniumGrid.podTemplate" $podScope | fromYaml) }}
29+
{{- include "seleniumGrid.autoscalingTemplate" $podScope | nindent 2 }}
30+
{{- end }}
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{{- if and .Values.relayNode.enabled .Values.relayNode.service.enabled }}
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: {{ template "seleniumGrid.relayNode.fullname" . }}
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
name: {{ template "seleniumGrid.relayNode.fullname" . }}
9+
{{- include "seleniumGrid.commonLabels" . | nindent 4 }}
10+
{{- with .Values.relayNode.service.annotations }}
11+
annotations:
12+
{{- toYaml . | nindent 4 }}
13+
{{- end }}
14+
spec:
15+
type: {{ .Values.relayNode.service.type }}
16+
selector:
17+
app: {{ template "seleniumGrid.relayNode.fullname" . }}
18+
app.kubernetes.io/instance: {{ .Release.Name }}
19+
{{- if and (eq .Values.relayNode.service.type "LoadBalancer") (.Values.relayNode.service.loadBalancerIP) }}
20+
loadBalancerIP: {{ .Values.relayNode.service.loadBalancerIP }}
21+
{{- end }}
22+
ports:
23+
- name: tcp-chrome
24+
protocol: TCP
25+
port: {{ .Values.relayNode.port }}
26+
targetPort: {{ .Values.relayNode.port }}
27+
{{- if and (eq $.Values.relayNode.service.type "NodePort") .Values.relayNode.nodePort }}
28+
nodePort: {{ .Values.relayNode.nodePort }}
29+
{{- end }}
30+
{{- with .Values.relayNode.service.ports }}
31+
{{- range . }}
32+
- name: {{ .name }}
33+
port: {{ .port }}
34+
targetPort: {{ .targetPort }}
35+
{{- if .protocol }}
36+
protocol: {{ .protocol }}
37+
{{- end }}
38+
{{- if and (eq $.Values.relayNode.service.type "NodePort") .nodePort }}
39+
nodePort: {{ .nodePort }}
40+
{{- end }}
41+
{{- end }}
42+
{{- end }}
43+
{{- end }}

0 commit comments

Comments
 (0)