[🐛 Bug]: Distributor & Router reboots
What happened?
Periodically, the router and distributor reboot with errors. Additionally, during troubleshooting, I discovered that the new config maps for the components are not being connected to them, so I had to add the configurations the old-fashioned way:
extraEnvironmentVariables:
- name: SE_SESSION_REQUEST_TIMEOUT
value: "3600"
- name: SE_JAVA_OPTS
value: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MinRAMPercentage=100 -XX:MaxRAMPercentage=100"
Command used to start Selenium Grid with Docker (or Kubernetes)
helm
Relevant log output
distributor:
Feb 12, 2025 @ 12:19:48.091 selenium-grid-selenium-distributor-77bf78d96d-489xx Shutdown complete -
Feb 12, 2025 @ 12:19:48.071 selenium-grid-selenium-distributor-77bf78d96d-489xx INFO: Binding additional locator mechanisms: relative -
Feb 12, 2025 @ 12:19:48.071 selenium-grid-selenium-distributor-77bf78d96d-489xx Feb 12, 2025 7:19:48 AM org.openqa.selenium.grid.node.Node <init> -
Feb 12, 2025 @ 12:19:48.071 selenium-grid-selenium-distributor-77bf78d96d-489xx 2025-02-12 07:19:48,071 WARN stopped: selenium-grid-distributor (terminated by SIGTERM) -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx 2025-02-12 07:19:47,884 INFO waiting for selenium-grid-distributor to die -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx Feb 12, 2025 7:19:47 AM org.openqa.selenium.grid.node.Node <init> -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx INFO: Binding additional locator mechanisms: relative -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx 2025-02-12 07:19:47,884 WARN received SIGTERM indicating exit request -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.154s][warning][os,thread] Failed to start the native thread for java.lang.Thread "HttpClient-5193-SelectorManager" -
Feb 12, 2025 @ 12:19:47.884 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.154s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached. -
Feb 12, 2025 @ 12:19:47.867 selenium-grid-selenium-distributor-77bf78d96d-489xx Trapped SIGTERM/SIGINT/x so shutting down supervisord... -
Feb 12, 2025 @ 12:19:47.866 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.135s][warning][os,thread] Failed to start the native thread for java.lang.Thread "JdkHttpClient-0-137" -
Feb 12, 2025 @ 12:19:47.865 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.135s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached. -
Feb 12, 2025 @ 12:19:47.767 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.036s][warning][os,thread] Failed to start the native thread for java.lang.Thread "HttpClient-5192-SelectorManager" -
Feb 12, 2025 @ 12:19:47.766 selenium-grid-selenium-distributor-77bf78d96d-489xx [56411.036s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached. -
Feb 12, 2025 @ 12:19:47.766 selenium-grid-selenium-distributor-77bf78d96d-489xx INFO: Binding additional locator mechanisms: relative -
Feb 12, 2025 @ 12:19:47.766 selenium-grid-selenium-distributor-77bf78d96d-489xx Feb 12, 2025 7:19:47 AM org.openqa.selenium.grid.node.Node <init> -
Feb 12, 2025 @ 12:19:47.154 selenium-grid-selenium-distributor-77bf78d96d-489xx [56410.424s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached. -
Feb 12, 2025 @ 12:19:47.154 selenium-grid-selenium-distributor-77bf78d96d-489xx Feb 12, 2025 7:19:47 AM org.openqa.selenium.grid.node.Node <init> -
Feb 12, 2025 @ 12:19:47.154 selenium-grid-selenium-distributor-77bf78d96d-489xx INFO: Binding additional locator mechanisms: relative -
Feb 12, 2025 @ 12:19:47.154 selenium-grid-selenium-distributor-77bf78d96d-489xx [56410.424s][warning][os,thread] Failed to start the native thread for java.lang.Thread "HttpClient-5191-SelectorManager" -
Feb 12, 2025 @ 12:19:46.831 selenium-grid-selenium-distributor-77bf78d96d-489xx [56410.101s][warning][os,thread] Failed to start the native thread for java.lang.Thread "HttpClient-5190-SelectorManager" -
Feb 12, 2025 @ 12:19:46.831 selenium-grid-selenium-distributor-77bf78d96d-489xx [56410.100s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
router:
Feb 12, 2025 @ 12:19:57.411 selenium-grid-selenium-router-c77f6f855-h6xt5 Shutdown complete -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "8a60980420b0414f7ebcca43c0eba44d","eventTime": 1739344797388466379,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.71","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "71","http.scheme": "HTTP","http.target": "\u002fsession\u002f3e8ffcdf5db79e6003e10377806872fd\u002felement","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "3e8ffcdf5db79e6003e10377806872fd"}} -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12 07:19:57,388 WARN stopped: selenium-grid-router (terminated by SIGTERM) -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.388703997+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.388731237+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.388 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.38613472+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12 07:19:57,386 INFO waiting for selenium-grid-router to die -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "5a339f03c1ef7d945c6d4cae133069e8","eventTime": 1739344797385557542,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.61","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "17928","http.scheme": "HTTP","http.target": "\u002fsession\u002f828e1c9a5a478489a41a1e3e699d2469\u002fexecute\u002fsync","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "828e1c9a5a478489a41a1e3e699d2469"}} -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.386403775+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.386372258+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "4cb4a0363a0ed411f87cb9704f098a10","eventTime": 1739344797385533555,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.61","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "90","http.scheme": "HTTP","http.target": "\u002fsession\u002f19623f7c095ddc6b3a34c260259dd768\u002felements","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "19623f7c095ddc6b3a34c260259dd768"}} -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.386 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12 07:19:57,385 WARN received SIGTERM indicating exit request -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.385 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.385925696+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.309 selenium-grid-selenium-router-c77f6f855-h6xt5 Trapped SIGTERM/SIGINT/x so shutting down supervisord... -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "71282419a2c6cd32e0b8d84745242507","eventTime": 1739344797280467324,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.61","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "2","http.scheme": "HTTP","http.target": "\u002fsession\u002fc14de71b0a8c376b13b7c6c2767f8de1\u002felement\u002ff.21851F19CFEF120B0B9C32016BED5D40.d.436428C93E3668FFB3053811D659ABF2.e.4134\u002fclick","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "c14de71b0a8c376b13b7c6c2767f8de1"}} -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.280852845+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.280877632+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.280 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.279488051+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "551938009185f6ad84b9b8c12e1f8444","eventTime": 1739344797279200327,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.71","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "71","http.scheme": "HTTP","http.target": "\u002fsession\u002f3e8ffcdf5db79e6003e10377806872fd\u002felement","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "3e8ffcdf5db79e6003e10377806872fd"}} -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.279566299+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.279 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
... 3 more -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.275924228+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$3 -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: java.io.UncheckedIOException: java.net.ConnectException
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)
at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840) -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 2025-02-12T10:19:57.275994714+03:00 stdout F -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
... 9 more -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Caused by: java.net.ConnectException
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)
... 8 more -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 Feb 12, 2025 7:19:57 AM org.openqa.selenium.remote.tracing.opentelemetry.SeleniumSpanExporter$1 lambda$export$1 -
Feb 12, 2025 @ 12:19:57.275 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: {"traceId": "980602c1bd178c4e7800f152bbb335a8","eventTime": 1739344797275275762,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.net.ConnectException","exception.stacktrace": "java.io.UncheckedIOException: java.net.ConnectException\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:497)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.lambda$executeAsync$1(JdkHttpClient.java:384)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:840)\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:574)\n\tat java.net.http\u002fjdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)\n\tat org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:456)\n\t... 8 more\nCaused by: java.net.ConnectException\n\tat java.net.http\u002fjdk.internal.net.http.common.Utils.toConnectException(Utils.java:1083)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)\n\t... 3 more\nCaused by: java.nio.channels.ClosedChannelException\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)\n\tat java.base\u002fsun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)\n\tat java.base\u002fjava.security.AccessController.doPrivileged(AccessController.java:569)\n\tat java.net.http\u002fjdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)\n\t... 9 more\n","exception.type": "java.io.UncheckedIOException","http.client_ip": "10.219.35.61","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "grid.skbkontur.ru","http.method": "POST","http.request_content_length": "17928","http.scheme": "HTTP","http.target": "\u002fsession\u002f828e1c9a5a478489a41a1e3e699d2469\u002fexecute\u002fsync","http.user_agent": "selenium\u002f4.20.0 (.net windows)","session.id": "828e1c9a5a478489a41a1e3e699d2469"}} -
Feb 12, 2025 @ 12:19:57.269 selenium-grid-selenium-router-c77f6f855-h6xt5 WARNING: Unable to execute request for an existing session: java.net.ConnectException
Operating System
k8s
Docker Selenium version (image tag)
4.28.1-20250202
Selenium Grid chart version (chart version)
0.39.2
@Doofus100500, thank you for creating this issue. We will troubleshoot it as soon as we can.
Info for maintainers
Triage this issue by using labels.
If information is missing, add a helpful comment and then I-issue-template label.
If the issue is a question, add the I-question label.
If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.
If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C),
add the applicable G-* label, and it will provide the correct link and auto-close the
issue.
After troubleshooting the issue, please add the R-awaiting answer label.
Thank you!
Feb 13, 2025 @ 13:40:48.435 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe failed:
-- | -- | -- | -- | --
| Feb 13, 2025 @ 13:35:46.089 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | (combined from similar events): Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "7f28d610cfe6cfe5168a7b972f723bc450f8a502c08706cee66601c911484aeb": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 13:30:46.089 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "5aaade03c480f78355b28278cafca6cbe3ed29118a35e306308affd95354286c": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 13:30:06.198 | Unhealthy | Warning | selenium-grid-selenium-router-5db9bd694d-n6scd | Readiness probe failed: Get "https://10.223.105.160:4444/readyz": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
| Feb 13, 2025 @ 13:29:46.085 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "0447ca94f773c4470c602e5970eca2f55dfefc473a0dc1a9845a083073d47078": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 13:29:25.400 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Readiness probe failed: Get "https://10.223.81.17:5553/readyz": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
| Feb 13, 2025 @ 13:28:46.084 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "a896b97b04aaf79a5a7450db8cbee0f7afd7366d8f90a8fa1a3498586e60c331": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 13:27:55.845 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Readiness probe failed: Get "https://10.223.81.17:5553/readyz": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
| Feb 13, 2025 @ 13:27:49.227 | Unhealthy | Warning | selenium-grid-selenium-router-5db9bd694d-n6scd | Liveness probe failed:
| Feb 13, 2025 @ 13:27:46.575 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "0239983d7aea17ee84cc60ebf161f4894a15f6882e3678530eb0f563e18b94ab": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 13:27:46.198 | Unhealthy | Warning | selenium-grid-selenium-router-5db9bd694d-n6scd | Readiness probe failed: Get "https://10.223.105.160:4444/readyz": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
| Feb 13, 2025 @ 13:27:26.201 | Unhealthy | Warning | selenium-grid-selenium-router-5db9bd694d-n6scd | Readiness probe failed: HTTP probe failed with statuscode: 503
| Feb 13, 2025 @ 13:27:25.404 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Readiness probe failed: HTTP probe failed with statuscode: 500
| Feb 13, 2025 @ 13:25:46.083 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "8667972d797d0425bfc699508e8a185598bd5bcf43edf67a4c82ca7c868da72f": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
| Feb 13, 2025 @ 12:28:49.268 | Unhealthy | Warning | selenium-grid-selenium-router-5db9bd694d-n6scd | Liveness probe failed:
| Feb 13, 2025 @ 12:28:48.667 | Unhealthy | Warning | selenium-grid-selenium-distributor-77d77b4f9c-lfx7w | Liveness probe failed:
On the nodes, we are also catching OpenQA.Selenium.WebDriverException: java.net.ConnectException.
Rolled back to the chart with version 0.38.5, but the issue is still present.
Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "636331cba7b6cfa22506d8a83db3fed3ccd88688dc3654aaf042cd4a1a97b9dc": OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown
new config maps for the components are not being connected to them
On this issue, can you share your values file? I will use it to check the template render.
Yes, no problem:
global:
# -- 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
K8S_PUBLIC_IP: ""
seleniumGrid:
# -- Image registry for all selenium components
imageRegistry: docker-proxy.host/selenium
# -- Image tag for all selenium components
imageTag: 4.27.0-20241204
# -- Image tag for browser's nodes
nodesImageTag: 4.27.0-20241204
# -- Image tag for browser's video recorder
videoImageTag: &videoImageTag "ffmpeg-7.1-20241204"
# -- kubectl image is used to execute kubectl commands in utility jobs
kubectlImage: bitnami/kubectl:latest
# -- Pull secret for all components, can be overridden individually
imagePullSecret: ""
# -- Log level for all components. Possible values describe here: https://www.selenium.dev/documentation/grid/configuration/cli_options/#logging
logLevel: INFO
# -- Set default startup probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
defaultNodeStartupProbe: httpGet
# -- Set default readiness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
defaultNodeLivenessProbe: exec
# -- Set default liveness probe method for all nodes (supplied values: httpGet, exec). If not set, the default is httpGet
defaultComponentLivenessProbe: exec
# -- Probe logs output can be retrieved using `kubectl logs`. Noted: this will not work if shareProcessNamespace is enabled
stdoutProbeLog: true
# -- Specify how many old ReplicaSets for this Deployment you want to retain. The rest will be garbage-collected in the background.
revisionHistoryLimit: 10
# -- Whether to enable structured logging
structuredLogs: true
# -- Enable http logging. Tracing should be enabled to log http logs.
httpLogs: false
updateStrategy:
# -- Specify update strategy for all components, can be overridden individually
type: RollingUpdate
# type: RollingUpdate
# -- Specify for strategy RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
# -- Specify affinity for all components, can be overridden individually
affinity: {}
# -- Specify topologySpreadConstraints for all components, can be overridden individually
topologySpreadConstraints: []
# - maxSkew: 4
# topologyKey: kubernetes.io/hostname
# whenUnsatisfiable: DoNotSchedule
# Note: If not define labelSelector, it will be added automatically based on "app" label in each component
# -- Specify 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)
nodeMaxSessions: 1
tls:
# -- Create a Secret resource for TLS certificate and key. If using an external secret set to false and provide its name in `nameOverride` below
create: true
# -- Name of external secret containing the TLS certificate and key
# nameOverride:
# -- Enable or disable TLS for the server components (and ingress proxy)
enabled: true
ingress:
# -- Enable or disable TLS for the ingress proxy only
enabled: true
# -- Use the certificate and key are generated with below settings
generateTLS: false
defaultName: "SeleniumHQ"
defaultDays: 3650
defaultCN: "www.selenium.dev"
# or *.domain.com
defaultSANList: []
# - staging.domain.com
# - production.domain.com
defaultIPList: []
# - 10.10.10.10
# -- Cert files will be imported from chart directory if not specified
secretFilesImportFrom: "certs/**"
# -- File names for the TLS certificate and key to import
# secretFiles:
# # -- Key to set contents for certificate file via --set-file
# tls.crt: ""
# # -- Key to set contents for private key file via --set-file
# tls.key: ""
# # -- Key to set contents for trust store file via --set-file
# server.jks: ""
# # -- Key to set contents for trust store password file via --set-file
# server.pass: ""
# -- All files for TLS will be mounted to the server components under directory
certVolumeMountPath: "/opt/selenium/secrets"
# -- Cert file will be mounted to server components as a volume
certificateFile: tls.crt
# -- Key file will be mounted to server components as a volume
privateKeyFile: tls.key
# -- Trust store file will be mounted to server components as a volume
trustStoreFile: server.jks
# -- Trust store password file will be mounted to server components as a volume
trustStorePasswordFile: server.pass
# -- Recommend to get from trustStorePasswordFile instead of plain text via env variable
trustStorePassword: ""
# -- Disable verification the hostname included in the server's TLS/SSL certificates matches the hostnames provided
disableHostnameVerification: true
registrationSecret:
# -- Enable feature node registration secret to make sure that the node is one you control and not a rouge node
enabled: true
# -- The secret value to be used for node registration
value: "$SELENIUM_REGISTRATION_SECRET"
# Basic auth settings for Selenium Grid
basicAuth:
# -- Create a secret resource for basic auth. If using an external secret, set to false and provide its name in `nameOverride` below
create: true
# -- External secret containing the basic auth username and password for reference
# nameOverride:
# -- Enable or disable basic auth for the Hub/Router
enabled: $BASIC_AUTH
# -- Username for basic auth
username: $BASIC_AUTH_USERNAME
# -- Password for basic auth
password: $BASIC_AUTH_PASSWORD
# -- Embed the basic auth "username:password@" in few URLs e.g. SE_NODE_GRID_URL
embeddedUrl: true
# -- Annotations for basic auth secret resource
annotations: {}
# -- Deploy Router, Distributor, EventBus, SessionMap and Nodes separately
isolateComponents: true
# Service Account for all components
serviceAccount:
# -- Create a service account for all components. If using an external service account, set to false and provide its name in `nameOverride` below
create: false
# -- Override to use an external service account
nameOverride: "$KUBERNETES_NAMESPACE-sa"
# -- Annotations for the service account
annotations: {}
# eks.amazonaws.com/role-arn: "arn:aws:iam::12345678:role/video-bucket-permissions"
# -- RBAC settings for patching finalizers KEDA scaled resources
rbacRole:
# -- Enable to create RBAC role to access few KEDA resources. If using an external role, set to false and provide its name in `nameOverride` below
create: false
# -- Override resource name or provide an external role name
# nameOverride:
annotations: {}
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 role binding settings for patching finalizers KEDA scaled resources
rbacRoleBinding:
# -- Enable 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
create: false
# -- Override resource name or provide an external role binding name
# nameOverride:
annotations: {}
subjects:
- kind: ServiceAccount
roleRef:
kind: Role
apiGroup: rbac.authorization.k8s.io
# Configure the ingress resource to access the Grid installation.
ingress:
# -- Enable to create ingress resource
enabled: true
# -- Enable ingress resource with automatically installing Ingress NGINX Controller
enableWithController: false
# -- Name of ingress class to select which controller will implement ingress resource
className: "nginx"
# Refer to list nginx annotations: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md#annotations
nginx:
# -- Enable corresponding annotations for NGINX Ingress Controller
websocket: true
# -- Set timeout to corresponding annotations for NGINX Ingress Controller
proxyTimeout: 3600
proxyBuffer:
# -- Set buffer size to corresponding annotations for NGINX Ingress Controller
size: 512M
# -- Set buffer number to corresponding annotations for NGINX Ingress Controller
number: 4
# -- Enable corresponding annotations for NGINX Ingress Controller
sslPassthrough: true
# -- Specify a Secret with the certificate `tls.crt`, key `tls.key`, the name in the form "namespace/secretName" for NGINX Ingress Controller
# sslSecret: ""
# -- Enables or disables HTTP/2 support in secure connections via annotations for NGINX Ingress Controller
useHttp2: true
# -- Apply upstream keepalive settings once HTTP/2 is enabled
upstreamKeepalive:
# -- Set keepalive connections to corresponding annotations for NGINX Ingress Controller
connections: 10000
# -- Set keepalive timeout to corresponding annotations for NGINX Ingress Controller
time: 1h
# -- Set keepalive requests to corresponding annotations for NGINX Ingress Controller
requests: 10000
ports:
# -- Specify HTTP port is exposed by ingress controller
http: 80
# -- Specify HTTPS port is exposed by ingress controller
https: 443
# -- Custom annotations for ingress resource
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
# -- Default host for the ingress resource
hostname: $SELENIUM_GRID_HOST
# -- Default host path for the ingress resource
path: $INGRESS_AND_SUB_PATH
# -- Default path type for the ingress resource
pathType: Prefix
# -- List of paths for the ingress resource. This will override the default path
paths:
- path: $INGRESS_AND_SUB_PATH
pathType: Prefix
backend:
service:
name: selenium-grid-selenium-router
port:
number: 4444
- path: $INGRESS_AND_SUB_PATH/ui/
pathType: Prefix
backend:
service:
name: selenium-grid-selenium-router
port:
number: 4444
# -- TLS backend configuration for ingress resource
tls: []
# ConfigMap that contains SE_EVENT_BUS_HOST, SE_EVENT_BUS_PUBLISH_PORT and SE_EVENT_BUS_SUBSCRIBE_PORT variables
busConfigMap:
# -- Override the name of the bus configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"
# -- Custom annotations for configmap
annotations: {}
# ConfigMap that contains environment variables for session map
sessionMapConfigMap:
# -- Override the name of the session map configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"
# -- Custom annotations for configmap
annotations: {}
# ConfigMap that contains environment variables for session queue
sessionQueueConfigMap:
# -- Override the name of the session map configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"
# -- Custom annotations for configmap
annotations: {}
distributorConfigMap:
# -- Override the name of the distributor configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"
# -- Default mode for ConfigMap is mounted as file
defaultMode: 0755
# -- Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
extraScriptsImportFrom: "configs/distributor/**"
# -- Directory where the extra scripts are mounted to
extraScriptsDirectory: "/opt/bin"
# extraScripts:
# -- Key to set contents for script file via --set-file
# distributorProbe.sh: ""
# -- Name of volume mount is used to mount scripts in the ConfigMap. Default is same as this configMap name
scriptVolumeMountName:
# -- Custom annotations for configmap
annotations: {}
routerConfigMap:
# -- Override the name of the router configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100"
# -- Default mode for ConfigMap is mounted as file
defaultMode: 0755
# -- Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
extraScriptsImportFrom: "configs/router/**"
# -- Directory where the extra scripts are mounted to
extraScriptsDirectory: "/opt/bin"
# extraScripts:
# -- Key to set contents for script file via --set-file
# routerGraphQLUrl.sh: ""
# -- Key to set contents for script file via --set-file
# routerProbe.sh: ""
# -- Name of volume mount is used to mount scripts in the ConfigMap
scriptVolumeMountName:
# -- Custom annotations for configmap
annotations: {}
# ConfigMap that contains common environment variables for browser nodes
nodeConfigMap:
# -- Override the name of the node configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data:
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=50"
# -- Default mode for ConfigMap is mounted as file
defaultMode: 0755
# -- Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
extraScriptsImportFrom: "configs/node/**"
# -- Directory where the extra scripts are mounted to
extraScriptsDirectory: "/opt/bin"
# extraScripts:
# -- Key to set contents for script file via --set-file
# nodeGridUrl.sh: ""
# -- Key to set contents for script file via --set-file
# nodePreStop.sh: ""
# -- Key to set contents for script file via --set-file
# nodeProbe.sh: ""
# -- Name of volume mount is used to mount scripts in the ConfigMap
scriptVolumeMountName:
leftoversCleanup:
# -- Enable feature automatic browser leftovers cleanup stuck browser processes, tmp files
enabled: false
# -- Interval in seconds to run the cleanup job
jobIntervalInSecs: 3600
# -- Browser process elapsed time in seconds to consider as leftovers
browserElapsedTimeInSecs: 7200
# -- Tmp files elapsed time in days to consider as leftovers
tmpFilesAfterDays: 1
# -- Custom annotations for configmap
annotations: {}
recorderConfigMap:
# -- Override the name of the recorder configMap
# nameOverride:
# -- Default mode for ConfigMap is mounted as file
defaultMode: 0755
# -- Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
extraScriptsImportFrom: "configs/recorder/**"
# -- Directory where the extra scripts are mounted to
extraScriptsDirectory: "/opt/bin"
# -- List of extra scripts to be mounted to the container. Format as `filename: content`
# extraScripts:
# video.sh: ""
# video_graphQLQuery.sh: ""
# -- Name of volume mount is used to mount scripts in the ConfigMap
# scriptVolumeMountName:
# -- Directory in container where the videos are stored
videoVolumeMountName: videos
# -- Custom annotations for configmap
annotations: {}
uploaderConfigMap:
# -- Override the name of the uploader configMap
# nameOverride:
# -- Default mode for ConfigMap is mounted as file
defaultMode: 0755
# -- Directory where the extra scripts are imported to ConfigMap by default (if given a relative path, it should be in chart's directory)
extraScriptsImportFrom: "configs/uploader/**"
# -- Directory where the extra scripts are mounted to
extraScriptsDirectory: "/opt/bin"
# -- List of extra scripts to be mounted to the container. Format as `filename: content`
# extraScripts:
# upload.sh: ""
# -- Extra files stored in Secret to be mounted to the container.
# secretFiles:
# upload.conf: "[sample]"
# -- Name of volume mount is used to mount scripts in the ConfigMap
# scriptVolumeMountName:
# -- Name of Secret is used to store the `secretFiles`
# secretVolumeMountName:
# -- Custom annotations for configmap
annotations: {}
# -- ConfigMap that contains common environment variables for Logging (https://www.selenium.dev/documentation/grid/configuration/cli_options/#logging)
loggingConfigMap:
# -- Override the name of the logging configMap
# nameOverride:
# -- Override or add extra data to the ConfigMap. The property that appears last within the ConfigMap overwrites any preceding values
data: {}
# -- Custom annotations for configmap
annotations: {}
serverConfigMap:
# -- Override the name of the server configMap
# nameOverride:
# -- Extra common environment variables for Server (https://www.selenium.dev/documentation/grid/configuration/cli_options/#server) to server configMap
data:
# Log level of supervisord. Accept values: critical, error, warn, info, debug, trace, blather (http://supervisord.org/logging.html)
SE_SUPERVISORD_LOG_LEVEL: "info"
SE_FF_MPEG_IMAGE: *videoImageTag
SE_NAMESPACE: "$KUBERNETES_NAMESPACE"
# -- Custom annotations for configmap
annotations: {}
# Secrets for all components. Component environment variables contain sensitive data should be stored in secrets.
secrets:
# -- Create the default secret for all components. If using an external secret, set to false and provide its name in `nameOverride` below
create: true
# -- Override to use an external secret
# nameOverride:
# -- Extra environment variables set to the secret
data:
SE_VNC_PASSWORD: "secret"
# -- Custom annotations for secret
annotations: {}
# Configuration for isolated components (applied only if `isolateComponents: true`)
components:
# Configuration for router component
router:
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Router image name
imageName: router
# -- Router image tag (this overwrites global.seleniumGrid.imageTag parameter)
# imageTag:
# -- 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/)
# imagePullSecret: ""
# -- Custom sub path for Router
subPath: "$INGRESS_AND_SUB_PATH"
# -- Disable the Grid UI
disableUI: false
# -- Specify extra environment variables for Router
extraEnvironmentVariables: []
# -- Specify extra environment variables from ConfigMap and Secret for Router
extraEnvFrom: []
# -- Specify affinity for router pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for router pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Custom annotations for router pods
annotations: {}
# -- Router container port
port: 4444
# -- Router expose NodePort
nodePort: $NODE_PORT_ROUTER
# -- Startup probe settings
startupProbe:
enabled: true
path: /readyz
initialDelaySeconds: 5
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: true
path: /readyz
initialDelaySeconds: 12
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: true
path: /readyz
initialDelaySeconds: 60
failureThreshold: 30
timeoutSeconds: 60
periodSeconds: 60
successThreshold: 1
# -- Resources for router container
resources:
requests:
cpu: $ROUTER_CPU_REQUESTS
ephemeral-storage: $ROUTER_EPHEMERAL_STORAGE_REQUESTS
memory: $ROUTER_MEMORY_REQUESTS
limits:
cpu: $ROUTER_CPU_LIMIT
ephemeral-storage: $ROUTER_EPHEMERAL_STORAGE_LIMIT
memory: $ROUTER_MEMORY_LIMIT
# -- SecurityContext for router container
securityContext: {}
# -- Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
serviceType: NodePort
# -- Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
# clusterIP: ""
# -- Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
# externalName: ""
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
# loadBalancerIP: ""
# -- Custom annotations for router service
serviceAnnotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# serviceExternalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# serviceSessionAffinity: ""
# -- Tolerations for router pods
tolerations: []
# -- Node selector for router pods
nodeSelector: {}
# -- Priority class name for router pods
priorityClassName: "high"
# Configuration for distributor component
distributor:
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Distributor image name
imageName: distributor
# -- Distributor image tag (this overwrites global.seleniumGrid.imageTag parameter)
# imageTag:
# -- 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/)
# imagePullSecret: ""
# -- Configure fixed-sized thread pool for the Distributor to create new sessions as it consumes new session requests from the queue
newSessionThreadPoolSize: 5000
# -- Specify extra environment variables for Distributor
extraEnvironmentVariables: []
# -- Specify extra environment variables from ConfigMap and Secret for Distributor
extraEnvFrom: []
# -- Specify affinity for distributor pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for Distributor pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Custom annotations for Distributor pods
annotations: {}
# -- Distributor container port
port: 5553
# -- Distributor expose NodePort
nodePort: 30553
# -- Startup probe settings
startupProbe:
enabled: true
path: /readyz
initialDelaySeconds: 5
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: true
path: /readyz
initialDelaySeconds: 12
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: true
path: /readyz
initialDelaySeconds: 60
failureThreshold: 10
timeoutSeconds: 60
periodSeconds: 60
successThreshold: 1
# -- Resources for Distributor container
resources:
requests:
cpu: $DISTRIBUTOR_CPU_REQUESTS
ephemeral-storage: $DISTRIBUTOR_EPHEMERAL_STORAGE_REQUESTS
memory: $DISTRIBUTOR_MEMORY_REQUESTS
limits:
cpu: $DISTRIBUTOR_CPU_LIMIT
ephemeral-storage: $DISTRIBUTOR_EPHEMERAL_STORAGE_LIMIT
memory: $DISTRIBUTOR_MEMORY_LIMIT
# -- SecurityContext for Distributor container
securityContext: {}
# -- Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
serviceType: ClusterIP
# -- Custom annotations for Distributor service
serviceAnnotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# serviceExternalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# serviceSessionAffinity: ""
# -- Tolerations for Distributor pods
tolerations: []
# -- Node selector for Distributor pods
nodeSelector: {}
# -- Priority class name for Distributor pods
priorityClassName: "high"
# Configuration for Event Bus component
eventBus:
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Event Bus image name
imageName: event-bus
# -- Event Bus image tag (this overwrites global.seleniumGrid.imageTag parameter)
# imageTag:
# -- 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/)
imagePullSecret: ""
# -- Specify extra environment variables for Event Bus
extraEnvironmentVariables: []
# -- Specify extra environment variables from ConfigMap and Secret for Event Bus
extraEnvFrom: []
# -- Specify affinity for Event Bus pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for Event Bus pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Custom annotations for Event Bus pods
annotations: {}
# -- Event Bus container port
port: 5557
# -- Event Bus expose NodePort
nodePort: $NODE_PORT_EVENT_BUS
# -- Container port where events are published
publishPort: 4442
# -- NodePort exposed where events are published
publishNodePort: $PUBLISH_NODE_PORT_EVENT_BUS
# -- Container port where to subscribe for events
subscribePort: 4443
# -- NodePort exposed where to subscribe for events
subscribeNodePort: $SUBSCRIBE_NODE_PORT_EVENT_BUS
# -- Resources for event-bus container
resources:
requests:
cpu: $EVENTBUS_CPU_REQUESTS
ephemeral-storage: $EVENTBUS_EPHEMERAL_STORAGE_REQUESTS
memory: $EVENTBUS_MEMORY_REQUESTS
limits:
cpu: $EVENTBUS_CPU_LIMIT
ephemeral-storage: $EVENTBUS_EPHEMERAL_STORAGE_LIMIT
memory: $EVENTBUS_MEMORY_LIMIT
# -- SecurityContext for event-bus container
securityContext: {}
# -- Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
serviceType: NodePort
# -- Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
# clusterIP: ""
# -- Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
# externalName: ""
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
# loadBalancerIP: ""
# -- Custom annotations for Event Bus service
serviceAnnotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# serviceExternalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# serviceSessionAffinity: ""
# -- Tolerations for Event Bus pods
tolerations: []
# -- Node selector for Event Bus pods
nodeSelector: {}
# -- Priority class name for Event Bus pods
priorityClassName: "high"
# Configuration for Session Map component
sessionMap:
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Session Map image name
imageName: sessions
# -- Session Map image tag (this overwrites global.seleniumGrid.imageTag parameter)
# imageTag:
# -- 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/)
# imagePullSecret: ""
# -- Specify extra environment variables for Session Map
extraEnvironmentVariables: []
# -- Specify extra environment variables from ConfigMap and Secret for Session Map
extraEnvFrom: []
# -- Specify affinity for Session Map pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for Session Map pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Custom annotations for Session Map pods
annotations: {}
# -- Session Map container port
port: 5556
# -- Resources for Session Map container
resources:
requests:
cpu: $SESSIONMAP_CPU_REQUESTS
ephemeral-storage: $SESSIONMAP_EPHEMERAL_STORAGE_REQUESTS
memory: $SESSIONMAP_MEMORY_REQUESTS
limits:
cpu: $SESSIONMAP_CPU_LIMIT
ephemeral-storage: $SESSIONMAP_EPHEMERAL_STORAGE_LIMIT
memory: $SESSIONMAP_MEMORY_LIMIT
# -- SecurityContext for Session Map container
securityContext: {}
# -- Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
serviceType: ClusterIP
# -- Custom annotations for Session Map service
serviceAnnotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# serviceExternalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# serviceSessionAffinity: ""
# -- Tolerations for Session Map pods
tolerations: []
# -- Node selector for Session Map pods
nodeSelector: {}
# -- Priority class name for Session Map pods
priorityClassName: "high"
externalDatastore:
# -- Enable external datastore for Session Map
enabled: false
# -- Backend for external datastore (supported: postgresql, redis). Details for each backend are described below config key
backend: postgresql
# -- Configure database backed Session Map (https://www.selenium.dev/documentation/grid/advanced_features/external_datastore/#database-backed-session-map)
postgresql:
implementation: "org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap"
jdbcUser: "seluser"
jdbcPassword: "seluser"
jdbcUrl: "jdbc:postgresql://{{ $.Release.Name }}-postgresql:5432/selenium_sessions"
# -- Configure Redis backed Session Map (https://www.selenium.dev/documentation/grid/advanced_features/external_datastore/#redis-backed-session-map)
redis:
scheme: "redis"
implementation: "org.openqa.selenium.grid.sessionmap.redis.RedisBackedSessionMap"
hostname: "{{ $.Release.Name }}-redis-master"
port: "6379"
# Configuration for Session Queue component
sessionQueue:
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Session Queue image name
imageName: session-queue
# -- Session Queue image tag (this overwrites global.seleniumGrid.imageTag parameter)
# imageTag:
# -- 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/)
imagePullSecret: ""
# -- Specify extra environment variables for Session Queue
extraEnvironmentVariables: []
# -- Specify extra environment variables from ConfigMap and Secret for Session Queue
extraEnvFrom: []
# -- Specify affinity for Session Queue pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for Session Queue pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Custom annotations for Session Queue pods
annotations: {}
# -- Session Queue container port
port: 5559
# -- Session Queue expose NodePort
nodePort: 30559
# -- Resources for Session Queue container
resources:
requests:
cpu: $SESSIONQUEUE_CPU_REQUESTS
ephemeral-storage: $SESSIONQUEUE_EPHEMERAL_STORAGE_REQUESTS
memory: $SESSIONQUEUE_MEMORY_REQUESTS
limits:
cpu: $SESSIONQUEUE_CPU_LIMIT
ephemeral-storage: $SESSIONQUEUE_EPHEMERAL_STORAGE_LIMIT
memory: $SESSIONQUEUE_MEMORY_LIMIT
# -- SecurityContext for Session Queue container
securityContext: {}
# -- Kubernetes service type (see https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
serviceType: ClusterIP
# -- Custom annotations for Session Queue service
serviceAnnotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# serviceExternalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# serviceSessionAffinity: ""
# -- Tolerations for Session Queue pods
tolerations: []
# -- Node selector for Session Queue pods
nodeSelector: {}
# -- Priority class name for Session Queue pods
priorityClassName: "high"
# -- Custom sub path for all components
subPath: "$INGRESS_AND_SUB_PATH"
# -- Custom environment variables for all components
extraEnvironmentVariables:
- name: SE_SESSION_REQUEST_TIMEOUT
value: "3600"
- name: SE_JAVA_OPTS
value: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MinRAMPercentage=100 -XX:MaxRAMPercentage=100"
# - name: SE_ENABLE_TRACING
# value: "true"
# - name: SE_JAVA_OPTS
# value: "-Xmx512m"
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for all components
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# -- Extra volume mounts for component container
extraVolumeMounts: []
# - name: logs-volume
# mountPath: /opt/selenium/logs
# -- Extra volumes for component pod
extraVolumes: []
# - name: logs-volume
# persistentVolumeClaim:
# claimName: external-logs-pvc
tracing:
# -- Enable tracing. Implies installing Jaeger
enabled: false
# -- Enable tracing without automatically installing Jaeger
enabledWithExistingEndpoint: $ENABLE_TRACING
# -- Exporter type for tracing. Recommended `otlp` for wide compatibility with observability backends (e.g. Jaeger, Elastic, etc.)
exporter: otlp
# -- Exporter endpoint for pushing trace data
exporterEndpoint: 'https://opentm-cloud.host'
# -- Enable global auto-configuration for tracing
globalAutoConfigure: true
# ingress:
# # -- Enable ingress resource to access the Jaeger
# enabled: true
# # -- Annotations for Jaeger ingress resource
# annotations:
# # -- Configure paths for Jaeger ingress resource
# paths:
# - backend:
# service:
# name: "{{ .Release.Name }}-jaeger-query"
# port:
# number: 16686
# path: &jaegerBasePath "/jaeger"
# pathType: Prefix
monitoring:
enabled: false
enabledWithExistingAgent: false
exporter:
nameOverride: ""
imageRegistry: "ricardbejarano"
imageName: "graphql_exporter"
imageTag: "latest"
# -- Custom pull secret for container in patch job
imagePullSecret: ""
annotations: {}
port: 9199
service:
# -- Create a service for exporter
enabled: true
# -- Service type
type: ClusterIP
# -- Set specific clusterIP when serviceType is ClusterIP (see https://kubernetes.io/docs/concepts/services-networking/service/#type-clusterip)
# clusterIP: ""
# -- Set specific externalName when serviceType is ExternalName (see https://kubernetes.io/docs/concepts/services-networking/service/#type-externalname)
# externalName: ""
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
# loadBalancerIP: ""
# -- Node port for service
nodePort: 30199
# -- Annotations for exporter service
annotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# externalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# sessionAffinity: ""
replicas: 1
additionalScrapeConfigs:
# key: ""
# value: ""
annotations: {}
# Keda scaled object configuration
autoscaling:
# -- Enable autoscaling. Implies installing KEDA
enabled: false
# -- Enable autoscaling without automatically installing KEDA
enableWithExistingKEDA: true
# -- Which type of KEDA scaling to use: job or deployment
scalingType: job
# -- Specify an external KEDA TriggerAuthentication resource is used for scaler triggers config. Apply for all browser nodes
authenticationRef:
# name: ""
annotations:
"helm.sh/hook": post-install,post-upgrade,post-rollback
# TriggerAuthentication is used by ScaledObject/ScaledJob, hence weight should be less than those hooks
"helm.sh/hook-weight": "0"
# Configuration for ScaledObject triggers https://keda.sh/docs/latest/reference/scaledobject-spec/#triggers
# -- Enables caching of metric values during polling interval (as specified in .spec.pollingInterval, the default: false in KEDA).
useCachedMetrics: false
# -- The type of metric that should be used (The default: AverageValue in KEDA)
metricType: ""
# -- Annotations for KEDA resources: ScaledObject and ScaledJob
annotations:
"helm.sh/hook": post-install,post-upgrade,post-rollback
# Ensure the weight should be higher than TriggerAuthentication hook
"helm.sh/hook-weight": "1"
patchObjectFinalizers:
# -- Override the name of the patch job
# nameOverride:
# -- Enable 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
enabled: false
# -- Deadline (in seconds) for patch job to complete
activeDeadlineSeconds: 120
# -- Annotations for patch job
annotations:
"helm.sh/hook": post-install,post-upgrade,post-rollback,pre-delete
"helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation
# This should be run before all other hooks (since delete action is called), so use a negative weight
"helm.sh/hook-weight": "-1"
# -- Define an external service account name contains permissions to patch KEDA scaled resources
serviceAccount: "$KUBERNETES_NAMESPACE-sa"
# -- Custom pull secret for container in patch job
imagePullSecret: ""
# -- Define resources for container in patch job
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 200m
memory: 500Mi
# -- Options for KEDA scaled resources (keep only common options used for both ScaledJob and ScaledObject)
scaledOptions:
# -- Minimum number of replicas
minReplicaCount: 0
# -- Maximum number of replicas
maxReplicaCount: 220
# -- Polling interval in seconds
pollingInterval: 5
# List of triggers. Be careful, the default trigger of selenium-grid will be overwritten if you specify this
# triggers:
# Options for KEDA ScaledJobs (only used when scalingType is set to "job"). See https://keda.sh/docs/latest/concepts/scaling-jobs/#scaledjob-spec
scaledJobOptions:
scalingStrategy:
# -- Scaling strategy for KEDA ScaledJob - https://keda.sh/docs/latest/reference/scaledjob-spec/#scalingstrategy
strategy: default
# -- Number of Completed jobs should be kept
successfulJobsHistoryLimit: 0
# -- Number of Failed jobs should be kept (for troubleshooting purposes)
failedJobsHistoryLimit: 0
# -- Specify job target ref for KEDA ScaledJob
jobTargetRef:
parallelism: 1
completions: 1
backoffLimit: 0
# Options for KEDA ScaledObjects (only used when scalingType is set to "deployment"). See https://keda.sh/docs/latest/concepts/scaling-deployments/#scaledobject-spec
scaledObjectOptions:
scaleTargetRef:
# -- Target reference for KEDA ScaledObject
kind: Deployment
# -- Define terminationGracePeriodSeconds for scalingType "deployment". Period for `deregisterLifecycle` to gracefully shut down the node before force terminating it
terminationGracePeriodSeconds: 3600
# -- Define preStop command to shut down the node gracefully when scalingType is set to "deployment"
deregisterLifecycle:
preStop:
exec:
command: [ "bash", "-c", "/opt/bin/nodePreStop.sh" ]
# Configuration additional nodes with different versions, capabilities, etc.
crossBrowsers:
# -- Additional chrome nodes, array of objects with the same structure as `chromeNode`
chromeNode:
- nameOverride:
# - Refer to file `multiple-nodes-platform-version.yaml` to configure additional nodes
# -- Additional firefox nodes, array of objects with the same structure as `firefoxNode`
firefoxNode:
- nameOverride:
# - Refer to file `multiple-nodes-platform-version.yaml` to configure additional node browsers
# -- Additional edge nodes, array of objects with the same structure as `edgeNode`
edgeNode:
- nameOverride:
# - Refer to file `multiple-nodes-platform-version.yaml` to configure additional node browsers
# -- Additional release nodes, array of objects with the same structure as `relayNode`
relayNode:
- nameOverride:
# Configuration for chrome nodes
chromeNode:
# -- Enable chrome nodes
enabled: $ADD_DEFAULT_BROWSERS
# -- NOTE: Only used when autoscaling.enabled is false
# Enable creation of Deployment
# true (default) - if you want long-living pods
# false - for provisioning your own custom type such as Jobs
deploymentEnabled: false
# -- Global update strategy will be overwritten by individual component
updateStrategy:
type: RollingUpdate
# -- Number of chrome nodes
replicas: 1
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Image of chrome nodes
imageName: node-chrome
# -- Image of chrome nodes (this overwrites global.seleniumGrid.nodesImageTag)
# imageTag:
# -- 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/)
imagePullSecret: ""
# -- Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
ports: []
# - 5900
# - 7900
# -- Node component port
port: 5555
# -- Node component expose NodePort
nodePort:
# -- Specify affinity for chrome-node pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for chrome-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Annotations for chrome-node pods
annotations: {}
# -- Labels for chrome-node pods
labels: {}
# -- Shared process namespace for chrome-node pods
shareProcessNamespace: true
# Resources for chrome-node container
resources:
# -- Request resources for chrome-node pods
requests:
memory: "1Gi"
cpu: "1"
# -- Limit resources for chrome-node pods
limits:
memory: "2Gi"
cpu: "1"
# -- SecurityContext for chrome-node container
securityContext: {}
# -- Tolerations for chrome-node pods
tolerations: []
# -- Node selector for chrome-node pods
nodeSelector: {}
# -- Custom host aliases for chrome nodes
hostAliases:
# - ip: "198.51.100.0"
# hostnames:
# - "example.com"
# - "example.net"
# - ip: "203.0.113.0"
# hostnames:
# - "example.org"
# -- Custom environment variables for chrome nodes
extraEnvironmentVariables:
- name: SE_SESSION_REQUEST_TIMEOUT
value: "3600"
# - name: SE_ENABLE_TRACING
# value: "true"
# - name: SE_VNC_NO_PASSWORD
# value: "1"
# - name: SE_VNC_VIEW_ONLY
# value: "1"
# - name: SE_JAVA_OPTS
# value: "-Xmx512m"
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for chrome nodes
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# Service configuration
service:
# -- Create a service for node
enabled: false
# -- Service type
type: ClusterIP
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
loadBalancerIP: ""
# -- Extra ports exposed in node service
ports:
# - name: vnc-port
# port: 5900
# targetPort: 5900
# -- Custom annotations for service
annotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# externalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# sessionAffinity: ""
# -- Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
# dshmVolumeSizeLimit: ""
# -- Priority class name for chrome-node pods
# priorityClassName: ""
# -- Startup probe settings
startupProbe:
enabled: true
path: /status
initialDelaySeconds: 0
periodSeconds: 5
timeoutSeconds: 60
failureThreshold: 12
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: false
path: /status
initialDelaySeconds: 10
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: false
path: /status
initialDelaySeconds: 30
failureThreshold: 6
timeoutSeconds: 60
periodSeconds: 10
successThreshold: 1
# -- Time to wait for pod termination
terminationGracePeriodSeconds: 30
# -- Define preStop command to shut down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
deregisterLifecycle:
# -- Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
lifecycle: {}
# -- Extra volume mounts for chrome-node container
extraVolumeMounts: []
# - name: my-extra-volume
# mountPath: /home/seluser/Downloads
# -- Extra volumes for chrome-node pod
extraVolumes: []
# - name: my-extra-volume
# emptyDir: {}
# - name: my-extra-volume-from-pvc
# persistentVolumeClaim:
# claimName: my-pv-claim
# -- Override the number of max sessions per node
nodeMaxSessions:
# -- Override the scaled options for chrome nodes
scaledOptions:
# -- Override the scaledJobOptions for chrome nodes
scaledJobOptions:
# -- Override the scaledObjectOptions for chrome nodes
scaledObjectOptions:
hpa:
# -- browserName should match with Node stereotype and request capability is scaled by this scaler
browserName: "chrome"
# -- sessionBrowserName if the browserName is different from the sessionBrowserName
sessionBrowserName: "chrome"
# -- browserVersion should match with Node stereotype and request capability is scaled by this scaler
# browserVersion: ""
# -- platformName should match with Node stereotype and request capability is scaled by this scaler
platformName: "linux"
# browserVersion: '91.0' # Optional. Only required when supporting multiple versions of browser in your Selenium Grid.
# -- Skip check SSL when connecting to the Graphql endpoint
unsafeSsl: '{{ template "seleniumGrid.graphqlURL.unsafeSsl" . }}' # Optional
# -- It is used to add initContainers in the same pod of the browser node.
# It should be set using the --set-json option
initContainers: []
# -- 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
sidecars: []
# -- Override specific video recording settings for chrome node
videoRecorder: {}
# Configuration for firefox nodes
firefoxNode:
# -- Enable firefox nodes
enabled: $ADD_DEFAULT_BROWSERS
# -- NOTE: Only used when autoscaling.enabled is false
# Enable creation of Deployment
# true (default) - if you want long living pods
# false - for provisioning your own custom type such as Jobs
deploymentEnabled: false
# -- Global update strategy will be overwritten by individual component
updateStrategy:
type: RollingUpdate
# -- Number of firefox nodes
replicas: 1
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Image of firefox nodes
imageName: node-firefox
# -- Image of firefox nodes (this overwrites global.seleniumGrid.nodesImageTag)
# imageTag:
# -- 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/)
imagePullSecret: ""
# -- Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
ports: []
# - 5900
# - 7900
# -- Node component port
port: 5555
# -- Node component expose NodePort
nodePort:
# -- Specify affinity for firefox-node pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for firefox-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Annotations for firefox-node pods
annotations: {}
# -- Labels for firefox-node pods
labels: {}
# -- Tolerations for firefox-node pods
tolerations: []
# -- Node selector for firefox-node pods
nodeSelector: {}
# -- Shared process namespace for firefox-node pods
shareProcessNamespace: true
# Resources for firefox-node container
resources:
# -- Request resources for firefox-node pods
requests:
memory: "1Gi"
cpu: "1"
# -- Limit resources for firefox-node pods
limits:
memory: "2Gi"
cpu: "1"
# -- SecurityContext for firefox-node container
securityContext: {}
# -- Custom host aliases for firefox nodes
hostAliases:
# - ip: "198.51.100.0"
# hostnames:
# - "example.com"
# - "example.net"
# - ip: "203.0.113.0"
# hostnames:
# - "example.org"
# -- Custom environment variables for firefox nodes
extraEnvironmentVariables: []
# - name: SE_JAVA_OPTS
# value: "-Xmx512m"
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for firefox nodes
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# Service configuration
service:
# -- Create a service for node
enabled: false
# -- Service type
type: ClusterIP
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
loadBalancerIP: ""
# -- Extra ports exposed in node service
ports:
# - name: vnc-port
# port: 5900
# targetPort: 5900
# -- Custom annotations for service
annotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# externalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# sessionAffinity: ""
# -- Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
dshmVolumeSizeLimit: "2Gi"
# -- Priority class name for firefox-node pods
# priorityClassName: ""
# -- Startup probe settings
startupProbe:
enabled: true
path: /status
initialDelaySeconds: 0
periodSeconds: 5
timeoutSeconds: 60
failureThreshold: 12
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: false
path: /status
initialDelaySeconds: 10
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: false
path: /status
initialDelaySeconds: 30
failureThreshold: 6
timeoutSeconds: 60
periodSeconds: 10
successThreshold: 1
# -- Time to wait for pod termination
terminationGracePeriodSeconds: 30
# -- Define preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
deregisterLifecycle:
# -- Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
lifecycle: {}
# -- Extra volume mounts for firefox-node container
extraVolumeMounts: []
# - name: my-extra-volume
# mountPath: /home/seluser/Downloads
# -- Extra volumes for firefox-node pod
extraVolumes: []
# - name: my-extra-volume
# emptyDir: {}
# - name: my-extra-volume-from-pvc
# persistentVolumeClaim:
# claimName: my-pv-claim
# -- Override the number of max sessions per node
nodeMaxSessions:
# -- Override the scaled options for firefox nodes
scaledOptions:
# -- Override the scaledJobOptions for firefox nodes
scaledJobOptions:
# -- Override the scaledObjectOptions for firefox nodes
scaledObjectOptions:
hpa:
# -- browserName should match with Node stereotype and request capability is scaled by this scaler
browserName: "firefox"
# -- sessionBrowserName if the browserName is different from the sessionBrowserName
sessionBrowserName: "firefox"
# -- browserVersion should match with Node stereotype and request capability is scaled by this scaler
# browserVersion: ""
# -- platformName should match with Node stereotype and request capability is scaled by this scaler
platformName: "linux"
# -- Skip check SSL when connecting to the Graphql endpoint
unsafeSsl: '{{ template "seleniumGrid.graphqlURL.unsafeSsl" . }}' # Optional
# -- It is used to add initContainers in the same pod of the browser node.
# It should be set using the --set-json option
initContainers: []
# -- 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
sidecars: []
# -- Override specific video recording settings for firefox node
videoRecorder: {}
# Configuration for edge nodes
edgeNode:
# -- Enable edge nodes
enabled: $ADD_DEFAULT_BROWSERS
# -- NOTE: Only used when autoscaling.enabled is false
# Enable creation of Deployment
# true (default) - if you want long living pods
# false - for provisioning your own custom type such as Jobs
deploymentEnabled: false
# -- Global update strategy will be overwritten by individual component
updateStrategy:
type: RollingUpdate
# -- Number of edge nodes
replicas: 1
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Image of edge nodes
imageName: node-edge
# -- Image of edge nodes (this overwrites global.seleniumGrid.nodesImageTag)
# imageTag:
# -- 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/)
imagePullSecret: ""
# -- Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
ports: []
# - 5900
# - 7900
# -- Node component port
port: 5555
# -- Node component expose NodePort
nodePort:
# -- Specify affinity for edge-node pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for edge-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Annotations for edge-node pods
annotations: {}
# -- Labels for edge-node pods
labels: {}
# -- Tolerations for edge-node pods
tolerations: []
# -- Node selector for edge-node pods
nodeSelector: {}
# -- Shared process namespace for edge-node pods
shareProcessNamespace: true
# Resources for edge-node container
resources:
# -- Request resources for edge-node pods
requests:
memory: "1Gi"
cpu: "1"
# -- Limit resources for edge-node pods
limits:
memory: "2Gi"
cpu: "1"
# -- SecurityContext for edge-node container
securityContext: {}
# -- Custom host aliases for edge nodes
hostAliases:
# - ip: "198.51.100.0"
# hostnames:
# - "example.com"
# - "example.net"
# - ip: "203.0.113.0"
# hostnames:
# - "example.org"
# -- Custom environment variables for edge nodes
extraEnvironmentVariables: []
# - name: SE_JAVA_OPTS
# value: "-Xmx512m"
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for edge nodes
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# Service configuration
service:
# -- Create a service for node
enabled: false
# -- Service type
type: ClusterIP
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
# loadBalancerIP: ""
# -- Extra ports exposed in node service
ports:
# - name: vnc-port
# port: 5900
# targetPort: 5900
# -- Custom annotations for service
annotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# externalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# sessionAffinity: ""
# -- Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
# dshmVolumeSizeLimit: ""
# -- Priority class name for edge-node pods
# priorityClassName: ""
# -- Startup probe settings
startupProbe:
enabled: true
path: /status
initialDelaySeconds: 0
periodSeconds: 5
timeoutSeconds: 60
failureThreshold: 12
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: false
path: /status
initialDelaySeconds: 10
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: false
path: /status
initialDelaySeconds: 30
failureThreshold: 6
timeoutSeconds: 60
periodSeconds: 10
successThreshold: 1
# -- Time to wait for pod termination
terminationGracePeriodSeconds: 30
# -- Define preStop command to shuts down the chrome node gracefully. This overwrites autoscaling.deregisterLifecycle
deregisterLifecycle:
# -- Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
lifecycle: {}
# -- Extra volume mounts for edge-node container
extraVolumeMounts: []
# - name: my-extra-volume
# mountPath: /home/seluser/Downloads
# -- Extra volumes for edge-node pod
extraVolumes: []
# - name: my-extra-volume
# emptyDir: {}
# - name: my-extra-volume-from-pvc
# persistentVolumeClaim:
# claimName: my-pv-claim
# -- Override the number of max sessions per node
nodeMaxSessions:
# -- Override the scaled options for edge nodes
scaledOptions:
# -- Override the scaledJobOptions for edge nodes
scaledJobOptions:
# -- Override the scaledObjectOptions for edge nodes
scaledObjectOptions:
hpa:
# -- browserName should match with Node stereotype and request capability is scaled by this scaler
browserName: "MicrosoftEdge"
# -- sessionBrowserName if the browserName is different from the sessionBrowserName
sessionBrowserName: "msedge"
# -- browserVersion should match with Node stereotype and request capability is scaled by this scaler
# browserVersion: ""
# -- platformName should match with Node stereotype and request capability is scaled by this scaler
platformName: "linux"
# -- Skip check SSL when connecting to the Graphql endpoint
unsafeSsl: '{{ template "seleniumGrid.graphqlURL.unsafeSsl" . }}' # Optional
# -- It is used to add initContainers in the same pod of the browser node.
# It should be set using the --set-json option
initContainers: []
# -- 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
sidecars: []
# -- Override specific video recording settings for edge node
videoRecorder: {}
# Configuration for relay nodes
relayNode:
# -- Enable relay nodes
enabled: false
# -- NOTE: Only used when autoscaling.enabled is false
# Enable creation of Deployment
# true (default) - if you want long-living pods
# false - for provisioning your own custom type such as Jobs
deploymentEnabled: true
# -- Global update strategy will be overwritten by individual component
updateStrategy:
type: RollingUpdate
# -- Number of relay nodes
replicas: 1
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
imageRegistry:
# -- Image of relay nodes
imageName: node-base
# -- Image of relay nodes (this overwrites global.seleniumGrid.nodesImageTag)
imageTag:
# -- 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/)
imagePullSecret: ""
# -- Extra ports list to enable on the node container (e.g. SSH, VNC, NoVNC, etc.)
ports: []
# - 5900
# - 7900
# -- Node component port
port: 5555
# -- Node component expose NodePort
nodePort:
# -- Specify affinity for relay-node pods, this overwrites global.seleniumGrid.affinity parameter
affinity: {}
# -- Specify topologySpreadConstraints for relay-node pods, this overwrites global.seleniumGrid.topologySpreadConstraints parameter
topologySpreadConstraints: []
# -- Annotations for relay-node pods
annotations: {}
# -- Labels for relay-node pods
labels: {}
# -- Shared process namespace for relay-node pods
shareProcessNamespace: true
# Resources for relay-node container
resources:
# -- Request resources for relay-node pods
requests:
memory: "1Gi"
cpu: "1"
# -- Limit resources for relay-node pods
limits:
memory: "2Gi"
cpu: "1"
# -- SecurityContext for relay-node container
securityContext: {}
# -- Tolerations for relay-node pods
tolerations: []
# -- Node selector for relay-node pods
nodeSelector: {}
# -- Custom host aliases for relay nodes
hostAliases:
# - ip: "198.51.100.0"
# hostnames:
# - "example.com"
# - "example.net"
# - ip: "203.0.113.0"
# hostnames:
# - "example.org"
# -- Custom environment variables for relay nodes
extraEnvironmentVariables: []
# - name: SE_JAVA_OPTS
# value: "-Xmx512m"
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for relay nodes
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# Service configuration
service:
# -- Create a service for node
enabled: false
# -- Service type
type: ClusterIP
# -- Set specific loadBalancerIP when serviceType is LoadBalancer (see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)
loadBalancerIP: ""
# -- Extra ports exposed in node service
ports:
# - name: vnc-port
# port: 5900
# targetPort: 5900
# -- Custom annotations for service
annotations: {}
# -- Set externalTrafficPolicy to Local or Cluster (see https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/)
# externalTrafficPolicy: ""
# -- Set session affinity to None, ClientIP or ClientIPString
# sessionAffinity: ""
# -- Size limit for DSH volume mounted in container (if not set, default is disabled, e.g "1Gi")
# dshmVolumeSizeLimit: ""
# -- Priority class name for relay-node pods
# priorityClassName: ""
# -- Startup probe settings
startupProbe:
enabled: true
path: /status
initialDelaySeconds: 0
periodSeconds: 5
timeoutSeconds: 60
failureThreshold: 12
successThreshold: 1
# -- Readiness probe settings
readinessProbe:
enabled: false
path: /status
initialDelaySeconds: 10
failureThreshold: 10
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
# -- Liveness probe settings
livenessProbe:
enabled: false
path: /status
initialDelaySeconds: 30
failureThreshold: 6
timeoutSeconds: 60
periodSeconds: 10
successThreshold: 1
# -- Time to wait for pod termination
terminationGracePeriodSeconds: 30
# -- Define preStop command to shut down the relay node gracefully. This overwrites autoscaling.deregisterLifecycle
deregisterLifecycle:
# -- Define postStart and preStop events. This overwrites the defined preStop in deregisterLifecycle if any
lifecycle: {}
# -- Extra volume mounts for relay-node container
extraVolumeMounts: []
# - name: my-extra-volume
# mountPath: /home/seluser/Downloads
# -- Extra volumes for relay-node pod
extraVolumes: []
# - name: my-extra-volume
# emptyDir: {}
# - name: my-extra-volume-from-pvc
# persistentVolumeClaim:
# claimName: my-pv-claim
# -- Override the number of max sessions per node
nodeMaxSessions:
# -- Override the scaled options for relay nodes
scaledOptions:
# -- Override the scaledJobOptions for relay nodes
scaledJobOptions:
# -- Override the scaledObjectOptions for relay nodes
scaledObjectOptions:
hpa:
# -- browserName should match with Node stereotype and request capability is scaled by this scaler
browserName: "chrome"
# -- sessionBrowserName if the browserName is different from the sessionBrowserName
# sessionBrowserName: ""
# -- browserVersion should match with Node stereotype and request capability is scaled by this scaler
# browserVersion: ""
# -- platformName should match with Node stereotype and request capability is scaled by this scaler
platformName: "Android"
# -- Skip check SSL when connecting to the Graphql endpoint
unsafeSsl: '{{ template "seleniumGrid.graphqlURL.unsafeSsl" . }}' # Optional
# -- It is used to add initContainers in the same pod of the browser node.
# It should be set using the --set-json option
initContainers: []
# -- 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
sidecars: []
# -- Override specific video recording settings for edge node
videoRecorder: {}
# Video recording configuration for all browser nodes. Can be overridden by each browser node
videoRecorder:
# -- Enable video recording in all browser nodes
enabled: $ADD_VIDEO_RECORDING
# -- Container name is set to resource specs
name: video
# -- Registry to pull the image (this overwrites global.seleniumGrid.imageRegistry parameter)
# imageRegistry:
# -- Image of video recorder
imageName: video
# -- Image of video recorder (this overwrites global.seleniumGrid.videoImageTag)
# imageTag:
# -- Image pull policy (see https://kubernetes.io/docs/concepts/containers/images/#updating-images)
imagePullPolicy: IfNotPresent
# -- Directory to store video files in the container
targetFolder: "/videos"
uploader:
# -- Enable video uploader
enabled: $ADD_VIDEO_RECORDING
# -- Where to upload the video file e.g. remoteName://bucketName/path. Refer to destination syntax of rclone https://rclone.org/docs/
destinationPrefix: "s3-selenium-video:$S3_BUCKET/video/"
# -- What uploader to use (default is empty, internal upload in video container). See .videRecorder.s3 for how to create a new external sidecar container.
name:
# -- Uploader config file name
configFileName: upload.conf
# -- Uploader entry point file name
entryPointFileName: upload.sh
# -- For 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)
secrets:
# RCLONE_CONFIG_S3_TYPE: "s3"
# RCLONE_CONFIG_S3_PROVIDER: "AWS"
# RCLONE_CONFIG_S3_ENV_AUTH: "true"
# RCLONE_CONFIG_S3_REGION: "ap-southeast-1"
# RCLONE_CONFIG_S3_LOCATION_CONSTRAINT: "ap-southeast-1"
# RCLONE_CONFIG_S3_ACL: "private"
# RCLONE_CONFIG_S3_ACCESS_KEY_ID: "xxx"
# RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: "xxx"
# RCLONE_CONFIG_S3_NO_CHECK_BUCKET: "true"
# RCLONE_CONFIG_GS_TYPE: "s3"
# RCLONE_CONFIG_GS_PROVIDER: "GCS"
# RCLONE_CONFIG_GS_ENV_AUTH: "true"
# RCLONE_CONFIG_GS_REGION: "asia-southeast1"
# RCLONE_CONFIG_GS_LOCATION_CONSTRAINT: "asia-southeast1"
# RCLONE_CONFIG_GS_ACL: "private"
# RCLONE_CONFIG_GS_ACCESS_KEY_ID: "xxx"
# RCLONE_CONFIG_GS_SECRET_ACCESS_KEY: "xxx"
# RCLONE_CONFIG_GS_ENDPOINT: "https://storage.googleapis.com"
# RCLONE_CONFIG_GS_NO_CHECK_BUCKET: "true"
# -- Video recording container port
ports:
- 9000
resources:
# -- Request resources for video recorder pods
requests:
memory: "128Mi"
cpu: "0.1"
# -- Limit resources for video recorder pods
limits:
memory: "1Gi"
cpu: "1"
# -- SecurityContext for recorder container
securityContext:
# -- Extra environment variables for video recorder
extraEnvironmentVariables: []
# -- Custom environment variables by sourcing entire configMap, Secret, etc. for video recorder.
extraEnvFrom: []
# - configMapRef:
# name: proxy-settings
# - secretRef:
# name: mysecret
# -- Terminating grace period for video recorder
terminationGracePeriodSeconds: 30
# -- Startup probe settings
startupProbe: {}
# httpGet:
# path: /
# port: 9000
# failureThreshold: 120
# periodSeconds: 5
# -- Liveness probe settings
livenessProbe: {}
# -- Define lifecycle events for video recorder
lifecycle: {}
# -- 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
# -- Extra volumes for video recorder pod
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.name: s3"
s3:
imageRegistry: bitnami
imageName: aws-cli
imageTag: latest
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: 0
command: []
args: []
extraEnvironmentVariables: []
# - name: AWS_ACCESS_KEY_ID
# value: aws_access_key_id
# - name: AWS_SECRET_ACCESS_KEY
# value: aws_secret_access_key
# - name: AWS_REGION
# value: region
# - name:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: secret-key
# -- Custom labels for k8s resources
customLabels: {}
# Configuration for dependency chart keda
keda:
enabled: false
# -- Configuration for dependency chart ingress-nginx
ingress-nginx:
enabled: false
# -- Configuration for dependency chart kube-prometheus-stack
prometheus-stack:
enabled: false
# -- Configuration for dependency chart jaeger
jaeger:
enabled: false
postgresql:
enabled: false
redis:
enabled: false
Regarding the main issue, I rolled back to 0.38.1 and 4.27.0-20241204, and so far, no issues have been observed.
In the meantime, can you validate with the latest version 4.29.0?
Updated it yesterday, no issues so far. We’ll see how it performs under load today.
The only remaining issue is the current memory problem with the router. I'll try to create a heap histogram with jmap and share it here: https://github.com/SeleniumHQ/docker-selenium/issues/2528