Ошибка проверки готовности Zalenium: Ошибка проверки HTTP с кодом состояния: 502
Я пытаюсь развернуть таблицу рудимента в своем недавно развернутом кластере aks Kuberbetes (1.9.6) в Azure. Но я не заставляю его работать. Стручок дает журнал ниже:
[bram @ xforce zalenium] $ kubectl logs -f zalenium-zalenium-hub-6bbd86ff78-m25t2 Найдена учетная запись службы Kubernetes. Копирование файлов для Dashboard... cp: невозможно создать обычный файл '/home/seluser/videos/index.html': отказано в разрешении cp: невозможно создать каталог '/home/seluser/videos/css': отказано в разрешении cp: невозможно создать каталог '/home/seluser/videos/js': В доступе отказано Запуск обратного прокси-сервера Nginx... Запуск Selenium Hub... ..........08:49:14.052 [main] INFO oogrid.selenium.GridLauncherV3 - Информация о сборке Selenium: версия: '3.12.0', редакция: 'unknown' 08:49:14.120 [main] INFO oogrid.selenium.GridLauncherV3 - Запуск концентратора Selenium Grid на порту 4445 ...08:49:15.125 [main] INFO dzezckKubernetesContainerClient - инициализация поддержки Kubernetes..08:49:15.650 [main] WARN dzezckKubernetesContainerClient - ошибка инициализации поддержки Kubernetes. io.fabric8.kubernetes.client.KubernetesClientException: Операция: [get] для вида: [Pod] с именем: [zalenium-zalenium-hub-6bbd86ff78-m25t2] в пространстве имен: [по умолчанию] не выполнена. по адресу io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:62) по адресу io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable (KubernetesClientException.java.fase.ne.des.ber.des.ber.des.ber.weber.nec..BaseOperation.getMandatory(BaseOperation.java:206) на io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:162) на de.zalando.ep.zalenium.container.kubernetes.KubernetesContainerClient.(KubernetesContainerClient.java!.zalando.ep.zalenium.proxy.DockeredSeleniumStarter.(DockeredSeleniumStarter.java:59) в de.zalando.ep.zalenium.registry.ZaleniumRegistry.(ZaleniumRegistry.java:74) в de.zalando.ep.zalenium.registry.Zistry..(ZaleniumRegistry.java:62) в sun.reflect.NativeConstructorAccessorImpl.newInstance0(собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) в sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorIgn.structor.structor.structor.jj) java:423) на java.lang.Class.newInstance(Class.java:442) на org.openqa.grid.web.Hub.(Hub.java:93) на org.openqa.grid.selenium.GridLauncherV3$2.на запуск (GridLauncherV3.java:291) в org.openqa.grid.selenium.GridLauncherV3.launch(GridLauncherV3.java:122) в org.openqa.grid.selenium.GridLauncherV3.main(GridLauncherV3.java:82). Вызвано: net.ssl.SSLPeerUnverifiedException: имя хоста kubernetes.default.svc не подтверждено: сертификат: sha256/OyzkRILuc6LAX4YnMAIGrRKLmVnDgLRvCasxGXDhSoc= DN: CN= клиент, O= система: подключение к объекту. Соединение. RealConnection.java:308) по адресу okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.ja ва:268) по адресу okhttp3.internal.connection.RealConnection.connect(RealConnection.java:160) по адресу okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256) по адресу okhttp3.internal.connection.StreamAllocation.java:134) по адресу okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113) по адресу okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) по адресу okhttp3.internal.http.RealInperceCorce RealInterceptorChain.java:147) в okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) в okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) в центре (RealInterceptorChain.java:147) по адресу okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) по адресу okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) через ohttp. продолжить (RealInterceptorChain. (RealInterceptorChain.java:121) в io.fabric8.kubernetes.client.utils.ImpersonatorInterceptor.intercept(ImpersonatorInterceptor.java:56) в okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.jin). http.RealInterceptorChain.) по адресу okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) по адресу okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200) по адресу okhttp3.RealCall.execuj: i) в RealCall..client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:379) в io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:344) в io.fabric8.kubernetes.client.dsl.bet.handle OperationSupport.java:313) в io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:296) в io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleGet(BaseOperation.java:770) at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:195) ... Пропущено 16 общих кадров 08:49:15.651 [main] ИНФОРМАЦИЯ dzezckKubernetesContainerClient - собирается очистить все оставшиеся стручки селена, созданные Zalenium Использование: [параметры] Опции: --debug, -debug: включает LogLevel.FINE. По умолчанию: false --version, -version Отображает версию и завершает работу. По умолчанию: false -browserTimeout в секундах: количество секунд, в течение которых сеанс браузера может зависать во время выполнения команды WebDriver (пример: driver.get(url)). Если время ожидания истекло во время обработки команды WebDriver, сеанс завершится. Минимальное значение равно 60. Неуказанное, нулевое или отрицательное значение означает ожидание в течение неопределенного времени. -matcher, -capabilityMatcher имя класса: класс, реализующий интерфейс CapabilityMatcher. Определяет логику, которой будет следовать концентратор, чтобы определить, может ли запрос быть назначен узлу. Например, если вы хотите, чтобы процесс сопоставления использовал регулярные выражения вместо точного соответствия при указании версии браузера. ВСЕ узлы грид-экосистемы будут тогда использовать тот же самый способ Matcher, как определено здесь. -cleanUpCycle в мс: указывает, как часто хаб будет опрашивать запущенные прокси для истекших (то есть зависших) потоков. Также необходимо указать параметр "timeout" -custom: разделенные запятыми пары ключ = значение для пользовательских расширений сетки. НЕ РЕКОМЕНДУЕТСЯ - может быть признано устаревшим в будущих версиях. Пример: -custom myParamA=Value1,myParamB=Value2 -host IP или имя хоста: обычно определяется автоматически. Наиболее часто используется в экзотических сетевых конфигурациях (например, сеть с VPN). По умолчанию: 0.0.0.0 -hubConfig имя файла: файл JSON (следующий формат grid2), который определяет свойства хаба -jettyThreads, -jettyMaxThreads: максимальное количество потоков для Jetty. Неуказанное, нулевое или отрицательное значение означает, что будет использовано значение по умолчанию Jetty (200). -log filename: имя файла для регистрации. Если опущен, будет записано в STDOUT -maxSession максимальное количество тестов, которые могут одновременно выполняться на узле, независимо от используемого браузера -newSessionWaitTimeout в мс: время, после которого будет выполняться новый тест, ожидающий доступности узла из. Когда это происходит, тест выдает исключение, прежде чем пытаться запустить браузер. Неуказанное, нулевое или отрицательное значение означает ожидание бесконечно. По умолчанию: 600000 -port: номер порта, который будет использовать сервер. По умолчанию: 4445 -prioritizer имя класса: класс, реализующий интерфейс Prioritizer. Укажите пользовательский Приоритет, если вы хотите отсортировать порядок, в котором новые запросы сеанса обрабатываются при наличии очереди. Имя класса по умолчанию для нулевого (без приоритета = FIFO) -регистра: класс, реализующий интерфейс GridRegistry. Указывает реестр, который будет использовать концентратор. По умолчанию: de.zalando.ep.zalenium.registry.ZaleniumRegistry -роли параметры - [hub], [node] или [standalone]. По умолчанию: hub -servlet, -servlets: список дополнительных сервлетов, которые сетка (концентратор или узел) сделает доступной. Укажите несколько в командной строке: -servlet tld.company.ServletA -servlet tld.company.ServletB. Сервлет должен существовать по пути: /grid/admin/ServletA /grid/admin/ServletB -timeout, -sessionTimeout в секундах: указывает время ожидания, по истечении которого сервер автоматически завершает сеанс, который не выполнялся в течение последних X секунд, Тестовый слот будет выпущен для другого теста. Это обычно используется, чтобы заботиться о сбоях клиента. Для ролей узлов / узлов сетки также должен быть установлен cleanUpCycle. -throwOnCapabilityNotPresent true или false: если true, концентратор отклонит все тестовые запросы, если в настоящее время не зарегистрирован ни один совместимый прокси-сервер. Если установлено значение false, запрос будет поставлен в очередь, пока узел, поддерживающий возможность, не будет зарегистрирован в сетке. -withoutServlet, -withoutServlets: список отключаемых сервлетов по умолчанию (концентратор или узел). Только расширенные варианты использования. Не все сервлеты по умолчанию могут быть отключены. Укажите несколько в командной строке: -withoutServlet tld.company.ServletA -withoutServlet tld.company.ServletB org.openqa.grid.common.exception.GridConfigurationException: Ошибка при создании класса с de.zalando.ep.zalenium.registry.ZaleniumRegistry: null: в org.openqa.grid.web.Hub.(Hub.java:97) в org.openqa.grid.selenium.GridLauncherV3$2.launch(GridLauncherV3.java:291) в org.openqa.grid.selenium.GridLauncherV3.launch(GridLauncherV3.java:122) at org.openqa.grid.selenium.GridLauncherV3.main(GridLauncherV3.java:82) Вызвано: java.lang.ExceptionInInitializerError в de.zalando.ep.zalenium.registry.Zalenium Registry. Java: 74) в de.zalando.ep.zalenium.registry.ZaleniumRegistry.(ZaleniumRegistry.java:62) в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (родной метод) в sun.reflect.NativeConstructorAccessorImpl.newInstorAmpj.) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) на java.lang.reflect.Constructor.newInstance(Constructor.java:423) на java.lang.Class.newInstance(Class.java:442) на org.openqa.grid.web.Hub.(Hub.java:93) ... еще 3 Причины: java.lang.NullPointerException at java.util.TreeMap.putAll(TreeMap.java:313) в io.fabric8.kubernetes.client.dsl.base.BaseOperation.withLabels(BaseOperation.java:411.zalando.ep.zalenium.container.kubernetes.KubernetesContainerClient.initialiseContainerEnvironment(KubernetesContainerClient.java:339) в de.zalando.ep.zalenium.container.ContainerFactory.create.caland.ztainerzactor container.ContainerFactory.getContainerClient(ContainerFactory.java:22) в de.zalando.ep.zalenium.proxy.DockeredSeleniumStarter.(DockeredSeleniumStarter.java:59) ... еще 11...........................................................................................................................................................................................GridLauncher не удалось запустить через 1 минуту, сбой... % Всего% получено% Xferd Средняя скорость Время Время Время Текущая загрузка Загрузка Всего израсходовано Левая скорость 100 182 100 182 0 0 36103 0 -: -:--:-: - -:--:- 45500
Модуль описания дает следующее предупреждение: Нездоровый 4м (x12 на 6м) kubelet, aks-agentpool-93668098-0 Ошибка проверки готовности: ошибка проверки HTTP с кодом состояния: 502
Zalenium Image Версия (ы): дозель /zalenium:3
Если вы используете Kubernetes, укажите свою среду и, если применимо, ваши манифесты: я использую шаблоны как есть с https://github.com/zalando/zalenium/tree/master/docs/k8s/helm
Я думаю, что это связано с rbac из-за этой части "Ошибка инициализации поддержки Kubernetes. Io.fabric8.kubernetes.client.KubernetesClientException: Операция: [get] для вида: [Pod] с именем: [zalenium-zalenium-hub- 6bbd86ff78-m25t2] в пространстве имен: [по умолчанию] не удалось. At "
Я создал кластерную роль и кластерную привязку для учетной записи службы zalenium-zalenium, которая автоматически создается диаграммой Хелма.
kubectl create clusterrole zalenium --verb=get,list,watch,update,delete,create,patch --resource=pods,deployments,secrets
kubectl create clusterrolebinding zalenium --clusterrole=zalnium --serviceaccount=zalenium-zalenium --namespace=default
2 ответа
Проблема была связана с AKS Azure и Kubernetes. Это было исправлено. Смотрите выпуск github 399
Если опечатка, упомянутая Игнасио, не подходит, почему бы вам просто не сделать
kubectl create clusterrolebinding zalenium --clusterrole=cluster-admin serviceaccount=zalenium-zalenium
Примечание: не нужно указывать пространство имен при создании привязки роли кластера, так как оно распространяется на весь кластер (привязка роли идет с пространствами имен).