Skip to content

Commit e2abe9f

Browse files
authored
K8s: Node enable readiness probe checks status registered to Hub (#2833)
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent c4f28c4 commit e2abe9f

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

charts/selenium-grid/CONFIGURATION.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
3838
| global.seleniumGrid.imagePullSecret | string | `""` | Pull secret for all components, can be overridden individually |
3939
| global.seleniumGrid.logLevel | string | `"INFO"` | Log level for all components. Possible values describe here: https://www.selenium.dev/documentation/grid/configuration/cli_options/#logging |
4040
| global.seleniumGrid.defaultNodeStartupProbe | string | `"exec"` | Set default startup probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet |
41+
| global.seleniumGrid.defaultNodeReadinessProbe | string | `"exec"` | Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet |
4142
| global.seleniumGrid.defaultNodeLivenessProbe | string | `"exec"` | Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet |
4243
| global.seleniumGrid.defaultComponentLivenessProbe | string | `"exec"` | Set default liveness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet |
4344
| global.seleniumGrid.stdoutProbeLog | bool | `false` | Probe logs output can be retrieved using `kubectl logs`. Noted: this will not work if shareProcessNamespace is enabled |
@@ -147,6 +148,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
147148
| nodeConfigMap.extraScripts."nodeGridUrl.sh" | string | `""` | |
148149
| nodeConfigMap.extraScripts."nodePreStop.sh" | string | `""` | |
149150
| nodeConfigMap.extraScripts."nodeProbe.sh" | string | `""` | |
151+
| nodeConfigMap.extraScripts."nodeProbeReadiness.sh" | string | `""` | |
150152
| nodeConfigMap.scriptVolumeMountName | string | `nil` | Name of volume mount is used to mount scripts in the ConfigMap |
151153
| nodeConfigMap.leftoversCleanup.enabled | bool | `false` | Enable feature automatic browser leftovers cleanup stuck browser processes, tmp files |
152154
| nodeConfigMap.leftoversCleanup.jobIntervalInSecs | int | `3600` | Interval in seconds to run the cleanup job |
@@ -454,7 +456,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
454456
| chromeNode.dshmVolumeSizeLimit | string | `""` | Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi") |
455457
| chromeNode.priorityClassName | string | `""` | Priority class name for chrome-node pods |
456458
| chromeNode.startupProbe | object | `{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}` | Startup probe settings |
457-
| chromeNode.readinessProbe | object | `{"enabled":false,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
459+
| chromeNode.readinessProbe | object | `{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
458460
| chromeNode.livenessProbe | object | `{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}` | Liveness probe settings |
459461
| chromeNode.terminationGracePeriodSeconds | int | `30` | Time to wait for pod termination |
460462
| chromeNode.deregisterLifecycle | string | `nil` | Define preStop command to shut down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle |
@@ -512,7 +514,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
512514
| firefoxNode.dshmVolumeSizeLimit | string | `"2Gi"` | Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi") |
513515
| firefoxNode.priorityClassName | string | `""` | Priority class name for firefox-node pods |
514516
| firefoxNode.startupProbe | object | `{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}` | Startup probe settings |
515-
| firefoxNode.readinessProbe | object | `{"enabled":false,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
517+
| firefoxNode.readinessProbe | object | `{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
516518
| firefoxNode.livenessProbe | object | `{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}` | Liveness probe settings |
517519
| firefoxNode.terminationGracePeriodSeconds | int | `30` | Time to wait for pod termination |
518520
| firefoxNode.deregisterLifecycle | string | `nil` | Define preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle |
@@ -570,7 +572,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
570572
| edgeNode.dshmVolumeSizeLimit | string | `""` | Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi") |
571573
| edgeNode.priorityClassName | string | `""` | Priority class name for edge-node pods |
572574
| edgeNode.startupProbe | object | `{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}` | Startup probe settings |
573-
| edgeNode.readinessProbe | object | `{"enabled":false,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
575+
| edgeNode.readinessProbe | object | `{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
574576
| edgeNode.livenessProbe | object | `{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}` | Liveness probe settings |
575577
| edgeNode.terminationGracePeriodSeconds | int | `30` | Time to wait for pod termination |
576578
| edgeNode.deregisterLifecycle | string | `nil` | Define preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle |
@@ -629,7 +631,7 @@ A Helm chart for creating a Selenium Grid Server in Kubernetes
629631
| relayNode.dshmVolumeSizeLimit | string | `""` | Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi") |
630632
| relayNode.priorityClassName | string | `""` | Priority class name for relay-node pods |
631633
| relayNode.startupProbe | object | `{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}` | Startup probe settings |
632-
| relayNode.readinessProbe | object | `{"enabled":false,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
634+
| relayNode.readinessProbe | object | `{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}` | Readiness probe settings |
633635
| relayNode.livenessProbe | object | `{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}` | Liveness probe settings |
634636
| relayNode.terminationGracePeriodSeconds | int | `30` | Time to wait for pod termination |
635637
| relayNode.deregisterLifecycle | string | `nil` | Define preStop command to shut down the relay node gracefully. This overwrites autoscaling.deregisterLifecycle |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/usr/bin/env bash
2+
3+
probe_name="Probe.${1:-"Readiness"}"
4+
ts_format=${SE_LOG_TIMESTAMP_FORMAT:-"%Y-%m-%d %H:%M:%S,%3N"}
5+
ENDPOINT="${SE_SERVER_PROTOCOL:-"http"}://localhost:${SE_NODE_PORT:-"5555"}/status"
6+
7+
response=$(curl -skSL --noproxy "*" "${ENDPOINT}")
8+
9+
# Validate the JSON response
10+
# From v4.31.0 - [grid] Expose register status via Node status response (#15448)
11+
if echo "$response" | jq -e '.value.registered == true' > /dev/null; then
12+
echo "$(date -u +"${ts_format}") [${probe_name}] - Readiness check passed: Node is registered."
13+
else
14+
echo "$(date -u +"${ts_format}") [${probe_name}] - Readiness check failed: Node is not registered."
15+
exit 1
16+
fi

charts/selenium-grid/templates/_helpers.tpl

+4-1
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,10 @@ template:
491491
{{- with .node.readinessProbe }}
492492
readinessProbe:
493493
{{- if (ne (include "seleniumGrid.probe.fromUserDefine" (dict "values" . "root" $)) "{}") }}
494-
{{- include "seleniumGrid.probe.fromUserDefine" (dict "values" . "root" $) | nindent 12 }}
494+
{{- include "seleniumGrid.probe.fromUserDefine" (dict "values" . "root" $) | nindent 10 }}
495+
{{- else if eq $.Values.global.seleniumGrid.defaultNodeReadinessProbe "exec" }}
496+
exec:
497+
command: ["bash", "-c", "{{ $.Values.nodeConfigMap.extraScriptsDirectory }}/nodeProbeReadiness.sh Readiness {{ include "seleniumGrid.probe.stdout" $ }}"]
495498
{{- else }}
496499
httpGet:
497500
scheme: {{ default (include "seleniumGrid.probe.httpGet.schema" $) .schema }}

charts/selenium-grid/values.yaml

+8-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ global:
2121
# -- Set default startup probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
2222
defaultNodeStartupProbe: exec
2323
# -- Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
24+
defaultNodeReadinessProbe: exec
25+
# -- Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
2426
defaultNodeLivenessProbe: exec
2527
# -- Set default liveness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
2628
defaultComponentLivenessProbe: exec
@@ -328,6 +330,8 @@ nodeConfigMap:
328330
nodePreStop.sh: ""
329331
# -- Key to set contents for script file via --set-file
330332
nodeProbe.sh: ""
333+
# -- Key to set contents for script file via --set-file
334+
nodeProbeReadiness.sh: ""
331335
# -- Name of volume mount is used to mount scripts in the ConfigMap
332336
scriptVolumeMountName:
333337
leftoversCleanup:
@@ -1235,7 +1239,7 @@ chromeNode:
12351239

12361240
# -- Readiness probe settings
12371241
readinessProbe:
1238-
enabled: false
1242+
enabled: true
12391243
path: /status
12401244
initialDelaySeconds: 10
12411245
failureThreshold: 10
@@ -1431,7 +1435,7 @@ firefoxNode:
14311435

14321436
# -- Readiness probe settings
14331437
readinessProbe:
1434-
enabled: false
1438+
enabled: true
14351439
path: /status
14361440
initialDelaySeconds: 10
14371441
failureThreshold: 10
@@ -1627,7 +1631,7 @@ edgeNode:
16271631

16281632
# -- Readiness probe settings
16291633
readinessProbe:
1630-
enabled: false
1634+
enabled: true
16311635
path: /status
16321636
initialDelaySeconds: 10
16331637
failureThreshold: 10
@@ -1824,7 +1828,7 @@ relayNode:
18241828

18251829
# -- Readiness probe settings
18261830
readinessProbe:
1827-
enabled: false
1831+
enabled: true
18281832
path: /status
18291833
initialDelaySeconds: 10
18301834
failureThreshold: 10

0 commit comments

Comments
 (0)