From fe28e0c38ff0d1505e2f7e823aa75f6501f5a08b Mon Sep 17 00:00:00 2001 From: Andrea Scarpino Date: Thu, 24 Feb 2022 09:59:22 +0100 Subject: [PATCH] Selenium Grid Helm Chart (#1508) * First version of Helm chart for Selenium Grid server * Changelog added Signed-off-by: Pedro Miranda * Version 0.2.0 implemented (See changelog) Signed-off-by: Pedro Miranda * Disable components isolation by default Signed-off-by: Pedro Miranda * Update image tag to 4.0.0-rc-1-prerelease-20210804 * Add support for tolerations * Add support for nodeSelector * Drop Opera from the chart * Fix empty value for tolerations * Add Edge nodes * Allow to add extra labels to hub, chrome, firefox and edge nodes * Update to 4.0.0-rc-1-prerelease-20210823 * Update to 4.0.0-rc-1-20210902 * Update to 4.0.0-rc-2-20210930 * Update to 4.0.0-rc-3-20211010 * Update to 4.0.0-20211013 * Update to 4.0.0-20211025 * Update to 4.1.0-20211123 * Update to 4.1.2-20220131 * Update to 4.1.2-20220208 * Fix queue component name (backport of 9353a18e) * Update to 4.1.2-20220217 * Update chart/selenium-grid/README.md Co-authored-by: Diego Molina Co-authored-by: Pedro Miranda Co-authored-by: Diego Molina --- chart/selenium-grid/.helmignore | 23 + chart/selenium-grid/CHANGELOG.md | 38 ++ chart/selenium-grid/Chart.yaml | 6 + chart/selenium-grid/README.md | 183 ++++++++ chart/selenium-grid/templates/NOTES.txt | 22 + chart/selenium-grid/templates/_helpers.tpl | 73 ++++ .../templates/chrome-node-deployment.yaml | 67 +++ .../templates/chrome-node-service.yaml | 23 + .../templates/distributor-deployment.yaml | 59 +++ .../templates/distributor-service.yaml | 25 ++ .../templates/edge-node-deployment.yaml | 67 +++ .../templates/edge-node-service.yaml | 23 + .../templates/event-bus-configmap.yaml | 20 + .../templates/event-bus-deployment.yaml | 51 +++ .../templates/event-bus-service.yaml | 33 ++ .../templates/firefox-node-deployment.yaml | 67 +++ .../templates/firefox-node-service.yaml | 23 + .../templates/hub-deployment.yaml | 76 ++++ .../selenium-grid/templates/hub-service.yaml | 33 ++ .../templates/router-deployment.yaml | 82 ++++ .../templates/router-service.yaml | 25 ++ .../templates/session-map-deployment.yaml | 50 +++ .../templates/session-map-service.yaml | 25 ++ .../templates/session-queuer-deployment.yaml | 50 +++ .../templates/session-queuer-service.yaml | 25 ++ chart/selenium-grid/values.yaml | 393 ++++++++++++++++++ 26 files changed, 1562 insertions(+) create mode 100644 chart/selenium-grid/.helmignore create mode 100644 chart/selenium-grid/CHANGELOG.md create mode 100644 chart/selenium-grid/Chart.yaml create mode 100644 chart/selenium-grid/README.md create mode 100644 chart/selenium-grid/templates/NOTES.txt create mode 100644 chart/selenium-grid/templates/_helpers.tpl create mode 100644 chart/selenium-grid/templates/chrome-node-deployment.yaml create mode 100644 chart/selenium-grid/templates/chrome-node-service.yaml create mode 100644 chart/selenium-grid/templates/distributor-deployment.yaml create mode 100644 chart/selenium-grid/templates/distributor-service.yaml create mode 100644 chart/selenium-grid/templates/edge-node-deployment.yaml create mode 100644 chart/selenium-grid/templates/edge-node-service.yaml create mode 100644 chart/selenium-grid/templates/event-bus-configmap.yaml create mode 100644 chart/selenium-grid/templates/event-bus-deployment.yaml create mode 100644 chart/selenium-grid/templates/event-bus-service.yaml create mode 100644 chart/selenium-grid/templates/firefox-node-deployment.yaml create mode 100644 chart/selenium-grid/templates/firefox-node-service.yaml create mode 100644 chart/selenium-grid/templates/hub-deployment.yaml create mode 100644 chart/selenium-grid/templates/hub-service.yaml create mode 100644 chart/selenium-grid/templates/router-deployment.yaml create mode 100644 chart/selenium-grid/templates/router-service.yaml create mode 100644 chart/selenium-grid/templates/session-map-deployment.yaml create mode 100644 chart/selenium-grid/templates/session-map-service.yaml create mode 100644 chart/selenium-grid/templates/session-queuer-deployment.yaml create mode 100644 chart/selenium-grid/templates/session-queuer-service.yaml create mode 100644 chart/selenium-grid/values.yaml diff --git a/chart/selenium-grid/.helmignore b/chart/selenium-grid/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/chart/selenium-grid/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/chart/selenium-grid/CHANGELOG.md b/chart/selenium-grid/CHANGELOG.md new file mode 100644 index 000000000..e250ddbf0 --- /dev/null +++ b/chart/selenium-grid/CHANGELOG.md @@ -0,0 +1,38 @@ +# Change Log + +All notable changes to this helm chart will be documented in this file. + +## :heavy_check_mark: 0.3.0 + +### Added +- Support for Edge nodes. +- Support for `nodeSelector`. +- Support for `tolerations`. +- Allow to add additional labels to the hub, edge, firefox and chrome nodes. +- Fix queue component name (#1290) + +### Changed +- Update image tag to 4.1.2-20220217 + +### Removed +- Opera nodes + +## :heavy_check_mark: 0.2.0 + +### Added +- `CHANGELOG.md` + +### Changed +- Added `global` block to be able to specify component's image tag globally. +- DSHM's volume size customizable. +- Service type and service annotations are now customizable. + +### Fixed +- Services won't be created if nodes are disabled. + +## :heavy_check_mark: 0.1.0 + +### Added +- Selenium grid components separated. +- Selenium Hub server. +- Chrome, Opera and Firefox nodes. diff --git a/chart/selenium-grid/Chart.yaml b/chart/selenium-grid/Chart.yaml new file mode 100644 index 000000000..344c202bf --- /dev/null +++ b/chart/selenium-grid/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: selenium-grid +description: A Helm chart for creating a Selenium grid server in Kubernetes +type: application +version: 0.3.0 +appVersion: 4.1.2-20220217 diff --git a/chart/selenium-grid/README.md b/chart/selenium-grid/README.md new file mode 100644 index 000000000..2003df71f --- /dev/null +++ b/chart/selenium-grid/README.md @@ -0,0 +1,183 @@ +# Selenium-Grid Helm Chart + +This chart enables the creation of a Selenium grid server in Kubernetes. + +## Installing the chart + +To install the selenium-grid helm chart, you can run: + +```bash +# Clone the project +git clone https://github.com/seleniumhq/docker-selenium.git + +# Install basic grid +helm install selenium-grid docker-selenium/chart/selenium-grid/. + +# Or install full grid (Router, Distributor, EventBus, SessionMap and SessionQueue components separated) +helm install selenium-grid --set isolateComponents=true docker-selenium/chart/selenium-grid/. +``` + +## Updating Selenium-Grid release + +Once you have a new chart version, you can update your selenium-grid running: + +```bash +helm upgrade selenium-grid docker-selenium/chart/selenium-grid/. +``` + +## Uninstalling Selenium Grid release + +To uninstall: + +```bash +helm uninstall selenium-grid +``` + +## Configuration + +For now, global configuration supported is: + +| Parameter | Default | Description | +| ----------------------------------- | ---------------------------------- | ------------------------------------- | +| `global.seleniumGrid.imageTag` | `4.1.2-20220217` | Image tag for all selenium components | +| `global.seleniumGrid.nodesImageTag` | `4.1.2-20220217` | Image tag for browser's nodes | + +This table contains the configuration parameters of the chart and their default values: + +| Parameter | Default | Description | +| --------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `isolateComponents` | `false` | Deploy Router, Distributor, EventBus, SessionMap and Nodes separately | +| `busConfigMap.name` | `selenium-event-bus-config` | Name of the configmap that contains SE_EVENT_BUS_HOST, SE_EVENT_BUS_PUBLISH_PORT and SE_EVENT_BUS_SUBSCRIBE_PORT variables | +| `busConfigMap.annotations` | `{}` | Custom annotations for configmap | +| `chromeNode.enabled` | `true` | Enable chrome nodes | +| `chromeNode.replicas` | `1` | Number of chrome nodes | +| `chromeNode.imageName` | `selenium/node-chrome` | Image of chrome nodes | +| `chromeNode.imageTag` | `4.1.2-20220217` | Image of chrome nodes | +| `chromeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `chromeNode.ports` | `[5553]` | Port list to enable on container | +| `chromeNode.seleniumPort` | `5900` | Selenium port (spec.ports[0].targetPort in kubernetes service) | +| `chromeNode.seleniumServicePort` | `6900` | Selenium port exposed in service (spec.ports[0].port in kubernetes service) | +| `chromeNode.annotations` | `{}` | Annotations for chrome-node pods | +| `chromeNode.labels` | `{}` | Labels for chrome-node pods | +| `chromeNode.resources` | `See values.yaml` | Resources for chrome-node container | +| `chromeNode.tolerations` | `[]` | Tolerations for chrome-node container | +| `chromeNode.nodeSelector` | `{}` | Node Selector for chrome-node container | +| `chromeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for chrome nodes | +| `chromeNode.service.enabled` | `true` | Create a service for node | +| `chromeNode.service.type` | `ClusterIP` | Service type | +| `chromeNode.service.annotations` | `{}` | Custom annotations for service | +| `chromeNode.dshmVolumeSizeLimit` | `1Gi` | Size limit for DSH volume mounted in container (if not set, default is "1Gi") | +| `firefoxNode.enabled` | `true` | Enable firefox nodes | +| `firefoxNode.replicas` | `1` | Number of firefox nodes | +| `firefoxNode.imageName` | `selenium/node-firefox` | Image of firefox nodes | +| `firefoxNode.imageTag` | `4.1.2-20220217` | Image of firefox nodes | +| `firefoxNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `firefoxNode.ports` | `[5553]` | Port list to enable on container | +| `firefoxNode.seleniumPort` | `5900` | Selenium port (spec.ports[0].targetPort in kubernetes service) | +| `firefoxNode.seleniumServicePort` | `6900` | Selenium port exposed in service (spec.ports[0].port in kubernetes service) | +| `firefoxNode.annotations` | `{}` | Annotations for firefox-node pods | +| `firefoxNode.labels` | `{}` | Labels for firefox-node pods | +| `firefoxNode.resources` | `See values.yaml` | Resources for firefox-node container | +| `firefoxNode.tolerations` | `[]` | Tolerations for firefox-node container | +| `firefoxNode.nodeSelector` | `{}` | Node Selector for firefox-node container | +| `firefoxNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | +| `firefoxNode.service.enabled` | `true` | Create a service for node | +| `firefoxNode.service.type` | `ClusterIP` | Service type | +| `firefoxNode.service.annotations` | `{}` | Custom annotations for service | +| `firefoxNode.dshmVolumeSizeLimit` | `1Gi` | Size limit for DSH volume mounted in container (if not set, default is "1Gi") | +| `edgeNode.enabled` | `true` | Enable edge nodes | +| `edgeNode.replicas` | `1` | Number of edge nodes | +| `edgeNode.imageName` | `selenium/node-edge` | Image of edge nodes | +| `edgeNode.imageTag` | `4.1.2-20220217` | Image of edge nodes | +| `edgeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `edgeNode.ports` | `[5553]` | Port list to enable on container | +| `edgeNode.seleniumPort` | `5900` | Selenium port (spec.ports[0].targetPort in kubernetes service) | +| `edgeNode.seleniumServicePort` | `6900` | Selenium port exposed in service (spec.ports[0].port in kubernetes service) | +| `edgeNode.annotations` | `{}` | Annotations for edge-node pods | +| `edgeNode.labels` | `{}` | Labels for edge-node pods | +| `edgeNode.resources` | `See values.yaml` | Resources for edge-node container | +| `edgeNode.tolerations` | `[]` | Tolerations for edge-node container | +| `edgeNode.nodeSelector` | `{}` | Node Selector for edge-node container | +| `edgeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | +| `edgeNode.service.enabled` | `true` | Create a service for node | +| `edgeNode.service.type` | `ClusterIP` | Service type | +| `edgeNode.service.annotations` | `{}` | Custom annotations for service | +| `edgeNode.dshmVolumeSizeLimit` | `1Gi` | Size limit for DSH volume mounted in container (if not set, default is "1Gi") | +| `customLabels` | `{}` | Custom labels for k8s resources | + + +### Configuration for Selenium-Hub + +You can configure the Selenium Hub with this values: + +| Parameter | Default | Description | +| ------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `hub.imageName` | `selenium/hub` | Selenium Hub image name | +| `hub.imageTag` | `nil` | Selenium Hub image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `hub.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `hub.annotations` | `{}` | Custom annotations for Selenium Hub pod | +| `hub.labels` | `{}` | Custom labels for Selenium Hub pod | +| `hub.publishPort` | `4442` | Port where events are published | +| `hub.subscribePort` | `4443` | Port where to subscribe for events | +| `hub.port` | `4444` | Selenium Hub port | +| `hub.livenessProbe` | `See values.yaml` | Liveness probe settings | +| `hub.readinessProbe` | `See values.yaml` | Readiness probe settings | +| `hub.tolerations` | `[]` | Tolerations for selenium-hub container | +| `hub.nodeSelector` | `{}` | Node Selector for selenium-hub container | +| `hub.extraEnvironmentVariables` | `nil` | Custom environment variables for selenium-hub | +| `hub.resources` | `{}` | Resources for selenium-hub container | +| `hub.serviceType` | `NodePort` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `hub.serviceAnnotations` | `{}` | Custom annotations for Selenium Hub service | + + +### Configuration for isolated components + +If you implement selenium-grid with separate components (`isolateComponents: true`), you can configure all components via the following values: + +| Parameter | Default | Description | +| --------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `components.router.imageName` | `selenium/router` | Router image name | +| `components.router.imageTag` | `nil` | Router image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `components.router.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `components.router.annotations` | `{}` | Custom annotations for router pod | +| `components.router.port` | `4444` | Router port | +| `components.router.livenessProbe` | `See values.yaml` | Liveness probe settings | +| `components.router.readinessProbe` | `See values.yaml` | Readiness probe settings | +| `components.router.resources` | `{}` | Resources for router container | +| `components.router.serviceType` | `NodePort` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `components.router.serviceAnnotations` | `{}` | Custom annotations for router service | +| `components.distributor.imageName` | `selenium/distributor` | Distributor image name | +| `components.distributor.imageTag` | `nil` | Distributor image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `components.distributor.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `components.distributor.annotations` | `{}` | Custom annotations for Distributor pod | +| `components.distributor.port` | `5553` | Distributor port | +| `components.distributor.resources` | `{}` | Resources for Distributor container | +| `components.distributor.serviceType` | `ClusterIP` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `components.distributor.serviceAnnotations` | `{}` | Custom annotations for Distributor service | +| `components.eventBus.imageName` | `selenium/event-bus` | Event Bus image name | +| `components.eventBus.imageTag` | `nil` | Event Bus image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `components.eventBus.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `components.eventBus.annotations` | `{}` | Custom annotations for Event Bus pod | +| `components.eventBus.port` | `5557` | Event Bus port | +| `components.eventBus.publishPort` | `4442` | Port where events are published | +| `components.eventBus.subscribePort` | `4443` | Port where to subscribe for events | +| `components.eventBus.resources` | `{}` | Resources for event-bus container | +| `components.eventBus.serviceType` | `ClusterIP` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `components.eventBus.serviceAnnotations` | `{}` | Custom annotations for Event Bus service | +| `components.sessionMap.imageName` | `selenium/sessions` | Session Map image name | +| `components.sessionMap.imageTag` | `nil` | Session Map image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `components.sessionMap.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `components.sessionMap.annotations` | `{}` | Custom annotations for Session Map pod | +| `components.sessionMap.resources` | `{}` | Resources for event-bus container | +| `components.sessionMap.serviceType` | `ClusterIP` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `components.sessionMap.serviceAnnotations` | `{}` | Custom annotations for Session Map service | +| `components.sessionQueue.imageName` | `selenium/session-queue` | Session Queue image name | +| `components.sessionQueue.imageTag` | `nil` | Session Queue image tag (this overwrites `.global.seleniumGrid.imageTag` value) | +| `components.sessionQueue.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `components.sessionQueue.annotations` | `{}` | Custom annotations for Session Queue pod | +| `components.sessionQueue.resources` | `{}` | Resources for event-bus container | +| `components.sessionQueue.serviceType` | `ClusterIP` | Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) | +| `components.sessionQueue.serviceAnnotations` | `{}` | Custom annotations for Session Queue service | +| `components.extraEnvironmentVariables` | `nil` | Custom environment variables for all components | + +See how to customize a helm chart installation in the [Helm Docs](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing) for more information. diff --git a/chart/selenium-grid/templates/NOTES.txt b/chart/selenium-grid/templates/NOTES.txt new file mode 100644 index 000000000..57c57379d --- /dev/null +++ b/chart/selenium-grid/templates/NOTES.txt @@ -0,0 +1,22 @@ +Selenium Grid Server deployed succesfully. + +1. Get the URL FOR WebDriver tests by running these commands: + + {{- $appName := ternary "selenium-router" "selenium-hub" .Values.isolateComponents }} + {{- $serviceType := ternary .Values.components.router.serviceType .Values.hub.serviceType .Values.isolateComponents }} + {{- $port := ternary .Values.components.router.port .Values.hub.port .Values.isolateComponents }} + {{- $localUrl := ternary "http://localhost:PORT" "http://localhost:PORT/wd/hub" .Values.isolateComponents }} + {{- if contains "NodePort" $serviceType }} + export NODE_PORT=$(kubectl get -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" svc {{ include "seleniumGrid.router.fullname" . }}) + export NODE_IP=$(kubectl get nodes -n {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT + {{- else if contains "LoadBalancer" $serviceType }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get -n {{ .Release.Namespace }} svc -w {{ include "seleniumGrid.router.fullname" . }}' + export SERVICE_IP=$(kubectl get svc -n {{ .Release.Namespace }} {{ include "seleniumGrid.router.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ $port }} + {{- else if contains "ClusterIP" $serviceType }} + export POD_NAME=$(kubectl get pods -n {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ $appName }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Point your WebDriver tests to {{ $localUrl | replace "PORT" (toString $port) }}" + kubectl -n {{ .Release.Namespace }} port-forward $POD_NAME {{ $port }}:{{ $port }} + {{- end }} diff --git a/chart/selenium-grid/templates/_helpers.tpl b/chart/selenium-grid/templates/_helpers.tpl new file mode 100644 index 000000000..775446014 --- /dev/null +++ b/chart/selenium-grid/templates/_helpers.tpl @@ -0,0 +1,73 @@ +{{/* +Common labels +*/}} +{{- define "seleniumGrid.commonLabels" -}} +app.kubernetes.io/managed-by: {{ .Release.Service | lower }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/version: {{ .Chart.AppVersion }} +app.kubernetes.io/component: {{ printf "selenium-grid-%s" .Chart.AppVersion }} +helm.sh/chart: {{ printf "%s-%s" .Chart.Name (.Chart.Version | replace "+" "_") }} +{{- end -}} + +{{/* +Selenium Hub fullname +*/}} +{{- define "seleniumGrid.hub.fullname" -}} +{{- default "selenium-hub" .Values.hub.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Event bus fullname +*/}} +{{- define "seleniumGrid.eventBus.fullname" -}} +{{- default "selenium-event-bus" .Values.components.eventBus.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Router fullname +*/}} +{{- define "seleniumGrid.router.fullname" -}} +{{- default "selenium-router" .Values.components.router.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Distributor fullname +*/}} +{{- define "seleniumGrid.distributor.fullname" -}} +{{- default "selenium-distributor" .Values.components.distributor.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +SessionMap fullname +*/}} +{{- define "seleniumGrid.sessionMap.fullname" -}} +{{- default "selenium-session-map" .Values.components.sessionMap.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +SessionQueue fullname +*/}} +{{- define "seleniumGrid.sessionQueue.fullname" -}} +{{- default "selenium-session-queue" .Values.components.sessionQueue.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Chrome node fullname +*/}} +{{- define "seleniumGrid.chromeNode.fullname" -}} +{{- default "selenium-chrome-node" .Values.chromeNode.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Firefox node fullname +*/}} +{{- define "seleniumGrid.firefoxNode.fullname" -}} +{{- default "selenium-firefox-node" .Values.firefoxNode.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Edge node fullname +*/}} +{{- define "seleniumGrid.edgeNode.fullname" -}} +{{- default "selenium-edge-node" .Values.edgeNode.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/chart/selenium-grid/templates/chrome-node-deployment.yaml b/chart/selenium-grid/templates/chrome-node-deployment.yaml new file mode 100644 index 000000000..e80b872b4 --- /dev/null +++ b/chart/selenium-grid/templates/chrome-node-deployment.yaml @@ -0,0 +1,67 @@ +{{- if .Values.chromeNode.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.chromeNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &chrome_node_labels + app: selenium-chrome-node + app.kubernetes.io/name: selenium-chrome-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.chromeNode.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.chromeNode.replicas }} + selector: + matchLabels: + app: selenium-chrome-node + template: + metadata: + labels: *chrome_node_labels + annotations: + checksum/event-bus-configmap: {{ include (print $.Template.BasePath "/event-bus-configmap.yaml") . | sha256sum }} + {{- with .Values.chromeNode.annotations }} + {{ toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-chrome-node + {{- $imageTag := default .Values.global.seleniumGrid.nodesImageTag .Values.chromeNode.imageTag }} + image: {{ printf "%s:%s" .Values.chromeNode.imageName $imageTag }} + imagePullPolicy: {{ .Values.chromeNode.imagePullPolicy }} + {{- with .Values.chromeNode.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + {{- if gt (len .Values.chromeNode.ports) 0 }} + ports: + {{- range .Values.chromeNode.ports }} + - containerPort: {{ . }} + protocol: TCP + {{- end }} + {{- end }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + {{- with .Values.chromeNode.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.chromeNode.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.chromeNode.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} + volumes: + - name: dshm + emptyDir: + medium: Memory + sizeLimit: {{ default "1Gi" .Values.chromeNode.dshmVolumeSizeLimit }} +{{- end }} diff --git a/chart/selenium-grid/templates/chrome-node-service.yaml b/chart/selenium-grid/templates/chrome-node-service.yaml new file mode 100644 index 000000000..9d8cf69ed --- /dev/null +++ b/chart/selenium-grid/templates/chrome-node-service.yaml @@ -0,0 +1,23 @@ +{{- if and .Values.chromeNode.enabled .Values.chromeNode.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.chromeNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + name: selenium-chrome-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.chromeNode.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.chromeNode.service.type }} + selector: + app: selenium-chrome-node + ports: + - name: tcp-chrome + protocol: TCP + port: {{ .Values.chromeNode.seleniumServicePort }} + targetPort: {{ .Values.chromeNode.seleniumPort }} +{{- end }} diff --git a/chart/selenium-grid/templates/distributor-deployment.yaml b/chart/selenium-grid/templates/distributor-deployment.yaml new file mode 100644 index 000000000..103711b61 --- /dev/null +++ b/chart/selenium-grid/templates/distributor-deployment.yaml @@ -0,0 +1,59 @@ +{{- if .Values.isolateComponents }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.distributor.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &distributor_labels + app: selenium-distributor + app.kubernetes.io/name: selenium-distributor + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-distributor + template: + metadata: + labels: *distributor_labels + {{- with .Values.components.distributor.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-distributor + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.components.distributor.imageTag }} + image: {{ printf "%s:%s" .Values.components.distributor.imageName $imageTag }} + imagePullPolicy: {{ .Values.components.distributor.imagePullPolicy }} + env: + - name: SE_SESSIONS_MAP_HOST + value: {{ template "seleniumGrid.sessionMap.fullname" . }} + - name: SE_SESSIONS_MAP_PORT + value: {{ .Values.components.sessionMap.port | quote }} + - name: SE_SESSION_QUEUE_HOST + value: {{ template "seleniumGrid.sessionQueue.fullname" . }} + - name: SE_SESSION_QUEUE_PORT + value: {{ .Values.components.sessionQueue.port | quote }} + {{- with .Values.components.extraEnvironmentVariables }} + {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + ports: + - containerPort: {{ .Values.components.distributor.port }} + protocol: TCP + {{- with .Values.components.distributor.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.components.distributor.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.components.distributor.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/distributor-service.yaml b/chart/selenium-grid/templates/distributor-service.yaml new file mode 100644 index 000000000..ccaf58f19 --- /dev/null +++ b/chart/selenium-grid/templates/distributor-service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.isolateComponents }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.distributor.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-distributor + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.components.distributor.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-distributor + type: {{ .Values.components.distributor.serviceType }} + ports: + - name: tcp-dist + protocol: TCP + port: {{ .Values.components.distributor.port }} + targetPort: {{ .Values.components.distributor.port }} +{{- end }} diff --git a/chart/selenium-grid/templates/edge-node-deployment.yaml b/chart/selenium-grid/templates/edge-node-deployment.yaml new file mode 100644 index 000000000..7db3e4640 --- /dev/null +++ b/chart/selenium-grid/templates/edge-node-deployment.yaml @@ -0,0 +1,67 @@ +{{- if .Values.edgeNode.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.edgeNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &edge_node_labels + app: selenium-edge-node + app.kubernetes.io/name: selenium-edge-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.edgeNode.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.edgeNode.replicas }} + selector: + matchLabels: + app: selenium-edge-node + template: + metadata: + labels: *edge_node_labels + annotations: + checksum/event-bus-configmap: {{ include (print $.Template.BasePath "/event-bus-configmap.yaml") . | sha256sum }} + {{- with .Values.edgeNode.annotations }} + {{ toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-edge-node + {{- $imageTag := default .Values.global.seleniumGrid.nodesImageTag .Values.edgeNode.imageTag }} + image: {{ printf "%s:%s" .Values.edgeNode.imageName $imageTag }} + imagePullPolicy: {{ .Values.edgeNode.imagePullPolicy }} + {{- with .Values.edgeNode.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + {{- if gt (len .Values.edgeNode.ports) 0 }} + ports: + {{- range .Values.edgeNode.ports }} + - containerPort: {{ . }} + protocol: TCP + {{- end }} + {{- end }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + {{- with .Values.edgeNode.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.edgeNode.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.edgeNode.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} + volumes: + - name: dshm + emptyDir: + medium: Memory + sizeLimit: {{ default "1Gi" .Values.edgeNode.dshmVolumeSizeLimit }} +{{- end }} diff --git a/chart/selenium-grid/templates/edge-node-service.yaml b/chart/selenium-grid/templates/edge-node-service.yaml new file mode 100644 index 000000000..f1f0cb4d1 --- /dev/null +++ b/chart/selenium-grid/templates/edge-node-service.yaml @@ -0,0 +1,23 @@ +{{- if and .Values.edgeNode.enabled .Values.edgeNode.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.edgeNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + name: selenium-edge-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.edgeNode.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.edgeNode.service.type }} + selector: + app: selenium-edge-node + ports: + - name: tcp-edge + protocol: TCP + port: {{ .Values.edgeNode.seleniumServicePort }} + targetPort: {{ .Values.edgeNode.seleniumPort }} +{{- end }} diff --git a/chart/selenium-grid/templates/event-bus-configmap.yaml b/chart/selenium-grid/templates/event-bus-configmap.yaml new file mode 100644 index 000000000..efe33fa7d --- /dev/null +++ b/chart/selenium-grid/templates/event-bus-configmap.yaml @@ -0,0 +1,20 @@ +{{- $eventBusHost := ternary (include "seleniumGrid.eventBus.fullname" .) (include "seleniumGrid.hub.fullname" .) .Values.isolateComponents -}} +{{- $eventBusPublishPort := ternary .Values.components.eventBus.publishPort .Values.hub.publishPort .Values.isolateComponents -}} +{{- $eventBusSubscribePort := ternary .Values.components.eventBus.subscribePort .Values.hub.subscribePort .Values.isolateComponents -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.busConfigMap.name }} + namespace: {{ .Release.Namespace }} +{{- with .Values.busConfigMap.annotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} + labels: + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +data: + SE_EVENT_BUS_HOST: {{ $eventBusHost }} + SE_EVENT_BUS_PUBLISH_PORT: {{ $eventBusPublishPort | quote }} + SE_EVENT_BUS_SUBSCRIBE_PORT: {{ $eventBusSubscribePort | quote }} diff --git a/chart/selenium-grid/templates/event-bus-deployment.yaml b/chart/selenium-grid/templates/event-bus-deployment.yaml new file mode 100644 index 000000000..1b231a1b1 --- /dev/null +++ b/chart/selenium-grid/templates/event-bus-deployment.yaml @@ -0,0 +1,51 @@ +{{- if .Values.isolateComponents }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.eventBus.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &event_bus_labels + app: selenium-event-bus + app.kubernetes.io/name: selenium-event-bus + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-event-bus + template: + metadata: + labels: *event_bus_labels + {{- with .Values.components.eventBus.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-event-bus + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.components.eventBus.imageTag }} + image: {{ printf "%s:%s" .Values.components.eventBus.imageName $imageTag }} + imagePullPolicy: {{ .Values.components.eventBus.imagePullPolicy }} + ports: + - containerPort: {{ .Values.components.eventBus.port }} + protocol: TCP + - containerPort: {{ .Values.components.eventBus.publishPort }} + protocol: TCP + - containerPort: {{ .Values.components.eventBus.subscribePort }} + protocol: TCP + {{- with .Values.components.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + {{- with .Values.components.eventBus.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.components.eventBus.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.components.eventBus.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/event-bus-service.yaml b/chart/selenium-grid/templates/event-bus-service.yaml new file mode 100644 index 000000000..90535453b --- /dev/null +++ b/chart/selenium-grid/templates/event-bus-service.yaml @@ -0,0 +1,33 @@ +{{- if .Values.isolateComponents }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.eventBus.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-event-bus + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.components.eventBus.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-event-bus + type: {{ .Values.components.eventBus.serviceType }} + ports: + - name: http-evtbus + protocol: TCP + port: {{ .Values.components.eventBus.port }} + targetPort: {{ .Values.components.eventBus.port }} + - name: tcp-evtbus-pub + protocol: TCP + port: {{ .Values.components.eventBus.publishPort }} + targetPort: {{ .Values.components.eventBus.publishPort }} + - name: tcp-evtbus-sub + protocol: TCP + port: {{ .Values.components.eventBus.subscribePort }} + targetPort: {{ .Values.components.eventBus.subscribePort }} +{{- end }} diff --git a/chart/selenium-grid/templates/firefox-node-deployment.yaml b/chart/selenium-grid/templates/firefox-node-deployment.yaml new file mode 100644 index 000000000..64fc06ab7 --- /dev/null +++ b/chart/selenium-grid/templates/firefox-node-deployment.yaml @@ -0,0 +1,67 @@ +{{- if .Values.firefoxNode.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.firefoxNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &firefox_node_labels + app: selenium-firefox-node + app.kubernetes.io/name: selenium-firefox-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.firefoxNode.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.firefoxNode.replicas }} + selector: + matchLabels: + app: selenium-firefox-node + template: + metadata: + labels: *firefox_node_labels + annotations: + checksum/event-bus-configmap: {{ include (print $.Template.BasePath "/event-bus-configmap.yaml") . | sha256sum }} + {{- with .Values.firefoxNode.annotations }} + {{ toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-firefox-node + {{- $imageTag := default .Values.global.seleniumGrid.nodesImageTag .Values.firefoxNode.imageTag }} + image: {{ printf "%s:%s" .Values.firefoxNode.imageName $imageTag }} + imagePullPolicy: {{ .Values.firefoxNode.imagePullPolicy }} + {{- with .Values.firefoxNode.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + {{- if gt (len .Values.firefoxNode.ports) 0 }} + ports: + {{- range .Values.firefoxNode.ports }} + - containerPort: {{ . }} + protocol: TCP + {{- end }} + {{- end }} + volumeMounts: + - name: dshm + mountPath: /dev/shm + {{- with .Values.firefoxNode.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.firefoxNode.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.firefoxNode.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} + volumes: + - name: dshm + emptyDir: + medium: Memory + sizeLimit: {{ default "1Gi" .Values.firefoxNode.dshmVolumeSizeLimit }} +{{- end }} diff --git a/chart/selenium-grid/templates/firefox-node-service.yaml b/chart/selenium-grid/templates/firefox-node-service.yaml new file mode 100644 index 000000000..b1a9f256e --- /dev/null +++ b/chart/selenium-grid/templates/firefox-node-service.yaml @@ -0,0 +1,23 @@ +{{- if and .Values.firefoxNode.enabled .Values.firefoxNode.service.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.firefoxNode.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + name: selenium-firefox-node + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.firefoxNode.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.firefoxNode.service.type }} + selector: + app: selenium-firefox-node + ports: + - name: tcp-firefox + protocol: TCP + port: {{ .Values.firefoxNode.seleniumServicePort }} + targetPort: {{ .Values.firefoxNode.seleniumPort }} +{{- end }} diff --git a/chart/selenium-grid/templates/hub-deployment.yaml b/chart/selenium-grid/templates/hub-deployment.yaml new file mode 100644 index 000000000..8a835032c --- /dev/null +++ b/chart/selenium-grid/templates/hub-deployment.yaml @@ -0,0 +1,76 @@ +{{- if (not .Values.isolateComponents) }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.hub.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &hub_labels + app: selenium-hub + app.kubernetes.io/name: selenium-hub + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.hub.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-hub + template: + metadata: + labels: *hub_labels + {{- with .Values.hub.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-hub + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.hub.imageTag }} + image: {{ printf "%s:%s" .Values.hub.imageName $imageTag }} + imagePullPolicy: {{ .Values.hub.imagePullPolicy }} + ports: + - containerPort: {{ .Values.hub.port }} + protocol: TCP + - containerPort: {{ .Values.hub.publishPort }} + protocol: TCP + - containerPort: {{ .Values.hub.subscribePort }} + protocol: TCP + {{- if .Values.hub.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.hub.livenessProbe.path }} + port: {{ .Values.hub.port }} + initialDelaySeconds: {{ .Values.hub.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.hub.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.hub.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.hub.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.hub.livenessProbe.failureThreshold }} + {{- end }} + {{- if .Values.hub.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.hub.readinessProbe.path }} + port: {{ .Values.hub.port }} + initialDelaySeconds: {{ .Values.hub.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.hub.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.hub.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.hub.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.hub.readinessProbe.failureThreshold }} + {{- end }} + {{- with .Values.hub.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + {{- with .Values.hub.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.hub.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.hub.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/hub-service.yaml b/chart/selenium-grid/templates/hub-service.yaml new file mode 100644 index 000000000..316d8d540 --- /dev/null +++ b/chart/selenium-grid/templates/hub-service.yaml @@ -0,0 +1,33 @@ +{{- if (not .Values.isolateComponents) }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.hub.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-hub + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.hub.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-hub + type: {{ .Values.hub.serviceType }} + ports: + - name: http-hub + protocol: TCP + port: {{ .Values.hub.port }} + targetPort: {{ .Values.hub.port }} + - name: tcp-hub-pub + protocol: TCP + port: {{ .Values.hub.publishPort }} + targetPort: {{ .Values.hub.publishPort }} + - name: tcp-hub-sub + protocol: TCP + port: {{ .Values.hub.subscribePort }} + targetPort: {{ .Values.hub.subscribePort }} +{{- end }} diff --git a/chart/selenium-grid/templates/router-deployment.yaml b/chart/selenium-grid/templates/router-deployment.yaml new file mode 100644 index 000000000..bebad1961 --- /dev/null +++ b/chart/selenium-grid/templates/router-deployment.yaml @@ -0,0 +1,82 @@ +{{- if .Values.isolateComponents }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.router.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &router_labels + app: selenium-router + app.kubernetes.io/name: selenium-router + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-router + template: + metadata: + labels: *router_labels + {{- with .Values.components.router.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-router + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.components.router.imageTag }} + image: {{ printf "%s:%s" .Values.components.router.imageName $imageTag }} + imagePullPolicy: {{ .Values.components.router.imagePullPolicy }} + env: + - name: SE_DISTRIBUTOR_HOST + value: {{ template "seleniumGrid.distributor.fullname" . }} + - name: SE_DISTRIBUTOR_PORT + value: {{ .Values.components.distributor.port | quote }} + - name: SE_SESSIONS_MAP_HOST + value: {{ template "seleniumGrid.sessionMap.fullname" . }} + - name: SE_SESSIONS_MAP_PORT + value: {{ .Values.components.sessionMap.port | quote }} + - name: SE_SESSION_QUEUE_HOST + value: {{ template "seleniumGrid.sessionQueue.fullname" . }} + - name: SE_SESSION_QUEUE_PORT + value: {{ .Values.components.sessionQueue.port | quote }} + {{- with .Values.components.extraEnvironmentVariables }} + {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + ports: + - containerPort: {{ .Values.components.router.port }} + protocol: TCP + {{- if .Values.components.router.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.components.router.livenessProbe.path }} + port: {{ .Values.components.router.port }} + initialDelaySeconds: {{ .Values.components.router.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.components.router.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.components.router.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.components.router.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.components.router.livenessProbe.failureThreshold }} + {{- end }} + {{- if .Values.components.router.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.components.router.readinessProbe.path }} + port: {{ .Values.components.router.port }} + initialDelaySeconds: {{ .Values.components.router.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.components.router.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.components.router.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.components.router.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.components.router.readinessProbe.failureThreshold }} + {{- end }} + {{- with .Values.components.router.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.components.router.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.components.router.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/router-service.yaml b/chart/selenium-grid/templates/router-service.yaml new file mode 100644 index 000000000..45b910bd2 --- /dev/null +++ b/chart/selenium-grid/templates/router-service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.isolateComponents }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.router.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-router + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.components.router.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-router + type: {{ .Values.components.router.serviceType }} + ports: + - name: tcp-router + protocol: TCP + port: {{ .Values.components.router.port }} + targetPort: {{ .Values.components.router.port }} +{{- end }} diff --git a/chart/selenium-grid/templates/session-map-deployment.yaml b/chart/selenium-grid/templates/session-map-deployment.yaml new file mode 100644 index 000000000..f077e4c00 --- /dev/null +++ b/chart/selenium-grid/templates/session-map-deployment.yaml @@ -0,0 +1,50 @@ +{{- if .Values.isolateComponents }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.sessionMap.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &session_map_labels + app: selenium-session-map + app.kubernetes.io/name: selenium-session-map + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-session-map + template: + metadata: + labels: *session_map_labels + {{- with .Values.components.sessionMap.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-session-map + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.components.sessionMap.imageTag }} + image: {{ printf "%s:%s" .Values.components.sessionMap.imageName $imageTag }} + imagePullPolicy: {{ .Values.components.sessionMap.imagePullPolicy }} + {{- with .Values.components.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + ports: + - containerPort: {{ .Values.components.sessionMap.port }} + protocol: TCP + {{- with .Values.components.sessionMap.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.components.sessionMap.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.components.sessionMap.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/session-map-service.yaml b/chart/selenium-grid/templates/session-map-service.yaml new file mode 100644 index 000000000..94172b911 --- /dev/null +++ b/chart/selenium-grid/templates/session-map-service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.isolateComponents }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.sessionMap.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-session-map + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.components.sessionMap.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-session-map + type: {{ .Values.components.sessionMap.serviceType }} + ports: + - name: tcp-ssn-map + protocol: TCP + port: {{ .Values.components.sessionMap.port }} + targetPort: {{ .Values.components.sessionMap.port }} +{{- end }} diff --git a/chart/selenium-grid/templates/session-queuer-deployment.yaml b/chart/selenium-grid/templates/session-queuer-deployment.yaml new file mode 100644 index 000000000..8c99d4ccc --- /dev/null +++ b/chart/selenium-grid/templates/session-queuer-deployment.yaml @@ -0,0 +1,50 @@ +{{- if .Values.isolateComponents }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "seleniumGrid.sessionQueue.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: &session_queue_labels + app: selenium-session-queue + app.kubernetes.io/name: selenium-session-queue + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app: selenium-session-queue + template: + metadata: + labels: *session_queue_labels + {{- with .Values.components.sessionQueue.annotations }} + annotations: {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: selenium-session-queue + {{- $imageTag := default .Values.global.seleniumGrid.imageTag .Values.components.sessionQueue.imageTag }} + image: {{ printf "%s:%s" .Values.components.sessionQueue.imageName $imageTag }} + imagePullPolicy: {{ .Values.components.sessionQueue.imagePullPolicy }} + {{- with .Values.components.extraEnvironmentVariables }} + env: {{- tpl (toYaml .) $ | nindent 12 }} + {{- end }} + envFrom: + - configMapRef: + name: {{ .Values.busConfigMap.name }} + ports: + - containerPort: {{ .Values.components.sessionQueue.port }} + protocol: TCP + {{- with .Values.components.sessionQueue.resources }} + resources: {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.components.sessionQueue.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.components.sessionQueue.tolerations }} + tolerations: + {{ toYaml . | nindent 6 }} + {{- end }} +{{- end }} diff --git a/chart/selenium-grid/templates/session-queuer-service.yaml b/chart/selenium-grid/templates/session-queuer-service.yaml new file mode 100644 index 000000000..b28ac0357 --- /dev/null +++ b/chart/selenium-grid/templates/session-queuer-service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.isolateComponents }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seleniumGrid.sessionQueue.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: selenium-session-queue + {{- include "seleniumGrid.commonLabels" . | nindent 4 }} + {{- with .Values.customLabels }} + {{- toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.components.sessionQueue.serviceAnnotations }} + annotations: {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + app: selenium-session-queue + type: {{ .Values.components.sessionQueue.serviceType }} + ports: + - name: tcp-ssn-que + protocol: TCP + port: {{ .Values.components.sessionQueue.port }} + targetPort: {{ .Values.components.sessionQueue.port }} +{{- end }} diff --git a/chart/selenium-grid/values.yaml b/chart/selenium-grid/values.yaml new file mode 100644 index 000000000..3f1089101 --- /dev/null +++ b/chart/selenium-grid/values.yaml @@ -0,0 +1,393 @@ +global: + seleniumGrid: + # Image tag for all selenium components + imageTag: 4.1.2-20220217 + # Image tag for browser's nodes + nodesImageTag: 4.1.2-20220217 + +# Deploy Router, Distributor, EventBus, SessionMap and Nodes separately +isolateComponents: false + +# ConfigMap that contains SE_EVENT_BUS_HOST, SE_EVENT_BUS_PUBLISH_PORT and SE_EVENT_BUS_SUBSCRIBE_PORT variables +busConfigMap: + # Name of the configmap + name: selenium-event-bus-config + # Custom annotations for configmap + annotations: {} + +# Configuration for isolated components (applied only if `isolateComponents: true`) +components: + + # Configuration for router component + router: + # Router image name + imageName: selenium/router + # Router image tag (this overwrites global.seleniumGrid.imageTag parameter) + # imageTag: 4.1.2-20220217 + + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for router pod + annotations: {} + # Router port + port: 4444 + # Liveness probe settings + livenessProbe: + enabled: true + path: /status + initialDelaySeconds: 10 + failureThreshold: 10 + timeoutSeconds: 10 + periodSeconds: 10 + successThreshold: 1 + # Readiness probe settings + readinessProbe: + enabled: true + path: /status + initialDelaySeconds: 12 + failureThreshold: 10 + timeoutSeconds: 10 + periodSeconds: 10 + successThreshold: 1 + # Resources for router container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: NodePort + # Custom annotations for router service + serviceAnnotations: {} + # Tolerations for router container + tolerations: [] + # Node selector for router container + nodeSelector: {} + + # Configuration for distributor component + distributor: + # Distributor image name + imageName: selenium/distributor + # Distributor image tag (this overwrites global.seleniumGrid.imageTag parameter) + # imageTag: 4.1.2-20220217 + + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for Distributor pod + annotations: {} + # Distributor port + port: 5553 + # Resources for Distributor container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: ClusterIP + # Custom annotations for Distributor service + serviceAnnotations: {} + # Tolerations for Distributor container + tolerations: [] + # Node selector for Distributor container + nodeSelector: {} + + # Configuration for Event Bus component + eventBus: + # Event Bus image name + imageName: selenium/event-bus + # Event Bus image tag (this overwrites global.seleniumGrid.imageTag parameter) + # imageTag: 4.1.2-20220217 + + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for Event Bus pod + annotations: {} + # Event Bus port + port: 5557 + # Port where events are published + publishPort: 4442 + # Port where to subscribe for events + subscribePort: 4443 + # Resources for event-bus container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: ClusterIP + # Custom annotations for Event Bus service + serviceAnnotations: {} + # Tolerations for Event Bus container + tolerations: [] + # Node selector for Event Bus container + nodeSelector: {} + + # Configuration for Session Map component + sessionMap: + # Session Map image name + imageName: selenium/sessions + # Session Map image tag (this overwrites global.seleniumGrid.imageTag parameter) + # imageTag: 4.1.2-20220217 + + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for Session Map pod + annotations: {} + port: 5556 + # Resources for Session Map container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: ClusterIP + # Custom annotations for Session Map service + serviceAnnotations: {} + # Tolerations for Session Map container + tolerations: [] + # Node selector for Session Map container + nodeSelector: {} + + # Configuration for Session Queue component + sessionQueue: + # Session Queue image name + imageName: selenium/session-queue + # Session Queue image tag (this overwrites global.seleniumGrid.imageTag parameter) + # imageTag: 4.1.2-20220217 + + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for Session Queue pod + annotations: {} + port: 5559 + # Resources for Session Queue container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: ClusterIP + # Custom annotations for Session Queue service + serviceAnnotations: {} + # Tolerations for Session Queue container + tolerations: [] + # Node selector for Session Queue container + nodeSelector: {} + + # Custom environment variables for all components + extraEnvironmentVariables: + # - name: JAVA_OPTS + # value: "-Xmx512m" + # - name: + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key + +# Configuration for selenium hub deployment (applied only if `isolateComponents: false`) +hub: + # Selenium Hub image name + imageName: selenium/hub + # Selenium Hub image tag (this overwrites global.seleniumGrid.imageTag parameter) + imageTag: 4.1.2-20220217 + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Custom annotations for Selenium Hub pod + annotations: {} + # Custom labels for Selenium Hub pod + labels: {} + # Port where events are published + publishPort: 4442 + # Port where to subscribe for events + subscribePort: 4443 + # Selenium Hub port + port: 4444 + # Liveness probe settings + livenessProbe: + enabled: true + path: /wd/hub/status + initialDelaySeconds: 10 + failureThreshold: 10 + timeoutSeconds: 10 + periodSeconds: 10 + successThreshold: 1 + # Readiness probe settings + readinessProbe: + enabled: true + path: /wd/hub/status + initialDelaySeconds: 12 + failureThreshold: 10 + timeoutSeconds: 10 + periodSeconds: 10 + successThreshold: 1 + # Custom environment variables for selenium-hub + extraEnvironmentVariables: + # - name: JAVA_OPTS + # value: "-Xmx512m" + # - name: SECRET_VARIABLE + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key + # Resources for selenium-hub container + resources: {} + # Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) + serviceType: NodePort + # Custom annotations for Selenium Hub service + serviceAnnotations: {} + # Tolerations for selenium-hub container + tolerations: [] + # Node selector for selenium-hub container + nodeSelector: {} + +# Configuration for chrome nodes +chromeNode: + # Enable chrome nodes + enabled: true + # Number of chrome nodes + replicas: 1 + # Image of chrome nodes + imageName: selenium/node-chrome + # Image of chrome nodes (this overwrites global.seleniumGrid.nodesImageTag) + # imageTag: 4.1.2-20220217 + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Port list to enable on container + ports: + - 5553 + # Selenium port (spec.ports[0].targetPort in kubernetes service) + seleniumPort: 5900 + # Selenium port exposed in service (spec.ports[0].port in kubernetes service) + seleniumServicePort: 6900 + # Annotations for chrome-node pods + annotations: {} + # Labels for chrome-node pods + labels: {} + # Resources for chrome-node container + resources: + requests: + memory: "1Gi" + cpu: "1" + limits: + memory: "1Gi" + cpu: "1" + # Tolerations for chrome-node container + tolerations: [] + # Node selector for chrome-node container + nodeSelector: {} + # Custom environment variables for chrome nodes + extraEnvironmentVariables: + # - name: JAVA_OPTS + # value: "-Xmx512m" + # - name: + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key + # Service configuration + service: + # Create a service for node + enabled: true + # Service type + type: ClusterIP + # Custom annotations for service + annotations: {} + # Size limit for DSH volume mounted in container (if not set, default is "1Gi") + dshmVolumeSizeLimit: 1Gi + +# Configuration for firefox nodes +firefoxNode: + # Enable firefox nodes + enabled: true + # Number of firefox nodes + replicas: 1 + # Image of firefox nodes + imageName: selenium/node-firefox + # Image of firefox nodes (this overwrites global.seleniumGrid.nodesImageTag) + # imageTag: 4.1.2-20220217 + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + # Port list to enable on container + ports: + - 5553 + # Selenium port (spec.ports[0].targetPort in kubernetes service) + seleniumPort: 5900 + # Selenium port exposed in service (spec.ports[0].port in kubernetes service) + seleniumServicePort: 6900 + # Annotations for firefox-node pods + annotations: {} + # Labels for firefox-node pods + labels: {} + # Tolerations for firefox-node container + tolerations: [] + # Node selector for firefox-node container + nodeSelector: {} + # Resources for firefox-node container + resources: + requests: + memory: "1Gi" + cpu: "1" + limits: + memory: "1Gi" + cpu: "1" + # Custom environment variables for firefox nodes + extraEnvironmentVariables: + # - name: JAVA_OPTS + # value: "-Xmx512m" + # - name: + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key + # Service configuration + service: + # Create a service for node + enabled: true + # Service type + type: ClusterIP + # Custom annotations for service + annotations: {} + # Size limit for DSH volume mounted in container (if not set, default is "1Gi") + dshmVolumeSizeLimit: 1Gi + +# Configuration for edge nodes +edgeNode: + # Enable edge nodes + enabled: true + # Number of edge nodes + replicas: 1 + # Image of edge nodes + imageName: selenium/node-edge + # Image of edge nodes (this overwrites global.seleniumGrid.nodesImageTag) + # imageTag: 4.1.2-20220217 + # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) + imagePullPolicy: IfNotPresent + ports: + - 5553 + # Selenium port (spec.ports[0].targetPort in kubernetes service) + seleniumPort: 5900 + # Selenium port exposed in service (spec.ports[0].port in kubernetes service) + seleniumServicePort: 6900 + # Annotations for edge-node pods + annotations: {} + # Labels for edge-node pods + labels: {} + # Tolerations for edge-node container + tolerations: [] + # Node selector for edge-node container + nodeSelector: {} + # Resources for edge-node container + resources: + requests: + memory: "1Gi" + cpu: "1" + limits: + memory: "1Gi" + cpu: "1" + # Custom environment variables for firefox nodes + extraEnvironmentVariables: + # - name: JAVA_OPTS + # value: "-Xmx512m" + # - name: + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key + # Service configuration + service: + # Create a service for node + enabled: true + # Service type + type: ClusterIP + # Custom annotations for service + annotations: + hello: world + # Size limit for DSH volume mounted in container (if not set, default is "1Gi") + dshmVolumeSizeLimit: 1Gi + +# Custom labels for k8s resources +customLabels: {}