selenium-grid

August 4, 2026 ยท View on GitHub

Version: 0.57.0 Type: application AppVersion: 4.46.0-20260707

A Helm chart for creating a Selenium Grid Server in Kubernetes

Maintainers

NameEmailUrl
SeleniumHQdocker-selenium@seleniumhq.orghttps://github.com/SeleniumHQ

Source Code

Requirements

RepositoryNameVersion
https://cloudpirates-io.github.io/helm-chartspostgresql(postgres)^0.19.0
https://cloudpirates-io.github.io/helm-chartsredis^0.34.0
https://jaegertracing.github.io/helm-chartsjaeger^4.0.0
https://kedacore.github.io/chartskeda^2.20.0
https://prometheus-community.github.io/helm-chartskube-prometheus-stack^88.0.0
https://traefik.github.io/chartstraefik^41.0.0

Values

KeyTypeDefaultDescription
global.K8S_PUBLIC_IPstring""Public IP of the host running Kubernetes cluster. This is used to access the Selenium Grid from outside the cluster when ingress is disabled or enabled without a hostname is set. This is part of constructing SE_NODE_GRID_URL and rewrite URL of se:vnc, se:cdp in the capabilities when ingress.hostname is unset
global.seleniumGrid.imageRegistrystring"selenium"Image registry for all selenium components
global.seleniumGrid.imageTagstring"4.46.0-20260707"Image tag for all selenium components
global.seleniumGrid.nodesImageTagstring"4.46.0-20260707"Image tag for browser's nodes
global.seleniumGrid.videoImageTagstring"ffmpeg-8.1-20260707"Image tag for browser's video recorder
global.seleniumGrid.kubectlImagestring"bitnamilegacy/kubectl:latest"kubectl image is used to execute kubectl commands in utility jobs
global.seleniumGrid.imagePullSecretstring""Pull secret for all components, can be overridden individually
global.seleniumGrid.logLevelstring"INFO"Log level for all components. Possible values describe here: https://www.selenium.dev/documentation/grid/configuration/cli_options/#logging
global.seleniumGrid.defaultNodeStartupProbestring"exec"Set default startup probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
global.seleniumGrid.defaultNodeReadinessProbestring"exec"Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
global.seleniumGrid.defaultNodeLivenessProbestring"exec"Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
global.seleniumGrid.defaultComponentLivenessProbestring"httpGet"Set default liveness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
global.seleniumGrid.stdoutProbeLogboolfalseProbe logs output can be retrieved using kubectl logs. Noted: this will not work if shareProcessNamespace is enabled
global.seleniumGrid.revisionHistoryLimitint10Specify how many old ReplicaSets for this Deployment you want to retain. The rest will be garbage-collected in the background.
global.seleniumGrid.structuredLogsboolfalseWhether to enable structured logging
global.seleniumGrid.plainLogsbooltrueWhether to enable plain logging (both structured and plain can be enabled at the same time, so disable one if only prefer another)
global.seleniumGrid.httpLogsboolfalseEnable http logging. Tracing should be enabled to log http logs.
global.seleniumGrid.updateStrategy.typestring"Recreate"Specify update strategy for all components, can be overridden individually
global.seleniumGrid.updateStrategy.rollingUpdateobject{"maxSurge":1,"maxUnavailable":0}Specify for strategy RollingUpdate
global.seleniumGrid.affinityobject{}Specify affinity for all components, can be overridden individually
global.seleniumGrid.dnsPolicystring""Specify dnsPolicy for all components, can be overridden individually
global.seleniumGrid.dnsConfigobject{}Specify dnsConfig for all components, can be overridden individually
global.seleniumGrid.topologySpreadConstraintslist[]Specify topologySpreadConstraints for all components, can be overridden individually
global.seleniumGrid.sessionRequestTimeoutint300Timeout in seconds. A new incoming session request is added to the queue. Requests sitting in the queue for longer than the configured time will timeout.
global.seleniumGrid.nodeMaxSessionsint1Specify number of max sessions per node. Can be overridden by individual component (this is also set to scaler trigger parameter nodeMaxSessions if autoscaling is enabled)
global.seleniumGrid.nodeDrainAfterSessionCountint0Set number of sessions will be executed in a Node before detaching it from Hub and shutting it down
global.seleniumGrid.nodeEnableManagedDownloadsbooltrueThis causes the Node to auto manage files downloaded for a given session on the Node (https://www.selenium.dev/documentation/webdriver/drivers/remote_webdriver/#enable-downloads-in-the-grid)
global.seleniumGrid.nodeCustomCapabilitiesstring""Setting custom capabilities for matching specific Nodes (https://www.selenium.dev/documentation/grid/configuration/toml_options/#setting-custom-capabilities-for-matching-specific-nodes). If set via Helm CLI, consider use --set-literal to prevent Helm from interpreting the JSON string
global.seleniumGrid.nodeRegisterPeriodint120How long, in seconds, will the Node try to register to the Distributor for the first time. After this period is completed, the Node will not attempt to register again.
global.seleniumGrid.nodeRegisterCycleint5How often, in seconds, the Node will try to register itself for the first time to the Distributor.
tls.createbooltrueCreate a Secret resource for TLS certificate and key. If using an external secret set to false and provide its name in nameOverride below
tls.nameOverridestringnilName of external secret containing the TLS certificate and key
tls.enabledboolfalseEnable or disable TLS for the server components (and ingress proxy)
tls.ingress.enabledboolfalseEnable or disable TLS for the ingress proxy only
tls.ingress.generateTLSboolfalseUse the certificate and key are generated with below settings
tls.ingress.defaultNamestring"SeleniumHQ"
tls.ingress.defaultDaysint3650
tls.ingress.defaultCNstring"www.selenium.dev"
tls.ingress.defaultSANListlist[]
tls.ingress.defaultIPListlist[]
tls.secretFilesImportFromstring"certs/**"Cert files will be imported from chart directory if not specified
tls.secretFilesobject{"server.jks":"","server.pass":"","tls.crt":"","tls.key":""}File names for the TLS certificate and key to import
tls.certVolumeMountPathstring"/opt/selenium/secrets"All files for TLS will be mounted to the server components under directory
tls.certificateFilestring"tls.crt"Cert file will be mounted to server components as a volume
tls.privateKeyFilestring"tls.key"Key file will be mounted to server components as a volume
tls.trustStoreFilestring"server.jks"Trust store file will be mounted to server components as a volume
tls.trustStorePasswordFilestring"server.pass"Trust store password file will be mounted to server components as a volume
tls.trustStorePasswordstring""Recommend to get from trustStorePasswordFile instead of plain text via env variable
tls.disableHostnameVerificationbooltrueDisable verification the hostname included in the server's TLS/SSL certificates matches the hostnames provided
registrationSecret.enabledboolfalseEnable feature node registration secret to make sure that the node is one you control and not a rouge node
registrationSecret.valuestring"HappyTesting"The secret value to be used for node registration
basicAuth.createbooltrueCreate a secret resource for basic auth. If using an external secret, set to false and provide its name in nameOverride below
basicAuth.nameOverridestringnilExternal secret containing the basic auth username and password for reference
basicAuth.enabledboolfalseEnable or disable basic auth for the Hub/Router
basicAuth.usernamestring"admin"Username for basic auth
basicAuth.passwordstring"admin"Password for basic auth
basicAuth.embeddedUrlboolfalseEmbed the basic auth "username:password@" in few URLs e.g. SE_NODE_GRID_URL
basicAuth.annotationsobject{}Annotations for basic auth secret resource
isolateComponentsboolfalseDeploy Router, Distributor, EventBus, SessionMap and Nodes separately
serviceAccount.createbooltrueCreate a service account for all components. If using an external service account, set to false and provide its name in nameOverride below
serviceAccount.nameOverridestringnilOverride to use an external service account
serviceAccount.annotationsobject{}Annotations for the service account
rbacRoleobject{"annotations":{},"create":true,"nameOverride":null,"rules":[{"apiGroups":["keda.sh"],"resources":["scaledjobs"],"verbs":["get","list","patch","update","delete"]},{"apiGroups":["keda.sh"],"resources":["scaledobjects"],"verbs":["get","list","patch","update","delete"]},{"apiGroups":["keda.sh"],"resources":["triggerauthentications"],"verbs":["get","list","patch","update","delete"]},{"apiGroups":["autoscaling"],"resources":["horizontalpodautoscalers"],"verbs":["get","list","patch","update","delete"]}]}RBAC settings for patching finalizers KEDA scaled resources
rbacRole.createbooltrueEnable to create RBAC role to access few KEDA resources. If using an external role, set to false and provide its name in nameOverride below
rbacRole.nameOverridestringnilOverride resource name or provide an external role name
rbacRoleBindingobject{"annotations":{},"create":true,"nameOverride":null,"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role"},"subjects":[{"kind":"ServiceAccount"}]}RBAC role binding settings for patching finalizers KEDA scaled resources
rbacRoleBinding.createbooltrueEnable to create RBAC role binding to a service account. If using an external role binding, set to false and provide its name in nameOverride below
rbacRoleBinding.nameOverridestringnilOverride resource name or provide an external role binding name
ingress.enabledbooltrueEnable to create ingress resource
ingress.enableWithControllerboolfalseEnable ingress resource with automatically installing Traefik Ingress Controller
ingress.classNamestring""Name of ingress class to select which controller will implement ingress resource
ingress.traefik.enabledbooltrueEnable corresponding annotations for Traefik Ingress Controller
ingress.traefik.entryPointsstring""Comma-separated Traefik entrypoints for the ingress router. Empty means auto-select (web or websecure) based on TLS mode.
ingress.traefik.middlewaresstring""Optional Traefik middlewares in the format <namespace>-<name>@kubernetescrd
ingress.traefik.prioritystring""Optional Traefik router priority value
ingress.traefik.pathMatcherstring"PathPrefix"Optional Traefik router path matcher (e.g. PathPrefix, Path, PathRegexp)
ingress.traefik.tls.enabledbooltrueAdd traefik.ingress.kubernetes.io/router.tls: "true" when ingress TLS is enabled
ingress.traefik.tls.optionsstring""Optional Traefik TLS options in the format <namespace>-<name>@kubernetescrd
ingress.traefik.tls.certResolverstring""Optional Traefik certificate resolver name
ingress.traefik.service.useHttpsSchemebooltrueAdd traefik.ingress.kubernetes.io/service.serversscheme: "https" to backend Service when Grid server TLS is enabled
ingress.traefik.service.sticky.cookie.enabledboolfalseEnable Traefik sticky cookie for service load-balancing
ingress.traefik.serversTransport.enabledbooltrueEnable creating a Traefik ServersTransport resource and auto-link it to backend Service annotation traefik.ingress.kubernetes.io/service.serverstransport
ingress.traefik.serversTransport.nameOverridestring""Override ServersTransport resource name. Defaults to <ingress-fullname>-serverstransport
ingress.traefik.serversTransport.referencestring""Use an existing ServersTransport reference <namespace>-<name>@kubernetescrd when enabled is false
ingress.traefik.serversTransport.specobject{"disableHTTP2":true,"forwardingTimeouts":{"dialTimeout":"3600s","idleConnTimeout":"3600s","responseHeaderTimeout":"3600s"},"insecureSkipVerify":true}Pass all spec support in Traefik ServersTransport
ingress.traefik.serversTransport.spec.forwardingTimeouts.dialTimeoutstring"3600s"Maximum duration Traefik waits when establishing a connection to backend servers
ingress.traefik.serversTransport.spec.forwardingTimeouts.responseHeaderTimeoutstring"3600s"Maximum duration Traefik waits for backend response headers
ingress.traefik.serversTransport.spec.forwardingTimeouts.idleConnTimeoutstring"3600s"Maximum duration an idle keep-alive backend connection remains open
ingress.ports.httpint80Specify HTTP port is exposed by ingress controller
ingress.ports.httpsint443Specify HTTPS port is exposed by ingress controller
ingress.annotationsobject{}Custom annotations for ingress resource
ingress.hostnamestring""Default host for the ingress resource
ingress.pathTypestring"Prefix"Default path type for the ingress resource
ingress.pathslist[]List of paths for the ingress resource. This will override the default path
ingress.tlslist[]TLS backend configuration for ingress resource
busConfigMap.nameOverridestringnilOverride the name of the bus configMap
busConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
busConfigMap.annotationsobject{}Custom annotations for configmap
sessionMapConfigMap.nameOverridestringnilOverride the name of the session map configMap
sessionMapConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
sessionMapConfigMap.annotationsobject{}Custom annotations for configmap
sessionQueueConfigMap.nameOverridestringnilOverride the name of the session map configMap
sessionQueueConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
sessionQueueConfigMap.annotationsobject{}Custom annotations for configmap
distributorConfigMap.nameOverridestringnilOverride the name of the distributor configMap
distributorConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
distributorConfigMap.defaultModeint493Default mode for ConfigMap is mounted as file
distributorConfigMap.extraScriptsImportFromstring"configs/distributor/**"Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
distributorConfigMap.extraScriptsDirectorystring"/opt/bin"Directory where the extra scripts are mounted to
distributorConfigMap.extraScripts."distributorProbe.sh"string""
distributorConfigMap.scriptVolumeMountNamestringnilName of volume mount is used to mount scripts in the ConfigMap. Default is same as this configMap name
distributorConfigMap.annotationsobject{}Custom annotations for configmap
routerConfigMap.nameOverridestringnilOverride the name of the router configMap
routerConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
routerConfigMap.defaultModeint493Default mode for ConfigMap is mounted as file
routerConfigMap.extraScriptsImportFromstring"configs/router/**"Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
routerConfigMap.extraScriptsDirectorystring"/opt/bin"Directory where the extra scripts are mounted to
routerConfigMap.extraScripts."routerGraphQLUrl.sh"string""
routerConfigMap.extraScripts."routerProbe.sh"string""
routerConfigMap.scriptVolumeMountNamestringnilName of volume mount is used to mount scripts in the ConfigMap
routerConfigMap.annotationsobject{}Custom annotations for configmap
nodeConfigMap.nameOverridestringnilOverride the name of the node configMap
nodeConfigMap.dataobject{"SE_JAVA_OPTS":"-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=50"}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
nodeConfigMap.defaultModeint493Default mode for ConfigMap is mounted as file
nodeConfigMap.extraScriptsImportFromstring"configs/node/**"Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
nodeConfigMap.extraScriptsDirectorystring"/opt/bin"Directory where the extra scripts are mounted to
nodeConfigMap.extraScripts."nodeGridUrl.sh"string""
nodeConfigMap.extraScripts."nodePreStop.sh"string""
nodeConfigMap.extraScripts."nodeProbe.sh"string""
nodeConfigMap.extraScripts."nodeProbeReadiness.sh"string""
nodeConfigMap.scriptVolumeMountNamestringnilName of volume mount is used to mount scripts in the ConfigMap
nodeConfigMap.leftoversCleanup.enabledboolfalseEnable feature automatic browser leftovers cleanup stuck browser processes, tmp files
nodeConfigMap.leftoversCleanup.jobIntervalInSecsint3600Interval in seconds to run the cleanup job
nodeConfigMap.leftoversCleanup.browserElapsedTimeInSecsint7200Browser process elapsed time in seconds to consider as leftovers
nodeConfigMap.leftoversCleanup.tmpFilesAfterDaysint1Tmp files elapsed time in days to consider as leftovers
nodeConfigMap.annotationsobject{}Custom annotations for configmap
recorderConfigMap.nameOverridestringnilOverride the name of the recorder configMap
recorderConfigMap.defaultModeint493Default mode for ConfigMap is mounted as file
recorderConfigMap.extraScriptsImportFromstring"configs/recorder/**"Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
recorderConfigMap.extraScriptsDirectorystring"/opt/bin"Directory where the extra scripts are mounted to
recorderConfigMap.extraScriptsstringnilList of extra scripts to be mounted to the container. Format as filename: content
recorderConfigMap.scriptVolumeMountNamestringnilName of volume mount is used to mount scripts in the ConfigMap
recorderConfigMap.videoVolumeMountNamestring"videos"Directory in container where the videos are stored
recorderConfigMap.annotationsobject{}Custom annotations for configmap
uploaderConfigMap.nameOverridestringnilOverride the name of the uploader configMap
uploaderConfigMap.defaultModeint493Default mode for ConfigMap is mounted as file
uploaderConfigMap.extraScriptsImportFromstring"configs/uploader/**"Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
uploaderConfigMap.extraScriptsDirectorystring"/opt/selenium"Directory where the extra scripts are mounted to
uploaderConfigMap.extraScriptsobject{"upload.sh":""}List of extra scripts to be mounted to the container. Format as filename: content
uploaderConfigMap.secretFilesobject{"upload.conf":"[sample]"}Extra files stored in Secret to be mounted to the container.
uploaderConfigMap.scriptVolumeMountNamestringnilName of volume mount is used to mount scripts in the ConfigMap
uploaderConfigMap.secretVolumeMountNamestringnilName of Secret is used to store the secretFiles
uploaderConfigMap.annotationsobject{}Custom annotations for configmap
loggingConfigMapobject{"annotations":{},"data":{},"nameOverride":null}ConfigMap that contains common environment variables for Logging (https://www.selenium.dev/documentation/grid/configuration/cli_options/#logging)
loggingConfigMap.nameOverridestringnilOverride the name of the logging configMap
loggingConfigMap.dataobject{}Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
loggingConfigMap.annotationsobject{}Custom annotations for configmap
serverConfigMap.nameOverridestringnilOverride the name of the server configMap
serverConfigMap.dataobject{"SE_SUPERVISORD_LOG_LEVEL":"info"}Extra common environment variables for Server (https://www.selenium.dev/documentation/grid/configuration/cli_options/#server) to server configMap
serverConfigMap.annotationsobject{}Custom annotations for configmap
secrets.createbooltrueCreate the default secret for all components. If using an external secret, set to false and provide its name in nameOverride below
secrets.nameOverridestringnilOverride to use an external secret
secrets.dataobject{"SE_VNC_PASSWORD":"secret"}Extra environment variables set to the secret
secrets.annotationsobject{}Custom annotations for secret
components.router.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
components.router.imageNamestring"router"Router image name
components.router.imageTagstringnilRouter image tag (this overwrites global.seleniumGrid.imageTag parameter)
components.router.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
components.router.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
components.router.subPathstring""Custom sub path for Router
components.router.disableUIboolfalseDisable the Grid UI
components.router.extraEnvironmentVariableslist[]Specify extra environment variables for Router
components.router.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Router
components.router.affinityobject{}Specify affinity for router pods, this overwrites global.seleniumGrid.affinity parameter
components.router.topologySpreadConstraintslist[]Specify topologySpreadConstraints for router pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
components.router.dnsPolicystring""Specify dnsPolicy for router pods, this overwrites global.seleniumGrid.dnsPolicy parameter
components.router.dnsConfigobject{}Specify dnsConfig for router pods, this overwrites global.seleniumGrid.dnsConfig parameter
components.router.annotationsobject{}Custom annotations for router pods
components.router.portint4444Router container port
components.router.nodePortint30444Router expose NodePort
components.router.startupProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":5,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Startup probe settings
components.router.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":12,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
components.router.livenessProbeobject{"enabled":true,"failureThreshold":30,"initialDelaySeconds":60,"path":"/readyz","periodSeconds":60,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
components.router.resourcesobject{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"512Mi"}}Resources for router container
components.router.replicasint1Number of replicas
components.router.securityContextobject{}SecurityContext for router container
components.router.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
components.router.clusterIPstring""Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
components.router.externalNamestring""Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
components.router.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
components.router.serviceAnnotationsobject{}Custom annotations for router service
components.router.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
components.router.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
components.router.tolerationslist[]Tolerations for router pods
components.router.nodeSelectorobject{}Node selector for router pods
components.router.priorityClassNamestring""Priority class name for router pods
components.distributor.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
components.distributor.imageNamestring"distributor"Distributor image name
components.distributor.imageTagstringnilDistributor image tag (this overwrites global.seleniumGrid.imageTag parameter)
components.distributor.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
components.distributor.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
components.distributor.newSessionThreadPoolSizestringnilConfigure fixed-sized thread pool for the Distributor to create new sessions as it consumes new session requests from the queue
components.distributor.slotSelectorStrategystring""Full class name of non-default slot selector. This is used to select a slot in a Node once the Node has been matched
components.distributor.externalDatastoreobject{"backend":"redis","enabled":false,"redis":{"implementation":"org.openqa.selenium.grid.distributor.redis.RedisBackedDistributor","url":"redis://{{ $.Release.Name }}-redis:6379"}}Configure external datastore for Distributor. When enabled, all replicas share state through the backend (node registrations, slot reservations, health-check coordination), allowing zero-downtime rolling restarts.
components.distributor.externalDatastore.enabledboolfalseEnable external datastore for Distributor
components.distributor.externalDatastore.backendstring"redis"Backend for external datastore (supported: redis)
components.distributor.externalDatastore.redisobject{"implementation":"org.openqa.selenium.grid.distributor.redis.RedisBackedDistributor","url":"redis://{{ $.Release.Name }}-redis:6379"}Configure Redis backed Distributor
components.distributor.extraEnvironmentVariableslist[]Specify extra environment variables for Distributor
components.distributor.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Distributor
components.distributor.affinityobject{}Specify affinity for distributor pods, this overwrites global.seleniumGrid.affinity parameter
components.distributor.topologySpreadConstraintslist[]Specify topologySpreadConstraints for Distributor pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
components.distributor.dnsPolicystring""Specify dnsPolicy for Distributor pods, this overwrites global.seleniumGrid.dnsPolicy parameter
components.distributor.dnsConfigobject{}Specify dnsConfig for Distributor pods, this overwrites global.seleniumGrid.dnsConfig parameter
components.distributor.annotationsobject{}Custom annotations for Distributor pods
components.distributor.portint5553Distributor container port
components.distributor.nodePortint30553Distributor expose NodePort
components.distributor.startupProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":5,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Startup probe settings
components.distributor.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":12,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
components.distributor.livenessProbeobject{"enabled":true,"failureThreshold":30,"initialDelaySeconds":60,"path":"/readyz","periodSeconds":60,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
components.distributor.resourcesobject{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"512Mi"}}Resources for Distributor container
components.distributor.replicasint1Number of replicas
components.distributor.securityContextobject{}SecurityContext for Distributor container
components.distributor.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
components.distributor.serviceAnnotationsobject{}Custom annotations for Distributor service
components.distributor.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
components.distributor.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
components.distributor.tolerationslist[]Tolerations for Distributor pods
components.distributor.nodeSelectorobject{}Node selector for Distributor pods
components.distributor.priorityClassNamestring""Priority class name for Distributor pods
components.eventBus.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
components.eventBus.imageNamestring"event-bus"Event Bus image name
components.eventBus.imageTagstringnilEvent Bus image tag (this overwrites global.seleniumGrid.imageTag parameter)
components.eventBus.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
components.eventBus.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
components.eventBus.extraEnvironmentVariableslist[]Specify extra environment variables for Event Bus
components.eventBus.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Event Bus
components.eventBus.affinityobject{}Specify affinity for Event Bus pods, this overwrites global.seleniumGrid.affinity parameter
components.eventBus.topologySpreadConstraintslist[]Specify topologySpreadConstraints for Event Bus pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
components.eventBus.dnsPolicystring""Specify dnsPolicy for Event Bus pods, this overwrites global.seleniumGrid.dnsPolicy parameter
components.eventBus.dnsConfigobject{}Specify dnsConfig for Event Bus pods, this overwrites global.seleniumGrid.dnsConfig parameter
components.eventBus.annotationsobject{}Custom annotations for Event Bus pods
components.eventBus.portint5557Event Bus container port
components.eventBus.nodePortint30557Event Bus expose NodePort
components.eventBus.publishPortint4442Container port where events are published
components.eventBus.publishNodePortint30442NodePort exposed where events are published
components.eventBus.subscribePortint4443Container port where to subscribe for events
components.eventBus.subscribeNodePortint30443NodePort exposed where to subscribe for events
components.eventBus.resourcesobject{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"512Mi"}}Resources for event-bus container
components.eventBus.replicasint1Number of replicas
components.eventBus.securityContextobject{}SecurityContext for event-bus container
components.eventBus.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
components.eventBus.clusterIPstring""Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
components.eventBus.externalNamestring""Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
components.eventBus.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
components.eventBus.serviceAnnotationsobject{}Custom annotations for Event Bus service
components.eventBus.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
components.eventBus.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
components.eventBus.tolerationslist[]Tolerations for Event Bus pods
components.eventBus.nodeSelectorobject{}Node selector for Event Bus pods
components.eventBus.priorityClassNamestring""Priority class name for Event Bus pods
components.sessionMap.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
components.sessionMap.imageNamestring"sessions"Session Map image name
components.sessionMap.imageTagstringnilSession Map image tag (this overwrites global.seleniumGrid.imageTag parameter)
components.sessionMap.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
components.sessionMap.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
components.sessionMap.extraEnvironmentVariableslist[]Specify extra environment variables for Session Map
components.sessionMap.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Session Map
components.sessionMap.affinityobject{}Specify affinity for Session Map pods, this overwrites global.seleniumGrid.affinity parameter
components.sessionMap.topologySpreadConstraintslist[]Specify topologySpreadConstraints for Session Map pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
components.sessionMap.dnsPolicystring""Specify dnsPolicy for Session Map pods, this overwrites global.seleniumGrid.dnsPolicy parameter
components.sessionMap.dnsConfigobject{}Specify dnsConfig for Session Map pods, this overwrites global.seleniumGrid.dnsConfig parameter
components.sessionMap.annotationsobject{}Custom annotations for Session Map pods
components.sessionMap.portint5556Session Map container port
components.sessionMap.resourcesobject{"limits":{"cpu":"1","memory":"1Gi"},"requests":{"cpu":"0.5","memory":"512Mi"}}Resources for Session Map container
components.sessionMap.replicasint1Number of replicas
components.sessionMap.securityContextobject{}SecurityContext for Session Map container
components.sessionMap.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
components.sessionMap.serviceAnnotationsobject{}Custom annotations for Session Map service
components.sessionMap.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
components.sessionMap.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
components.sessionMap.tolerationslist[]Tolerations for Session Map pods
components.sessionMap.nodeSelectorobject{}Node selector for Session Map pods
components.sessionMap.priorityClassNamestring""Priority class name for Session Map pods
components.sessionMap.externalDatastore.enabledboolfalseEnable external datastore for Session Map
components.sessionMap.externalDatastore.backendstring"redis"Backend for external datastore (supported: postgresql, redis). Details for each backend are described below config key
components.sessionMap.externalDatastore.postgresqlobject{"implementation":"org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap","jdbcPassword":"seluser","jdbcUrl":"jdbc:postgresql://{{ $.Release.Name }}-postgresql:5432/selenium_sessions","jdbcUser":"seluser"}Configure database backed Session Map (https://www.selenium.dev/documentation/grid/advanced_features/external_datastore/#database-backed-session-map)
components.sessionMap.externalDatastore.redisobject{"hostname":"{{ $.Release.Name }}-redis","implementation":"org.openqa.selenium.grid.sessionmap.redis.RedisBackedSessionMap","port":"6379","scheme":"redis"}Configure Redis backed Session Map (https://www.selenium.dev/documentation/grid/advanced_features/external_datastore/#redis-backed-session-map)
components.sessionQueue.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
components.sessionQueue.imageNamestring"session-queue"Session Queue image name
components.sessionQueue.imageTagstringnilSession Queue image tag (this overwrites global.seleniumGrid.imageTag parameter)
components.sessionQueue.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
components.sessionQueue.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
components.sessionQueue.sessionRequestTimeoutstring""Override global sessionRequestTimeout
components.sessionQueue.externalDatastoreobject{"backend":"redis","enabled":false,"redis":{"implementation":"org.openqa.selenium.grid.sessionqueue.redis.RedisBackedNewSessionQueue","url":"redis://{{ $.Release.Name }}-redis:6379"}}Configure external datastore for SessionQueue. When enabled, all replicas share the queue state in Redis, allowing the tier to scale out horizontally behind a load balancer or Kubernetes Service.
components.sessionQueue.externalDatastore.enabledboolfalseEnable external datastore for SessionQueue
components.sessionQueue.externalDatastore.backendstring"redis"Backend for external datastore (supported: redis)
components.sessionQueue.externalDatastore.redisobject{"implementation":"org.openqa.selenium.grid.sessionqueue.redis.RedisBackedNewSessionQueue","url":"redis://{{ $.Release.Name }}-redis:6379"}Configure Redis backed SessionQueue
components.sessionQueue.extraEnvironmentVariableslist[]Specify extra environment variables for Session Queue
components.sessionQueue.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Session Queue
components.sessionQueue.affinityobject{}Specify affinity for Session Queue pods, this overwrites global.seleniumGrid.affinity parameter
components.sessionQueue.topologySpreadConstraintslist[]Specify topologySpreadConstraints for Session Queue pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
components.sessionQueue.dnsPolicystring""Specify dnsPolicy for Session Queue pods, this overwrites global.seleniumGrid.dnsPolicy parameter
components.sessionQueue.dnsConfigobject{}Specify dnsConfig for Session Queue pods, this overwrites global.seleniumGrid.dnsConfig parameter
components.sessionQueue.annotationsobject{}Custom annotations for Session Queue pods
components.sessionQueue.portint5559Session Queue container port
components.sessionQueue.nodePortint30559Session Queue expose NodePort
components.sessionQueue.resourcesobject{"limits":{"cpu":"1","memory":"1Gi"},"requests":{"cpu":"0.5","memory":"512Mi"}}Resources for Session Queue container
components.sessionQueue.replicasint1Number of replicas
components.sessionQueue.securityContextobject{}SecurityContext for Session Queue container
components.sessionQueue.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
components.sessionQueue.serviceAnnotationsobject{}Custom annotations for Session Queue service
components.sessionQueue.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
components.sessionQueue.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
components.sessionQueue.tolerationslist[]Tolerations for Session Queue pods
components.sessionQueue.nodeSelectorobject{}Node selector for Session Queue pods
components.sessionQueue.priorityClassNamestring""Priority class name for Session Queue pods
components.extraEnvironmentVariableslist[]Custom environment variables for all components
components.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for all components
components.extraVolumeMountslist[]Extra volume mounts for component container
components.extraVolumeslist[]Extra volumes for component pod
hub.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
hub.imageNamestring"hub"Selenium Hub image name
hub.imageTagstringnilSelenium Hub image tag (this overwrites global.seleniumGrid.imageTag parameter)
hub.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
hub.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
hub.affinityobject{}Specify affinity for Selenium Hub pods, this overwrites global.seleniumGrid.affinity parameter
hub.topologySpreadConstraintslist[]Specify topologySpreadConstraints for Hub pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
hub.dnsPolicystring""Specify dnsPolicy for Hub pods, this overwrites global.seleniumGrid.dnsPolicy parameter
hub.dnsConfigobject{}Specify dnsConfig for Hub pods, this overwrites global.seleniumGrid.dnsConfig parameter
hub.annotationsobject{}Custom annotations for Selenium Hub pods
hub.labelsobject{}Custom labels for Selenium Hub pods
hub.disableUIboolfalseDisable the Grid UI
hub.sessionRequestTimeoutstring""Override global sessionRequestTimeout
hub.newSessionThreadPoolSizestringnilConfigure fixed-sized thread pool for the Distributor to create new sessions as it consumes new session requests from the queue
hub.publishPortint4442Port where events are published
hub.publishNodePortint31442NodePort exposed where events are published
hub.subscribePortint4443Port where to subscribe for events
hub.subscribeNodePortint32443NodePort exposed where to subscribe for events
hub.portint4444Selenium Hub port
hub.nodePortint31444Selenium Hub expose NodePort
hub.startupProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":5,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Startup probe settings
hub.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":12,"path":"/readyz","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
hub.livenessProbeobject{"enabled":true,"failureThreshold":30,"initialDelaySeconds":60,"path":"/readyz","periodSeconds":60,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
hub.subPathstring""Custom sub path for the hub deployment
hub.slotSelectorStrategystring""Full class name of non-default slot selector. This is used to select a slot in a Node once the Node has been matched
hub.extraEnvironmentVariableslist[]Custom environment variables for selenium-hub
hub.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for selenium-hub
hub.extraVolumeMountslist[]Extra volume mounts for Hub container
hub.extraVolumeslist[]Extra volumes for Hub pod
hub.resourcesobject{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"0.5","memory":"1Gi"}}Resources for selenium-hub container
hub.replicasint1Number of replicas
hub.securityContextobject{}SecurityContext for selenium-hub container
hub.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
hub.clusterIPstring""Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
hub.externalNamestring""Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
hub.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
hub.serviceAnnotationsobject{}Custom annotations for Selenium Hub service
hub.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
hub.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
hub.tolerationslist[]Tolerations for selenium-hub pods
hub.nodeSelectorobject{}Node selector for selenium-hub pods
hub.priorityClassNamestring""Priority class name for selenium-hub pods
tracing.enabledboolfalseEnable tracing. Implies installing Jaeger
tracing.enabledWithExistingEndpointboolfalseEnable tracing without automatically installing Jaeger
tracing.exporterstring"otlp"Exporter type for tracing. Recommended otlp for wide compatibility with observability backends (e.g. Jaeger, Elastic, etc.)
tracing.exporterEndpointstring"http://{{ .Release.Name }}-jaeger:4317"Exporter endpoint for pushing trace data
tracing.globalAutoConfigurebooltrueEnable global auto-configuration for tracing
tracing.ingress.enabledbooltrueEnable ingress resource to access the Jaeger
tracing.ingress.annotationsstringnilAnnotations for Jaeger ingress resource
tracing.ingress.pathslist[{"backend":{"service":{"name":"{{ .Release.Name }}-jaeger","port":{"number":16686}}},"path":"/jaeger","pathType":"Prefix"}]Configure paths for Jaeger ingress resource
monitoring.enabledboolfalse
monitoring.enabledWithExistingAgentboolfalse
monitoring.exporter.nameOverridestring""
monitoring.exporter.portint9615Port the built-in Prometheus exporter listens on inside the Hub/Router container
monitoring.grafana.dashboardsobject{"enabled":true}When true, provision a ConfigMap with Grafana dashboards (requires Grafana sidecar with grafana_dashboard label)
monitoring.annotationsobject{}
monitoring.serviceMonitorobject{"annotations":{},"enabled":true,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scrapeTimeout":"10s"}ServiceMonitor configuration for Prometheus Operator
monitoring.serviceMonitor.enabledbooltrueEnable ServiceMonitor resource
monitoring.serviceMonitor.namespacestring""Namespace to deploy the ServiceMonitor into (defaults to release namespace)
monitoring.serviceMonitor.labelsobject{}Additional labels for the ServiceMonitor
monitoring.serviceMonitor.annotationsobject{}Additional annotations for the ServiceMonitor
monitoring.serviceMonitor.pathstring"/metrics"Metrics scrape path
monitoring.serviceMonitor.intervalstring"30s"Scrape interval
monitoring.serviceMonitor.scrapeTimeoutstring"10s"Scrape timeout
monitoring.serviceMonitor.relabelingslist[]RelabelConfigs to apply to samples before scraping
monitoring.serviceMonitor.metricRelabelingslist[]MetricRelabelConfigs to apply to samples before ingestion
monitoring.podMonitorobject{"annotations":{},"enabled":true,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scrapeTimeout":"10s"}PodMonitor configuration for Prometheus Operator (alternative to ServiceMonitor)
monitoring.podMonitor.enabledbooltrueEnable PodMonitor resource
monitoring.podMonitor.namespacestring""Namespace to deploy the PodMonitor into (defaults to release namespace)
monitoring.podMonitor.labelsobject{}Additional labels for the PodMonitor
monitoring.podMonitor.annotationsobject{}Additional annotations for the PodMonitor
monitoring.podMonitor.pathstring"/metrics"Metrics scrape path
monitoring.podMonitor.intervalstring"30s"Scrape interval
monitoring.podMonitor.scrapeTimeoutstring"10s"Scrape timeout
monitoring.podMonitor.relabelingslist[]RelabelConfigs to apply to samples before scraping
monitoring.podMonitor.metricRelabelingslist[]MetricRelabelConfigs to apply to samples before ingestion
autoscaling.enabledboolfalseEnable autoscaling. Implies installing KEDA
autoscaling.enableWithExistingKEDAboolfalseEnable autoscaling without automatically installing KEDA
autoscaling.scalingTypestring"job"Which type of KEDA scaling to use: job or deployment
autoscaling.setReplicasInSpecbooltrueForce remove replicas in deployment spec in case ArgoCD with AutoSync enabled will try to resolve back to desired state
autoscaling.slotSelectorStrategystring"org.openqa.selenium.grid.distributor.selector.GreedySlotSelector"Strategy for Selenium Hub/Distributor select slot to assign to a new session.
autoscaling.authenticationRefobject{"annotations":{"helm.sh/hook":"post-install,post-upgrade,post-rollback","helm.sh/hook-weight":"0"},"name":""}Specify an external KEDA TriggerAuthentication resource is used for scaler triggers config. Apply for all browser nodes
autoscaling.useCachedMetricsboolfalseEnables caching of metric values during polling interval (as specified in .spec.pollingInterval, the default: false in KEDA).
autoscaling.triggerNamestring""Set trigger name.
autoscaling.metricTypestring""The type of metric that should be used (The default: AverageValue in KEDA)
autoscaling.annotationsobject{"helm.sh/hook":"post-install,post-upgrade,post-rollback","helm.sh/hook-weight":"1"}Annotations for KEDA resources: ScaledObject and ScaledJob
autoscaling.patchObjectFinalizers.nameOverridestringnilOverride the name of the patch job
autoscaling.patchObjectFinalizers.enabledbooltrueEnable patching finalizers for KEDA scaled resources. Workaround for Hook post-upgrade selenium-grid/templates/x-node-hpa.yaml failed: object is being deleted: scaledobjects.keda.sh "x" already exists
autoscaling.patchObjectFinalizers.activeDeadlineSecondsint600Deadline (in seconds) for patch job to complete
autoscaling.patchObjectFinalizers.annotationsobject{"helm.sh/hook":"post-install,post-upgrade,post-rollback,pre-delete","helm.sh/hook-delete-policy":"hook-succeeded,before-hook-creation"}Annotations for patch job
autoscaling.patchObjectFinalizers.deleteObjectsScriptstring""Define your custom script to replace the default script
autoscaling.patchObjectFinalizers.patchFinalizersScriptstring""Define your custom script to replace the default script
autoscaling.patchObjectFinalizers.defaultModeint493Default mode for ConfigMap is mounted as file
autoscaling.patchObjectFinalizers.serviceAccountstring""Define an external service account name contains permissions to patch KEDA scaled resources
autoscaling.patchObjectFinalizers.imagePullSecretstring""Custom pull secret for container in patch job
autoscaling.patchObjectFinalizers.resourcesobject{"limits":{"cpu":"200m","memory":"500Mi"},"requests":{"cpu":"100m","memory":"200Mi"}}Define resources for container in patch job
autoscaling.patchObjectFinalizers.nodeSelectorobject{}Node selector for the patch job
autoscaling.patchObjectFinalizers.tolerationslist[]Tolerations for the patch job
autoscaling.externalScaler.enabledbooltrueEnable the external scaler instead of the built-in selenium-grid trigger
autoscaling.externalScaler.nameOverridestring""Override the generated external scaler resource name
autoscaling.externalScaler.imageRegistrystring""Container image registry for the external scaler (defaults to global registry)
autoscaling.externalScaler.imageNamestring"keda-external-scaler"Container image name for the external scaler
autoscaling.externalScaler.imageTagstring""Container image tag for the external scaler (defaults to global.seleniumGrid.imageTag, like other grid images)
autoscaling.externalScaler.imagePullPolicystring"IfNotPresent"Image pull policy
autoscaling.externalScaler.portint8080gRPC port the external scaler listens on
autoscaling.externalScaler.replicasint1Number of external scaler replicas
autoscaling.externalScaler.gridHttpTimeoutstring"3s"Per-request timeout for the scaler's Grid GraphQL queries
autoscaling.externalScaler.annotationsobject{}Annotations for the external scaler Deployment/Service
autoscaling.externalScaler.extraEnvlist[]Extra environment variables for the external scaler container
autoscaling.externalScaler.nodeSelectorobject{}Node selector for the external scaler
autoscaling.externalScaler.tolerationslist[]Tolerations for the external scaler
autoscaling.externalScaler.resourcesobject{"limits":{"cpu":"200m","memory":"128Mi"},"requests":{"cpu":"50m","memory":"32Mi"}}Resources for the external scaler container
autoscaling.defaultTriggerTypestring"selenium-grid"Default type of trigger to use (selenium-grid is build-in scaler in KEDA)
autoscaling.defaultTriggerNamestring"seleniumGrid"Default alias name of trigger type (which is used in formula if you want to add scalingModifiers to advanced spec)
autoscaling.scaledOptionsobject{"maxReplicaCount":24,"minReplicaCount":0,"pollingInterval":20,"triggers":[]}Options for KEDA scaled resources (keep only common options used for both ScaledJob and ScaledObject)
autoscaling.scaledOptions.minReplicaCountint0Minimum number of replicas
autoscaling.scaledOptions.maxReplicaCountint24Maximum number of replicas
autoscaling.scaledOptions.pollingIntervalint20Polling interval in seconds
autoscaling.scaledOptions.triggerslist[]List of triggers. Be careful, the default trigger of selenium-grid will be overwritten if you specify this
autoscaling.scaledJobOptions.scalingStrategy.strategystring"accurate"Scaling strategy for KEDA ScaledJob - https://keda.sh/docs/latest/reference/scaledjob-spec/#scalingstrategy
autoscaling.scaledJobOptions.successfulJobsHistoryLimitint0Number of Completed jobs should be kept
autoscaling.scaledJobOptions.failedJobsHistoryLimitint0Number of Failed jobs should be kept (for troubleshooting purposes)
autoscaling.scaledJobOptions.jobTargetRefobject{"backoffLimit":0,"completions":1,"parallelism":1}Specify job target ref for KEDA ScaledJob
autoscaling.scaledObjectOptions.advanced.restoreToOriginalReplicaCountbooltrue
autoscaling.scaledObjectOptions.scaleTargetRef.kindstring"Deployment"Target reference for KEDA ScaledObject
autoscaling.scaledOverProvisionRatiostring""
autoscaling.terminationGracePeriodSecondsint3600Define terminationGracePeriodSeconds for scalingType "deployment". Period for deregisterLifecycle to gracefully shut down the node before force terminating it
autoscaling.deregisterLifecyclestringnilDefine preStop command to shut down the node gracefully when scalingType is set to "deployment"
crossBrowsers.chromeNodelist[{"nameOverride":null}]Additional chrome nodes, array of objects with the same structure as chromeNode
crossBrowsers.firefoxNodelist[{"nameOverride":null}]Additional firefox nodes, array of objects with the same structure as firefoxNode
crossBrowsers.edgeNodelist[{"nameOverride":null}]Additional edge nodes, array of objects with the same structure as edgeNode
crossBrowsers.relayNodelist[{"nameOverride":null}]Additional release nodes, array of objects with the same structure as relayNode
chromeNode.enabledbooltrueEnable chrome nodes
chromeNode.deploymentEnabledbooltrueNOTE: Only used when autoscaling.enabled is false Enable creation of Deployment true (default) - if you want long-living pods false - for provisioning your own custom type such as Jobs
chromeNode.updateStrategyobject{"type":null}Global update strategy will be overwritten by individual component
chromeNode.replicasint1Number of chrome nodes
chromeNode.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
chromeNode.imageNamestring"node-chrome"Image of chrome nodes
chromeNode.imageTagstringnilImage of chrome nodes (this overwrites global.seleniumGrid.nodesImageTag)
chromeNode.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
chromeNode.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
chromeNode.portslist[]Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
chromeNode.portint5555Node component port
chromeNode.nodePortstringnilNode component expose NodePort
chromeNode.affinityobject{}Specify affinity for chrome-node pods, this overwrites global.seleniumGrid.affinity parameter
chromeNode.topologySpreadConstraintslist[]Specify topologySpreadConstraints for chrome-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
chromeNode.dnsPolicystring""Specify dnsPolicy for chrome-node pods, this overwrites global.seleniumGrid.dnsPolicy parameter
chromeNode.dnsConfigobject{}Specify dnsConfig for chrome-node pods, this overwrites global.seleniumGrid.dnsConfig parameter
chromeNode.annotationsobject{}Annotations for chrome-node pods
chromeNode.labelsobject{}Labels for chrome-node pods
chromeNode.shareProcessNamespacebooltrueShared process namespace for chrome-node pods
chromeNode.resources.requestsobject{"cpu":"1","memory":"1Gi"}Request resources for chrome-node pods
chromeNode.resources.limitsobject{"cpu":"1","memory":"2Gi"}Limit resources for chrome-node pods
chromeNode.securityContextobject{}SecurityContext for chrome-node container
chromeNode.tolerationslist[]Tolerations for chrome-node pods
chromeNode.nodeSelectorobject{}Node selector for chrome-node pods
chromeNode.hostAliasesstringnilCustom host aliases for chrome nodes
chromeNode.extraEnvironmentVariableslist[]Custom environment variables for chrome nodes
chromeNode.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for chrome nodes
chromeNode.service.enabledboolfalseCreate a service for node
chromeNode.service.typestring"ClusterIP"Service type
chromeNode.service.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
chromeNode.service.portsstringnilExtra ports exposed in node service
chromeNode.service.annotationsobject{}Custom annotations for service
chromeNode.service.externalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
chromeNode.service.sessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
chromeNode.dshmVolumeSizeLimitstring""Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
chromeNode.priorityClassNamestring""Priority class name for chrome-node pods
chromeNode.startupProbeobject{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}Startup probe settings
chromeNode.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
chromeNode.livenessProbeobject{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
chromeNode.terminationGracePeriodSecondsint30Time to wait for pod termination
chromeNode.deregisterLifecyclestringnilDefine preStop command to shut down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
chromeNode.lifecycleobject{}Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
chromeNode.extraVolumeMountslist[]Extra volume mounts for chrome-node container
chromeNode.extraVolumeslist[]Extra volumes for chrome-node pod
chromeNode.nodeMaxSessionsstringnilOverride the number of max sessions per node
chromeNode.nodeDrainAfterSessionCountstringnilOverride the number of sessions to run before draining the node
chromeNode.nodeEnableManagedDownloadsstringnilOverride the managed downloads in node
chromeNode.nodeCustomCapabilitiesstring""Override the same config at the global level
chromeNode.nodeRegisterPeriodstringnilOverride the same config at the global level
chromeNode.nodeRegisterCyclestringnilOverride the same config at the global level
chromeNode.scaledOptionsstringnilOverride the scaled options for chrome nodes
chromeNode.scaledJobOptionsstringnilOverride the scaledJobOptions for chrome nodes
chromeNode.scaledObjectOptionsstringnilOverride the scaledObjectOptions for chrome nodes
chromeNode.scaledOverProvisionRatiostring""
chromeNode.hpa.browserNamestring"chrome"browserName should match with Node stereotype and request capability is scaled by this scaler
chromeNode.hpa.sessionBrowserNamestring"chrome"sessionBrowserName if the browserName is different from the sessionBrowserName
chromeNode.hpa.browserVersionstring""browserVersion should match with Node stereotype and request capability is scaled by this scaler
chromeNode.hpa.platformNamestring""platformName should match with Node stereotype and request capability is scaled by this scaler
chromeNode.hpa.unsafeSslstring"{{ template \"seleniumGrid.graphqlURL.unsafeSsl\" . }}"Skip check SSL when connecting to the Graphql endpoint
chromeNode.initContainerslist[]It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option
chromeNode.sidecarslist[]It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option
chromeNode.videoRecorderobject{}Override specific video recording settings for chrome node
firefoxNode.enabledbooltrueEnable firefox nodes
firefoxNode.deploymentEnabledbooltrueNOTE: Only used when autoscaling.enabled is false Enable creation of Deployment true (default) - if you want long living pods false - for provisioning your own custom type such as Jobs
firefoxNode.updateStrategyobject{"type":null}Global update strategy will be overwritten by individual component
firefoxNode.replicasint1Number of firefox nodes
firefoxNode.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
firefoxNode.imageNamestring"node-firefox"Image of firefox nodes
firefoxNode.imageTagstringnilImage of firefox nodes (this overwrites global.seleniumGrid.nodesImageTag)
firefoxNode.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
firefoxNode.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
firefoxNode.portslist[]Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
firefoxNode.portint5555Node component port
firefoxNode.nodePortstringnilNode component expose NodePort
firefoxNode.affinityobject{}Specify affinity for firefox-node pods, this overwrites global.seleniumGrid.affinity parameter
firefoxNode.topologySpreadConstraintslist[]Specify topologySpreadConstraints for firefox-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
firefoxNode.dnsPolicystring""Specify dnsPolicy for firefox-node pods, this overwrites global.seleniumGrid.dnsPolicy parameter
firefoxNode.dnsConfigobject{}Specify dnsConfig for firefox-node pods, this overwrites global.seleniumGrid.dnsConfig parameter
firefoxNode.annotationsobject{}Annotations for firefox-node pods
firefoxNode.labelsobject{}Labels for firefox-node pods
firefoxNode.tolerationslist[]Tolerations for firefox-node pods
firefoxNode.nodeSelectorobject{}Node selector for firefox-node pods
firefoxNode.shareProcessNamespacebooltrueShared process namespace for firefox-node pods
firefoxNode.resources.requestsobject{"cpu":"1","memory":"1Gi"}Request resources for firefox-node pods
firefoxNode.resources.limitsobject{"cpu":"1","memory":"2Gi"}Limit resources for firefox-node pods
firefoxNode.securityContextobject{}SecurityContext for firefox-node container
firefoxNode.hostAliasesstringnilCustom host aliases for firefox nodes
firefoxNode.extraEnvironmentVariableslist[]Custom environment variables for firefox nodes
firefoxNode.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for firefox nodes
firefoxNode.service.enabledboolfalseCreate a service for node
firefoxNode.service.typestring"ClusterIP"Service type
firefoxNode.service.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
firefoxNode.service.portsstringnilExtra ports exposed in node service
firefoxNode.service.annotationsobject{}Custom annotations for service
firefoxNode.service.externalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
firefoxNode.service.sessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
firefoxNode.dshmVolumeSizeLimitstring"2Gi"Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
firefoxNode.priorityClassNamestring""Priority class name for firefox-node pods
firefoxNode.startupProbeobject{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}Startup probe settings
firefoxNode.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
firefoxNode.livenessProbeobject{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
firefoxNode.terminationGracePeriodSecondsint30Time to wait for pod termination
firefoxNode.deregisterLifecyclestringnilDefine preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
firefoxNode.lifecycleobject{}Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
firefoxNode.extraVolumeMountslist[]Extra volume mounts for firefox-node container
firefoxNode.extraVolumeslist[]Extra volumes for firefox-node pod
firefoxNode.nodeMaxSessionsstringnilOverride the number of max sessions per node
firefoxNode.nodeDrainAfterSessionCountstringnilOverride the number of sessions to run before draining the node
firefoxNode.nodeEnableManagedDownloadsstringnilOverride the managed downloads in node
firefoxNode.nodeCustomCapabilitiesstring""Override the same config at the global level
firefoxNode.nodeRegisterPeriodstringnilOverride the same config at the global level
firefoxNode.nodeRegisterCyclestringnilOverride the same config at the global level
firefoxNode.scaledOptionsstringnilOverride the scaled options for firefox nodes
firefoxNode.scaledJobOptionsstringnilOverride the scaledJobOptions for firefox nodes
firefoxNode.scaledObjectOptionsstringnilOverride the scaledObjectOptions for firefox nodes
firefoxNode.scaledOverProvisionRatiostring""
firefoxNode.hpa.browserNamestring"firefox"browserName should match with Node stereotype and request capability is scaled by this scaler
firefoxNode.hpa.sessionBrowserNamestring"firefox"sessionBrowserName if the browserName is different from the sessionBrowserName
firefoxNode.hpa.browserVersionstring""browserVersion should match with Node stereotype and request capability is scaled by this scaler
firefoxNode.hpa.platformNamestring""platformName should match with Node stereotype and request capability is scaled by this scaler
firefoxNode.hpa.unsafeSslstring"{{ template \"seleniumGrid.graphqlURL.unsafeSsl\" . }}"Skip check SSL when connecting to the Graphql endpoint
firefoxNode.initContainerslist[]It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option
firefoxNode.sidecarslist[]It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option
firefoxNode.videoRecorderobject{}Override specific video recording settings for firefox node
edgeNode.enabledbooltrueEnable edge nodes
edgeNode.deploymentEnabledbooltrueNOTE: Only used when autoscaling.enabled is false Enable creation of Deployment true (default) - if you want long living pods false - for provisioning your own custom type such as Jobs
edgeNode.updateStrategyobject{"type":null}Global update strategy will be overwritten by individual component
edgeNode.replicasint1Number of edge nodes
edgeNode.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
edgeNode.imageNamestring"node-edge"Image of edge nodes
edgeNode.imageTagstringnilImage of edge nodes (this overwrites global.seleniumGrid.nodesImageTag)
edgeNode.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
edgeNode.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
edgeNode.portslist[]Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
edgeNode.portint5555Node component port
edgeNode.nodePortstringnilNode component expose NodePort
edgeNode.affinityobject{}Specify affinity for edge-node pods, this overwrites global.seleniumGrid.affinity parameter
edgeNode.topologySpreadConstraintslist[]Specify topologySpreadConstraints for edge-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
edgeNode.dnsPolicystring""Specify dnsPolicy for edge-node pods, this overwrites global.seleniumGrid.dnsPolicy parameter
edgeNode.dnsConfigobject{}Specify dnsConfig for edge-node pods, this overwrites global.seleniumGrid.dnsConfig parameter
edgeNode.annotationsobject{}Annotations for edge-node pods
edgeNode.labelsobject{}Labels for edge-node pods
edgeNode.tolerationslist[]Tolerations for edge-node pods
edgeNode.nodeSelectorobject{}Node selector for edge-node pods
edgeNode.shareProcessNamespacebooltrueShared process namespace for edge-node pods
edgeNode.resources.requestsobject{"cpu":"1","memory":"1Gi"}Request resources for edge-node pods
edgeNode.resources.limitsobject{"cpu":"1","memory":"2Gi"}Limit resources for edge-node pods
edgeNode.securityContextobject{}SecurityContext for edge-node container
edgeNode.hostAliasesstringnilCustom host aliases for edge nodes
edgeNode.extraEnvironmentVariableslist[]Custom environment variables for edge nodes
edgeNode.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for edge nodes
edgeNode.service.enabledboolfalseCreate a service for node
edgeNode.service.typestring"ClusterIP"Service type
edgeNode.service.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
edgeNode.service.portsstringnilExtra ports exposed in node service
edgeNode.service.annotationsobject{}Custom annotations for service
edgeNode.service.externalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
edgeNode.service.sessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
edgeNode.dshmVolumeSizeLimitstring""Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
edgeNode.priorityClassNamestring""Priority class name for edge-node pods
edgeNode.startupProbeobject{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}Startup probe settings
edgeNode.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
edgeNode.livenessProbeobject{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
edgeNode.terminationGracePeriodSecondsint30Time to wait for pod termination
edgeNode.deregisterLifecyclestringnilDefine preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
edgeNode.lifecycleobject{}Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
edgeNode.extraVolumeMountslist[]Extra volume mounts for edge-node container
edgeNode.extraVolumeslist[]Extra volumes for edge-node pod
edgeNode.nodeMaxSessionsstringnilOverride the number of max sessions per node
edgeNode.nodeDrainAfterSessionCountstringnilOverride the number of sessions to run before draining the node
edgeNode.nodeEnableManagedDownloadsstringnilOverride the managed downloads in node
edgeNode.nodeCustomCapabilitiesstring""Override the same config at the global level
edgeNode.nodeRegisterPeriodstringnilOverride the same config at the global level
edgeNode.nodeRegisterCyclestringnilOverride the same config at the global level
edgeNode.scaledOptionsstringnilOverride the scaled options for edge nodes
edgeNode.scaledJobOptionsstringnilOverride the scaledJobOptions for edge nodes
edgeNode.scaledObjectOptionsstringnilOverride the scaledObjectOptions for edge nodes
edgeNode.scaledOverProvisionRatiostring""
edgeNode.hpa.browserNamestring"MicrosoftEdge"browserName should match with Node stereotype and request capability is scaled by this scaler
edgeNode.hpa.sessionBrowserNamestring"msedge"sessionBrowserName if the browserName is different from the sessionBrowserName
edgeNode.hpa.browserVersionstring""browserVersion should match with Node stereotype and request capability is scaled by this scaler
edgeNode.hpa.platformNamestring""platformName should match with Node stereotype and request capability is scaled by this scaler
edgeNode.hpa.unsafeSslstring"{{ template \"seleniumGrid.graphqlURL.unsafeSsl\" . }}"Skip check SSL when connecting to the Graphql endpoint
edgeNode.initContainerslist[]It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option
edgeNode.sidecarslist[]It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option
edgeNode.videoRecorderobject{}Override specific video recording settings for edge node
relayNode.enabledboolfalseEnable relay nodes
relayNode.relayUrlstring""Specify another Grid, another network, or a cloud vendor that you wish to connect to (e.g. https://ondemand.us-west-1.saucelabs.com/wd/hub)
relayNode.deploymentEnabledbooltrueNOTE: Only used when autoscaling.enabled is false Enable creation of Deployment true (default) - if you want long-living pods false - for provisioning your own custom type such as Jobs
relayNode.updateStrategyobject{"type":null}Global update strategy will be overwritten by individual component
relayNode.replicasint1Number of relay nodes
relayNode.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
relayNode.imageNamestring"node-base"Image of relay nodes
relayNode.imageTagstringnilImage of relay nodes (this overwrites global.seleniumGrid.nodesImageTag)
relayNode.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
relayNode.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
relayNode.portslist[]Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
relayNode.portint5555Node component port
relayNode.nodePortstringnilNode component expose NodePort
relayNode.affinityobject{}Specify affinity for relay-node pods, this overwrites global.seleniumGrid.affinity parameter
relayNode.topologySpreadConstraintslist[]Specify topologySpreadConstraints for relay-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
relayNode.dnsPolicystring""Specify dnsPolicy for relay-node pods, this overwrites global.seleniumGrid.dnsPolicy parameter
relayNode.dnsConfigobject{}Specify dnsConfig for relay-node pods, this overwrites global.seleniumGrid.dnsConfig parameter
relayNode.annotationsobject{}Annotations for relay-node pods
relayNode.labelsobject{}Labels for relay-node pods
relayNode.shareProcessNamespacebooltrueShared process namespace for relay-node pods
relayNode.resources.requestsobject{"cpu":"1","memory":"1Gi"}Request resources for relay-node pods
relayNode.resources.limitsobject{"cpu":"1","memory":"2Gi"}Limit resources for relay-node pods
relayNode.securityContextobject{}SecurityContext for relay-node container
relayNode.tolerationslist[]Tolerations for relay-node pods
relayNode.nodeSelectorobject{}Node selector for relay-node pods
relayNode.hostAliasesstringnilCustom host aliases for relay nodes
relayNode.extraEnvironmentVariableslist[]Custom environment variables for relay nodes
relayNode.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for relay nodes
relayNode.service.enabledboolfalseCreate a service for node
relayNode.service.typestring"ClusterIP"Service type
relayNode.service.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
relayNode.service.portsstringnilExtra ports exposed in node service
relayNode.service.annotationsobject{}Custom annotations for service
relayNode.service.externalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
relayNode.service.sessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
relayNode.dshmVolumeSizeLimitstring""Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
relayNode.priorityClassNamestring""Priority class name for relay-node pods
relayNode.startupProbeobject{"enabled":true,"failureThreshold":12,"initialDelaySeconds":0,"path":"/status","periodSeconds":5,"successThreshold":1,"timeoutSeconds":60}Startup probe settings
relayNode.readinessProbeobject{"enabled":true,"failureThreshold":10,"initialDelaySeconds":10,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":10}Readiness probe settings
relayNode.livenessProbeobject{"enabled":false,"failureThreshold":6,"initialDelaySeconds":30,"path":"/status","periodSeconds":10,"successThreshold":1,"timeoutSeconds":60}Liveness probe settings
relayNode.terminationGracePeriodSecondsint30Time to wait for pod termination
relayNode.deregisterLifecyclestringnilDefine preStop command to shut down the relay node gracefully. This overwrites autoscaling.deregisterLifecycle
relayNode.lifecycleobject{}Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
relayNode.extraVolumeMountslist[]Extra volume mounts for relay-node container
relayNode.extraVolumeslist[]Extra volumes for relay-node pod
relayNode.nodeMaxSessionsstringnilOverride the number of max sessions per node
relayNode.nodeDrainAfterSessionCountstringnilOverride the number of sessions to run before draining the node
relayNode.nodeEnableManagedDownloadsstringnilOverride the managed downloads in node
relayNode.nodeCustomCapabilitiesstring""Override the same config at the global level
relayNode.nodeRegisterPeriodstringnilOverride the same config at the global level
relayNode.nodeRegisterCyclestringnilOverride the same config at the global level
relayNode.scaledOptionsstringnilOverride the scaled options for relay nodes
relayNode.scaledJobOptionsstringnilOverride the scaledJobOptions for relay nodes
relayNode.scaledObjectOptionsstringnilOverride the scaledObjectOptions for relay nodes
relayNode.scaledOverProvisionRatiostring""
relayNode.hpa.browserNamestring""browserName should match with Node stereotype and request capability is scaled by this scaler
relayNode.hpa.sessionBrowserNamestring""sessionBrowserName if the browserName is different from the sessionBrowserName
relayNode.hpa.browserVersionstring""browserVersion should match with Node stereotype and request capability is scaled by this scaler
relayNode.hpa.platformNamestring""platformName should match with Node stereotype and request capability is scaled by this scaler
relayNode.hpa.unsafeSslstring"{{ template \"seleniumGrid.graphqlURL.unsafeSsl\" . }}"Skip check SSL when connecting to the Graphql endpoint
relayNode.initContainerslist[]It is used to add initContainers in the same pod of the browser node. It should be set using the --set-json option
relayNode.sidecarslist[]It is used to add sidecars proxy in the same pod of the browser node. It means it will add a new container to the deployment itself. It should be set using the --set-json option
relayNode.videoRecorderobject{}Override specific video recording settings for edge node
videoRecorder.enabledboolfalseEnable video recording in all browser nodes
videoRecorder.sidecarContainerboolfalseVideo recorder run as a sidecar container (2 containers in the same pod), or a single container with browser and recorder https://github.com/SeleniumHQ/docker-selenium/discussions/2539
videoRecorder.namestring"video"Container name is set to resource specs
videoRecorder.imageRegistrystringnilRegistry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
videoRecorder.imageNamestring"video"Image of video recorder
videoRecorder.imageTagstringnilImage of video recorder (this overwrites global.seleniumGrid.videoImageTag)
videoRecorder.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
videoRecorder.targetFolderstring"/videos"Directory to store video files in the container
videoRecorder.uploader.enabledboolfalseEnable video uploader
videoRecorder.uploader.destinationPrefixstringnilWhere to upload the video file e.g. remoteName://bucketName/path. Refer to destination syntax of rclone https://rclone.org/docs/
videoRecorder.uploader.namestringnilWhat uploader to use (default is empty, internal upload in video container). See .videRecorder.s3 for how to create a new external sidecar container.
videoRecorder.uploader.configFileNamestring"upload.conf"Uploader config file name
videoRecorder.uploader.entryPointFileNamestring"upload.sh"Uploader entry point file name
videoRecorder.uploader.secretsstringnilFor environment variables used in uploader which contains sensitive information, store in secret and refer envFrom Set config for rclone via ENV var with format: RCLONE_CONFIG_ + name of remote + _ + name of config file option (make it all uppercase)
videoRecorder.uploader.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for uploader
videoRecorder.portslist[9000]Video recording container port
videoRecorder.resources.requestsobject{"cpu":"0.1","memory":"128Mi"}Request resources for video recorder pods
videoRecorder.resources.limitsobject{"cpu":"0.5","memory":"1Gi"}Limit resources for video recorder pods
videoRecorder.securityContextstringnilSecurityContext for recorder container
videoRecorder.extraEnvironmentVariableslist[]Extra environment variables for video recorder
videoRecorder.extraEnvFromlist[]Custom environment variables by sourcing entire configMap, Secret, etc. for video recorder.
videoRecorder.terminationGracePeriodSecondsint30Terminating grace period for video recorder
videoRecorder.startupProbeobject{}Startup probe settings
videoRecorder.livenessProbeobject{}Liveness probe settings
videoRecorder.lifecycleobject{}Define lifecycle events for video recorder
videoRecorder.extraVolumeMountslist[]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.
videoRecorder.extraVolumeslist[]Extra volumes for video recorder pod
videoRecorder.s3object{"args":[],"command":[],"extraEnvironmentVariables":[],"imageName":"aws-cli","imagePullPolicy":"IfNotPresent","imageRegistry":"bitnami","imageTag":"latest","securityContext":{"runAsUser":0}}Container spec for the uploader if above it is defined as "uploader.name: s3"
customLabelsobject{}Add more labels to all resources created by this chart or override existing label keys
videoManager.enabledboolfalseEnable video manager
videoManager.nameOverridestring""Override deployment name of video manager
videoManager.ingress.enabledbooltrueEnable ingress resource to access the file browser
videoManager.ingress.annotationsstringnilAnnotations for file browser ingress resource
videoManager.ingress.pathslist[]Configure paths for file browser ingress resource
videoManager.imageRegistrystring"filebrowser"Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
videoManager.imageNamestring"filebrowser"File browser image name
videoManager.imageTagstring"latest"File browser image tag (this overwrites global.seleniumGrid.imageTag parameter)
videoManager.imagePullPolicystring"IfNotPresent"Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
videoManager.imagePullSecretstring""Image pull secret (see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
videoManager.config.baseurlstring"/recordings"Base URL use to access the file browser (in case expose both Grid and file browser via ingress, e.g. Grid at http://public.ip/selenium and FB at http://public.ip/recordings)
videoManager.config.usernamestring""Username for the first user when using quick config (default "admin")
videoManager.config.passwordstring""Hashed password (bcrypt) for the first user when using quick config (default "admin")
videoManager.config.noauthbooltrueUse the noauth auther when using quick setup
videoManager.extraEnvironmentVariableslist[]Specify extra environment variables for Router. You can pass any environment variables support by https://filebrowser.org/changelog.html
videoManager.extraEnvFromlist[]Specify extra environment variables from ConfigMap and Secret for Router
videoManager.affinityobject{}Specify affinity for router pods, this overwrites global.seleniumGrid.affinity parameter
videoManager.topologySpreadConstraintslist[]Specify topologySpreadConstraints for router pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
videoManager.dnsPolicystring""Specify dnsPolicy for file-browser pods, this overwrites global.seleniumGrid.dnsPolicy parameter
videoManager.dnsConfigobject{}Specify dnsConfig for file-browser pods, this overwrites global.seleniumGrid.dnsConfig parameter
videoManager.annotationsobject{}Custom annotations for router pods
videoManager.portint80Router container port
videoManager.nodePortint30080Router expose NodePort
videoManager.startupProbeobject{}Startup probe settings
videoManager.readinessProbeobject{}Readiness probe settings
videoManager.livenessProbeobject{}Liveness probe settings
videoManager.lifecycleobject{}
videoManager.resourcesobject{"limits":{"cpu":"1","memory":"1Gi"},"requests":{"cpu":"0.1","memory":"128Mi"}}Resources for router container
videoManager.replicasint1Number of replicas
videoManager.securityContextobject{}SecurityContext for router container
videoManager.serviceTypestring"ClusterIP"Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
videoManager.clusterIPstring""Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
videoManager.externalNamestring""Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
videoManager.loadBalancerIPstring""Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
videoManager.serviceAnnotationsobject{}Custom annotations for router service
videoManager.serviceExternalTrafficPolicystring""Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
videoManager.serviceSessionAffinitystring""Set session affinity to None, ClientIP or ClientIPString
videoManager.tolerationslist[]Tolerations for router pods
videoManager.nodeSelectorobject{}Node selector for router pods
videoManager.priorityClassNamestring""Priority class name for router pods
videoManager.extraVolumeMountslist[]
videoManager.extraVolumeslist[]Extra volumes for video recorder pod
networkPoliciesobject{}Add network policies to this chart It can be set using the --set-json option
keda.additionalAnnotationsstringnilAnnotations for KEDA resources
keda.http.timeoutint60000
keda.webhooksobject{"enabled":false}Enable KEDA admission webhooks component
traefikobject{"ingressClass":{"enabled":true,"isDefaultClass":false,"name":"traefik"},"service":{"annotations":null},"tlsStore":{"default":{"defaultCertificate":null}}}Configuration for dependency chart traefik
kube-prometheus-stackobject{"cleanPrometheusOperatorObjectNames":true,"grafana":{"adminPassword":"admin","adminUser":"admin"},"nodeExporter":{"enabled":false},"prometheusOperator":{"admissionWebhooks":{"enabled":false,"patch":{"enabled":false}},"tls":{"enabled":false}}}Configuration for dependency chart kube-prometheus-stack
jaegerobject{"jaeger":{"extraEnv":[{"name":"QUERY_BASE_PATH","value":"/jaeger"}]},"storage":{"type":"badger"}}Configuration for dependency chart jaeger
postgresql.enabledboolfalseEnable to install PostgreSQL along with Grid
postgresql.persistenceobject{"enabled":false}Enable persistence using Persistent Volume Claims
postgresql.authobject{"database":"selenium_sessions","password":"seluser","username":"seluser"}Authentication should be aligned with config in session map
postgresql.initdb.scriptsobject{"init.sql":"CREATE TABLE IF NOT EXISTS sessions_map(\n session_ids varchar(256),\n session_caps text,\n session_uri varchar(256),\n session_stereotype text,\n session_start varchar(256)\n);\n"}Initdb scripts for PostgreSQL to create sessions_map table
redis.enabledboolfalseEnable to install Redis along with Grid
redis.architecturestring"standalone"Setup architecture
redis.auth.enabledboolfalseDisable authentication due to implementation still not supporting it