From 4f725b7a5d392fcb96af16438eb92518926ccdaa Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Mon, 30 Oct 2023 17:42:43 +0700 Subject: [PATCH] Improve chart templates in the section videoRecorder (#1987) Improve chart templates in section videoRecorder Signed-off-by: Viet Nguyen Duc --- charts/selenium-grid/README.md | 283 +++++++++++--------- charts/selenium-grid/templates/_helpers.tpl | 140 ++++++++-- charts/selenium-grid/values.yaml | 85 ++++-- 3 files changed, 325 insertions(+), 183 deletions(-) diff --git a/charts/selenium-grid/README.md b/charts/selenium-grid/README.md index fb37c0dd3..65e14ec6e 100644 --- a/charts/selenium-grid/README.md +++ b/charts/selenium-grid/README.md @@ -91,137 +91,158 @@ For now, global configuration supported is: 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 | -| `serviceAccount.create` | `true` | Enable or disable creation of service account (if `false`, `serviceAccount.name` MUST be specified | -| `serviceAccount.name` | `""` | Name of the service account to be made or existing service account to use for all deployments and jobs | -| `serviceAccount.annotations` | `{}` | Custom annotations for service account | -| `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 | -| `nodeConfigMap.name` | `selenium-node-config` | Name of the configmap that contains common environment variables for browser nodes | -| `nodeConfigMap.annotations` | `{}` | Custom annotations for configmap | -| `ingress.enabled` | `true` | Enable or disable ingress resource | -| `ingress.className` | `""` | Name of ingress class to select which controller will implement ingress resource | -| `ingress.annotations` | `{}` | Custom annotations for ingress resource | -| `ingress.hostname` | `selenium-grid.local` | Default host for the ingress resource | -| `ingress.path` | `/` | Default host path for the ingress resource | -| `ingress.tls` | `[]` | TLS backend configuration for ingress resource | -| `autoscaling.enableWithExistingKEDA` | `false` | Enable autoscaling of browser nodes. | -| `autoscaling.enabled` | `false` | Same as above plus installation of KEDA | -| `autoscaling.scalingType` | `job` | Which typ of KEDA scaling to use: job or deployment | -| `autoscaling.scaledJobOptions` | See `values.yaml` | Options for KEDA ScaledJobs | -| `autoscaling.deregisterLifecycle` | See `values.yaml` | Lifecycle applied to pods of deployments controlled by KEDA. Makes the node deregister from selenium hub | -| `chromeNode.enabled` | `true` | Enable chrome nodes | -| `chromeNode.deploymentEnabled` | `true` | Enable creation of Deployment for chrome nodes | -| `chromeNode.replicas` | `1` | Number of chrome nodes. Disabled if autoscaling is enabled. | -| `chromeNode.imageName` | `selenium/node-chrome` | Image of chrome nodes | -| `chromeNode.imageTag` | `4.14.1-20231025` | Image of chrome nodes | -| `chromeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | -| `chromeNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | -| `chromeNode.ports` | `[5555]` | 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 pods | -| `chromeNode.securityContext` | `See values.yaml` | Security context for chrome-node pods | -| `chromeNode.tolerations` | `[]` | Tolerations for chrome-node pods | -| `chromeNode.nodeSelector` | `{}` | Node Selector for chrome-node pods | -| `chromeNode.affinity` | `{}` | Affinity for chrome-node pods | -| `chromeNode.hostAliases` | `nil` | Custom host aliases for chrome nodes | -| `chromeNode.priorityClassName` | `""` | Priority class name for chrome-node pods | -| `chromeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for chrome nodes | -| `chromeNode.extraEnvFrom` | `nil` | Custom environment taken from `configMap` or `secret` 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") | -| `chromeNode.startupProbe` | `{}` | Probe to check pod is started successfully | -| `chromeNode.livenessProbe` | `{}` | Liveness probe settings | -| `chromeNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | -| `chromeNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | -| `chromeNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | -| `chromeNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | -| `chromeNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | -| `chromeNode.hpa.browserName` | `chrome` | BrowserName from the capability | -| `chromeNode.hpa.browserVersion` | `` | BrowserVersion from the capability | -| `chromeNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | -| `chromeNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | -| `firefoxNode.enabled` | `true` | Enable firefox nodes | -| `firefoxNode.deploymentEnabled` | `true` | Enable creation of Deployment for firefox nodes | -| `firefoxNode.replicas` | `1` | Number of firefox nodes. Disabled if autoscaling is enabled. | -| `firefoxNode.imageName` | `selenium/node-firefox` | Image of firefox nodes | -| `firefoxNode.imageTag` | `4.14.1-20231025` | Image of firefox nodes | -| `firefoxNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | -| `firefoxNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | -| `firefoxNode.ports` | `[5555]` | 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 pods | -| `firefoxNode.securityContext` | `See values.yaml` | Security context for firefox-node pods | -| `firefoxNode.tolerations` | `[]` | Tolerations for firefox-node pods | -| `firefoxNode.nodeSelector` | `{}` | Node Selector for firefox-node pods | -| `firefoxNode.affinity` | `{}` | Affinity for firefox-node pods | -| `firefoxNode.hostAliases` | `nil` | Custom host aliases for firefox nodes | -| `firefoxNode.priorityClassName` | `""` | Priority class name for firefox-node pods | -| `firefoxNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | -| `firefoxNode.extraEnvFrom` | `nil` | Custom environment variables taken from `configMap` or `secret` 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") | -| `firefoxNode.startupProbe` | `{}` | Probe to check pod is started successfully | -| `firefoxNode.livenessProbe` | `{}` | Liveness probe settings | -| `firefoxNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | -| `firefoxNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | -| `firefoxNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | -| `firefoxNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | -| `firefoxNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | -| `firefoxNode.hpa.browserName` | `firefox` | BrowserName from the capability | -| `firefoxNode.hpa.browserVersion` | `` | BrowserVersion from the capability | -| `firefoxNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | -| `firefoxNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | -| `edgeNode.enabled` | `true` | Enable edge nodes | -| `edgeNode.deploymentEnabled` | `true` | Enable creation of Deployment for edge nodes | -| `edgeNode.replicas` | `1` | Number of edge nodes. Disabled if autoscaling is enabled. | -| `edgeNode.imageName` | `selenium/node-edge` | Image of edge nodes | -| `edgeNode.imageTag` | `4.14.1-20231025` | Image of edge nodes | -| `edgeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | -| `edgeNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | -| `edgeNode.ports` | `[5555]` | 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 pods | -| `edgeNode.securityContext` | `See values.yaml` | Security context for edge-node pods | -| `edgeNode.tolerations` | `[]` | Tolerations for edge-node pods | -| `edgeNode.nodeSelector` | `{}` | Node Selector for edge-node pods | -| `edgeNode.affinity` | `{}` | Affinity for edge-node pods | -| `edgeNode.hostAliases` | `nil` | Custom host aliases for edge nodes | -| `edgeNode.priorityClassName` | `""` | Priority class name for edge-node pods | -| `edgeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | -| `edgeNode.extraEnvFrom` | `nil` | Custom environment taken from `configMap` or `secret` 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") | -| `edgeNode.startupProbe` | `{}` | Probe to check pod is started successfully | -| `edgeNode.livenessProbe` | `{}` | Liveness probe settings | -| `edgeNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | -| `edgeNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | -| `edgeNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | -| `edgeNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | -| `edgeNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | -| `edgeNode.hpa.browserName` | `edge` | BrowserName from the capability | -| `edgeNode.hpa.browserVersion` | `` | BrowserVersion from the capability | -| `edgeNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | -| `edgeNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | -| `customLabels` | `{}` | Custom labels for k8s resources | -| `customLabels` | `{}` | Custom labels for k8s resources | +| Parameter | Default | Description | +|-----------------------------------------------|---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------| +| `isolateComponents` | `false` | Deploy Router, Distributor, EventBus, SessionMap and Nodes separately | +| `serviceAccount.create` | `true` | Enable or disable creation of service account (if `false`, `serviceAccount.name` MUST be specified | +| `serviceAccount.name` | `""` | Name of the service account to be made or existing service account to use for all deployments and jobs | +| `serviceAccount.annotations` | `{}` | Custom annotations for service account | +| `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 | +| `nodeConfigMap.name` | `selenium-node-config` | Name of the configmap that contains common environment variables for browser nodes | +| `nodeConfigMap.annotations` | `{}` | Custom annotations for configmap | +| `ingress.enabled` | `true` | Enable or disable ingress resource | +| `ingress.className` | `""` | Name of ingress class to select which controller will implement ingress resource | +| `ingress.annotations` | `{}` | Custom annotations for ingress resource | +| `ingress.hostname` | `selenium-grid.local` | Default host for the ingress resource | +| `ingress.path` | `/` | Default host path for the ingress resource | +| `ingress.tls` | `[]` | TLS backend configuration for ingress resource | +| `autoscaling.enableWithExistingKEDA` | `false` | Enable autoscaling of browser nodes. | +| `autoscaling.enabled` | `false` | Same as above plus installation of KEDA | +| `autoscaling.scalingType` | `job` | Which typ of KEDA scaling to use: job or deployment | +| `autoscaling.scaledJobOptions` | See `values.yaml` | Options for KEDA ScaledJobs | +| `autoscaling.deregisterLifecycle` | See `values.yaml` | Lifecycle applied to pods of deployments controlled by KEDA. Makes the node deregister from selenium hub | +| `chromeNode.enabled` | `true` | Enable chrome nodes | +| `chromeNode.deploymentEnabled` | `true` | Enable creation of Deployment for chrome nodes | +| `chromeNode.replicas` | `1` | Number of chrome nodes. Disabled if autoscaling is enabled. | +| `chromeNode.imageName` | `selenium/node-chrome` | Image of chrome nodes | +| `chromeNode.imageTag` | `4.14.1-20231025` | Image of chrome nodes | +| `chromeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `chromeNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | +| `chromeNode.ports` | `[5555]` | 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 pods | +| `chromeNode.securityContext` | `See values.yaml` | Security context for chrome-node pods | +| `chromeNode.tolerations` | `[]` | Tolerations for chrome-node pods | +| `chromeNode.nodeSelector` | `{}` | Node Selector for chrome-node pods | +| `chromeNode.affinity` | `{}` | Affinity for chrome-node pods | +| `chromeNode.hostAliases` | `nil` | Custom host aliases for chrome nodes | +| `chromeNode.priorityClassName` | `""` | Priority class name for chrome-node pods | +| `chromeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for chrome nodes | +| `chromeNode.extraEnvFrom` | `nil` | Custom environment taken from `configMap` or `secret` 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") | +| `chromeNode.startupProbe` | `{}` | Probe to check pod is started successfully | +| `chromeNode.livenessProbe` | `{}` | Liveness probe settings | +| `chromeNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | +| `chromeNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | +| `chromeNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | +| `chromeNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | +| `chromeNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | +| `chromeNode.hpa.browserName` | `chrome` | BrowserName from the capability | +| `chromeNode.hpa.browserVersion` | `` | BrowserVersion from the capability | +| `chromeNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | +| `chromeNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | +| `firefoxNode.enabled` | `true` | Enable firefox nodes | +| `firefoxNode.deploymentEnabled` | `true` | Enable creation of Deployment for firefox nodes | +| `firefoxNode.replicas` | `1` | Number of firefox nodes. Disabled if autoscaling is enabled. | +| `firefoxNode.imageName` | `selenium/node-firefox` | Image of firefox nodes | +| `firefoxNode.imageTag` | `4.14.1-20231025` | Image of firefox nodes | +| `firefoxNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `firefoxNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | +| `firefoxNode.ports` | `[5555]` | 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 pods | +| `firefoxNode.securityContext` | `See values.yaml` | Security context for firefox-node pods | +| `firefoxNode.tolerations` | `[]` | Tolerations for firefox-node pods | +| `firefoxNode.nodeSelector` | `{}` | Node Selector for firefox-node pods | +| `firefoxNode.affinity` | `{}` | Affinity for firefox-node pods | +| `firefoxNode.hostAliases` | `nil` | Custom host aliases for firefox nodes | +| `firefoxNode.priorityClassName` | `""` | Priority class name for firefox-node pods | +| `firefoxNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | +| `firefoxNode.extraEnvFrom` | `nil` | Custom environment variables taken from `configMap` or `secret` 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") | +| `firefoxNode.startupProbe` | `{}` | Probe to check pod is started successfully | +| `firefoxNode.livenessProbe` | `{}` | Liveness probe settings | +| `firefoxNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | +| `firefoxNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | +| `firefoxNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | +| `firefoxNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | +| `firefoxNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | +| `firefoxNode.hpa.browserName` | `firefox` | BrowserName from the capability | +| `firefoxNode.hpa.browserVersion` | `` | BrowserVersion from the capability | +| `firefoxNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | +| `firefoxNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | +| `edgeNode.enabled` | `true` | Enable edge nodes | +| `edgeNode.deploymentEnabled` | `true` | Enable creation of Deployment for edge nodes | +| `edgeNode.replicas` | `1` | Number of edge nodes. Disabled if autoscaling is enabled. | +| `edgeNode.imageName` | `selenium/node-edge` | Image of edge nodes | +| `edgeNode.imageTag` | `4.14.1-20231025` | Image of edge nodes | +| `edgeNode.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `edgeNode.imagePullSecret` | `""` | Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry) | +| `edgeNode.ports` | `[5555]` | 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 pods | +| `edgeNode.securityContext` | `See values.yaml` | Security context for edge-node pods | +| `edgeNode.tolerations` | `[]` | Tolerations for edge-node pods | +| `edgeNode.nodeSelector` | `{}` | Node Selector for edge-node pods | +| `edgeNode.affinity` | `{}` | Affinity for edge-node pods | +| `edgeNode.hostAliases` | `nil` | Custom host aliases for edge nodes | +| `edgeNode.priorityClassName` | `""` | Priority class name for edge-node pods | +| `edgeNode.extraEnvironmentVariables` | `nil` | Custom environment variables for firefox nodes | +| `edgeNode.extraEnvFrom` | `nil` | Custom environment taken from `configMap` or `secret` 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") | +| `edgeNode.startupProbe` | `{}` | Probe to check pod is started successfully | +| `edgeNode.livenessProbe` | `{}` | Liveness probe settings | +| `edgeNode.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | +| `edgeNode.lifecycle` | `{}` | hooks to make pod correctly shutdown or started | +| `edgeNode.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | +| `edgeNode.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | +| `edgeNode.hpa.url` | `{{ include "seleniumGrid.graphqlURL" . }}` | Graphql Url of the hub or the router | +| `edgeNode.hpa.browserName` | `edge` | BrowserName from the capability | +| `edgeNode.hpa.browserVersion` | `` | BrowserVersion from the capability | +| `edgeNode.maxReplicaCount` | `8` | Max number of replicas that this browsernode can auto scale up to | +| `edgeNode.minReplicaCount` | `1` | Min number of replicas that this browsernode has when jobs are running | +| `videoRecorder.enabled` | `false` | Enable video recorder for node | +| `videoRecorder.imageName` | `selenium/video` | Selenium video recoder image name | +| `videoRecorder.imageTag` | `ffmpeg-6.0-20231025` | Image tag of video recorder | +| `videoRecorder.imagePullPolicy` | `IfNotPresent` | Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) | +| `videoRecorder.uploader` | `false` | Name of the uploader to use. The value `false` is used to disable uploader. Supported default `s3` | +| `videoRecorder.uploadDestinationPrefix` | `false` | Destination URL for uploading video file. The value `false` is used to disable the uploading | +| `videoRecorder.ports` | `[9000]` | Port list to enable on video recorder container | +| `videoRecorder.resources` | `See values.yaml` | Resources for video recorder | +| `videoRecorder.extraEnvironmentVariables` | `nil` | Custom environment variables for video recorder | +| `videoRecorder.extraEnvFrom` | `nil` | Custom environment taken from `configMap` or `secret` variables for video recorder | +| `videoRecorder.terminationGracePeriodSeconds` | `30` | Time to graceful terminate container (default: 30s) | +| `videoRecorder.startupProbe` | `{}` | Probe to check pod is started successfully | +| `videoRecorder.livenessProbe` | `{}` | Liveness probe settings | +| `videoRecorder.volume.name.folder` | `video` | Name is used to set for the volume to persist and share output video folder in container | +| `videoRecorder.volume.name.scripts` | `video-scripts` | Name is used to set for the volume to persist and share video recorder scripts in container | +| `videoRecorder.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod | +| `videoRecorder.extraVolumes` | `[]` | Extra Volumes declarations to be used in the pod (can be any supported volume type: ConfigMap, Secret, PVC, NFS, etc.) | +| `videoRecorder.s3` | `See values.yaml` | Container spec for the uploader if `videoRecorder.uploader` is `s3`. Similarly, create for your new uploader | +| `videoRecorder.s3.resources` | `See values.yaml` | Resources for video uploader | +| `videoRecorder.s3.extraEnvironmentVariables` | `` | Custom environment variables for video uploader container | +| `videoRecorder.s3.extraEnvFrom` | `` | Custom environment taken from `configMap` or `secret` variables for video uploader | +| `videoRecorder.s3.extraVolumeMounts` | `[]` | Extra mounts of declared ExtraVolumes into pod of video uploader | +| `customLabels` | `{}` | Custom labels for k8s resources | ### Configuration of KEDA diff --git a/charts/selenium-grid/templates/_helpers.tpl b/charts/selenium-grid/templates/_helpers.tpl index 3b95b017a..4d816fa11 100644 --- a/charts/selenium-grid/templates/_helpers.tpl +++ b/charts/selenium-grid/templates/_helpers.tpl @@ -101,7 +101,6 @@ Is autoscaling using KEDA enabled {{- or .Values.autoscaling.enabled .Values.autoscaling.enableWithExistingKEDA | ternary "true" "" -}} {{- end -}} - {{/* Common pod template */}} @@ -144,7 +143,7 @@ template: - configMapRef: name: {{ .Values.nodeConfigMap.name }} {{- with .node.extraEnvFrom }} - {{- toYaml . | nindent 10 }} + {{- tpl (toYaml .) $ | nindent 10 }} {{- end }} {{- if gt (len .node.ports) 0 }} ports: @@ -157,7 +156,7 @@ template: - name: dshm mountPath: /dev/shm {{- if .node.extraVolumeMounts }} - {{- toYaml .node.extraVolumeMounts | nindent 10 }} + {{- tpl (toYaml .node.extraVolumeMounts) $ | nindent 10 }} {{- end }} {{- with .node.resources }} resources: {{- toYaml . | nindent 10 }} @@ -189,7 +188,7 @@ template: - configMapRef: name: {{ .Values.busConfigMap.name }} {{- with .Values.videoRecorder.extraEnvFrom }} - {{- toYaml . | nindent 8 }} + {{- tpl (toYaml .) $ | nindent 8 }} {{- end }} {{- if gt (len .Values.videoRecorder.ports) 0 }} ports: @@ -201,17 +200,16 @@ template: volumeMounts: - name: dshm mountPath: /dev/shm - - name: video-scripts - mountPath: /opt/bin/video.sh - subPath: video.sh - - name: video - mountPath: /videos - {{- if .Values.videoRecorder.extraVolumeMounts }} - {{- toYaml .Values.videoRecorder.extraVolumeMounts | nindent 8 }} - {{- end }} + {{- tpl (include "seleniumGrid.video.volumeMounts" .) $ | nindent 8 }} {{- with .Values.videoRecorder.resources }} resources: {{- toYaml . | nindent 10 }} {{- end }} + {{- with .Values.videoRecorder.startupProbe }} + startupProbe: {{- toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.videoRecorder.livenessProbe }} + livenessProbe: {{- toYaml . | nindent 10 }} + {{- end }} {{- if .uploader }} - name: uploader image: {{ printf "%s:%s" .uploader.imageName .uploader.imageTag }} @@ -227,14 +225,10 @@ template: {{- end }} {{- with .uploader.extraEnvFrom }} envFrom: - {{- toYaml . | nindent 10 }} + {{- tpl (toYaml .) $ | nindent 10 }} {{- end }} volumeMounts: - - name: video - mountPath: /videos - {{- if .uploader.extraVolumeMounts }} - {{- toYaml .uploader.extraVolumeMounts | nindent 8 }} - {{- end }} + {{- tpl (include "seleniumGrid.video.uploader.volumeMounts" .) $ | nindent 8 }} {{- with .uploader.resources }} resources: {{- toYaml . | nindent 10 }} {{- end }} @@ -267,16 +261,11 @@ template: medium: Memory sizeLimit: {{ default "1Gi" .node.dshmVolumeSizeLimit }} {{- if .node.extraVolumes }} - {{ toYaml .node.extraVolumes | nindent 6 }} + {{ tpl (toYaml .node.extraVolumes) $ | nindent 6 }} {{- end }} {{- if .Values.videoRecorder.enabled }} - - name: video-scripts - configMap: - name: {{ template "seleniumGrid.video.fullname" . }} - defaultMode: 0500 - - name: video - {{- toYaml .Values.videoRecorder.volume | nindent 8 }} - {{- end }} + {{- tpl (include "seleniumGrid.video.volumes" .) $ | nindent 6 }} + {{- end }} {{- end -}} {{/* @@ -310,3 +299,102 @@ deployment preStop hook to deregister from the selenium hub. lifecycle: {{ $lifecycle | nindent 2 }} {{- end -}} {{- end -}} + +{{/* +Default specs of VolumeMounts and Volumes for video recorder +*/}} +{{- define "seleniumGrid.video.volume.name.folder" -}} +{{- $name := default "video" (((.Values.videoRecorder).volume).name).folder -}} +{{- $name -}} +{{- end -}} + +{{- define "seleniumGrid.video.volume.name.scripts" -}} +{{- $name := default "video-scripts" (((.Values.videoRecorder).volume).name).scripts -}} +{{- $name -}} +{{- end -}} + +{{- define "seleniumGrid.video.volumeMounts.default" -}} +- name: {{ include "seleniumGrid.video.volume.name.scripts" . }} + mountPath: /opt/bin/video.sh + subPath: video.sh +- name: {{ include "seleniumGrid.video.volume.name.folder" . }} + mountPath: /videos +{{- end -}} + +{{- define "seleniumGrid.video.volumes.default" -}} +- name: {{ include "seleniumGrid.video.volume.name.scripts" . }} + configMap: + name: {{ template "seleniumGrid.video.fullname" . }} + defaultMode: 0500 +- name: {{ include "seleniumGrid.video.volume.name.folder" . }} + emptyDir: {} +{{- end -}} + +{{- define "seleniumGrid.video.uploader.volumeMounts.default" -}} +- name: {{ include "seleniumGrid.video.volume.name.folder" . }} + mountPath: /videos +{{- end -}} + +{{/* Combine videoRecorder.extraVolumeMounts with the default ones for container video recorder */}} +{{- define "seleniumGrid.video.volumeMounts" -}} +{{- $videoVolumeMounts := list -}} +{{- if .Values.videoRecorder.extraVolumeMounts -}} + {{- range .Values.videoRecorder.extraVolumeMounts -}} + {{- $videoVolumeMounts = append $videoVolumeMounts . -}} + {{- end -}} +{{- end -}} +{{- $defaultVolumeMounts := (include "seleniumGrid.video.volumeMounts.default" . | toString | fromYamlArray ) -}} +{{- $videoVolumeMounts = include "utils.appendDefaultIfNotExist" (dict "currentArray" $videoVolumeMounts "defaultArray" $defaultVolumeMounts "uniqueKey" "mountPath") -}} +{{- not (empty $videoVolumeMounts) | ternary $videoVolumeMounts "" -}} +{{- end -}} + +{{/* Combine videoRecorder.uploader.extraVolumeMounts with the default ones for container video uploader */}} +{{- define "seleniumGrid.video.uploader.volumeMounts" -}} +{{- $videoUploaderVolumeMounts := list -}} +{{- if .uploader.extraVolumeMounts -}} + {{- range .uploader.extraVolumeMounts -}} + {{- $videoUploaderVolumeMounts = append $videoUploaderVolumeMounts . -}} + {{- end -}} +{{- end }} +{{- $defaultVolumeMounts := (include "seleniumGrid.video.uploader.volumeMounts.default" . | toString | fromYamlArray ) -}} +{{- $videoUploaderVolumeMounts = include "utils.appendDefaultIfNotExist" (dict "currentArray" $videoUploaderVolumeMounts "defaultArray" $defaultVolumeMounts "uniqueKey" "mountPath") -}} +{{- not (empty $videoUploaderVolumeMounts) | ternary $videoUploaderVolumeMounts "" -}} +{{- end -}} + +{{/* Combine videoRecorder.extraVolumes with the default ones for the node pod */}} +{{- define "seleniumGrid.video.volumes" -}} +{{- $videoVolumes := list -}} +{{- if .Values.videoRecorder.extraVolumes -}} + {{- range .Values.videoRecorder.extraVolumes -}} + {{- $videoVolumes = append $videoVolumes . -}} + {{- end -}} +{{- end -}} +{{- $defaultVolumes := (include "seleniumGrid.video.volumes.default" . | toString | fromYamlArray ) -}} +{{- $videoVolumes = include "utils.appendDefaultIfNotExist" (dict "currentArray" $videoVolumes "defaultArray" $defaultVolumes "uniqueKey" "name") -}} +{{- not (empty $videoVolumes) | ternary $videoVolumes "" -}} +{{- end -}} + +{{/* +Is used to append default items needed to an array if they are not already present. Args: currentArray, defaultArray, uniqueKey +Usage: {{- $thisArray = include "utils.appendDefaultIfNotExist" (dict "currentArray" $thisArray "defaultArray" $defaultArray "uniqueKey" $uniqueKey }} +*/}} +{{- define "utils.appendDefaultIfNotExist" -}} + {{- $currentArray := index . "currentArray" -}} + {{- $defaultArray := index . "defaultArray" -}} + {{- $uniqueKey := index . "uniqueKey" -}} + {{- range $default := $defaultArray -}} + {{- if eq (len $currentArray) 0 -}} + {{- $currentArray = append $currentArray $default -}} + {{- end -}} + {{- $isExisting := false -}} + {{- range $current := $currentArray -}} + {{- if eq (index $default $uniqueKey | toString) (index $current $uniqueKey | toString) -}} + {{- $isExisting = true -}} + {{- end -}} + {{- end -}} + {{- if not $isExisting -}} + {{- $currentArray = append $currentArray $default -}} + {{- end -}} + {{- end -}} + {{- $currentArray | toYaml -}} +{{- end -}} diff --git a/charts/selenium-grid/values.yaml b/charts/selenium-grid/values.yaml index cb773015e..1388715d6 100644 --- a/charts/selenium-grid/values.yaml +++ b/charts/selenium-grid/values.yaml @@ -726,22 +726,23 @@ edgeNode: sidecars: [] videoRecorder: + enabled: false # Image of video recorder imageName: selenium/video - enabled: false - # Where to upload the video file. Should be set to something like 's3://myvideobucket/' - uploadDestinationPrefix: false - # What uploader to use. See .videRecorder.s3 for how to create a new one. - # uploader: s3 - uploader: false - # Image of video recorder - imageTag: latest + imageTag: ffmpeg-6.0-20231025 # Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images) imagePullPolicy: IfNotPresent + # Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) + + # What uploader to use. See .videRecorder.s3 for how to create a new one. + # uploader: s3 + uploader: false + # Where to upload the video file. Should be set to something like 's3://myvideobucket/' + uploadDestinationPrefix: false ports: - - 5666 + - 9000 resources: requests: memory: "1Gi" @@ -749,19 +750,52 @@ videoRecorder: limits: memory: "1Gi" cpu: "1" - extraEnvironmentVariables: [] + extraEnvironmentVariables: # - name: SE_VIDEO_FOLDER # value: /videos # Custom environment variables by sourcing entire configMap, Secret, etc. for video recorder. extraEnvFrom: - # - configMapRef: - # name: proxy-settings - # - secretRef: - # name: mysecret + # - configMapRef: + # name: proxy-settings + # - secretRef: + # name: mysecret # Wait for pod startup terminationGracePeriodSeconds: 30 + + # Wait for pod startup + startupProbe: {} + # httpGet: + # path: / + # port: 9000 + # failureThreshold: 120 + # periodSeconds: 5 + + # Liveness probe settings + livenessProbe: {} + volume: - emptyDir: {} + # name: + # folder: video + # scripts: video-scripts + # Custom video recorder back-end scripts (video.sh, video_ready.py, etc.) further by ConfigMap. + # NOTE: For the mount point with the name "video", or "video-scripts", it will override the default. For other names, it will be appended. + extraVolumeMounts: [] + # - name: video-scripts + # mountPath: /opt/bin/video.sh + # subPath: custom_video.sh + # - name: video-scripts + # mountPath: /opt/bin/video_ready.py + # subPath: video_ready.py + + extraVolumes: [] + # - name: video-scripts + # configMap: + # name: my-video-scripts-cm + # defaultMode: 0500 + # - name: video + # persistentVolumeClaim: + # claimName: video-pv-claim + # Container spec for the uploader if above it is defined as "uploader: s3" s3: imageName: public.ecr.aws/bitnami/aws-cli @@ -789,17 +823,16 @@ videoRecorder: aws s3 cp --no-progress $FILE $DESTINATION fi done - # extraEnvironmentVariables: - # - name: AWS_ACCESS_KEY_ID - # value: aws_access_key_id - # - name: AWS_SECRET_ACCESS_KEY - # value: aws_secret_access_key - # - name: - # valueFrom: - # secretKeyRef: - # name: secret-name - # key: secret-key - + extraEnvironmentVariables: + # - name: AWS_ACCESS_KEY_ID + # value: aws_access_key_id + # - name: AWS_SECRET_ACCESS_KEY + # value: aws_secret_access_key + # - name: + # valueFrom: + # secretKeyRef: + # name: secret-name + # key: secret-key # Custom labels for k8s resources customLabels: {}