Home

Awesome

AET Helm chart

Version: 0.5.0 Type: application AppVersion: 3.3.0

<p align="center"> <img src="https://raw.githubusercontent.com/malaskowski/aet-helm/main/misc/aet-helm.png" alt="AET Helm Logo"/> </p>

This chart bootstraps an AET deployment on a Kubernetes cluster using the Helm package manager.

AET is a system that detects visual changes on web sites and performs basic page health checks.

TL;DR

helm repo add aet-chart https://malaskowski.github.io/aet-helm
helm install --set ingress.enabled=true my-aet aet-chart/aet -n aet --create-namespace

Prerequisites

Installing the Chart

To instal the chart with the release name my-aet using existing domain that points to your Kubernetes cluster, run:

helm install --set ingress.enabled=true --set ingress.host=my-aet-domain.com my-aet aet-chart/aet -n aet --create-namespace

This command deploys AET on Kubernetes cluster with the default configuration using aet namespace. The Parameters section lists the parameters that can be configured.

Tip: If you wish to run AET on local k8s cluster (e.g. Docker Desktop) you may want to use default provided Ingress. In that case run:

helm install --set ingress.enabled=true local aet-chart/aet -n aet --create-namespace

Your AET instance domain should be http://aet-127.0.0.1.nip.io/.

You may use watch -n 1 kubectl get all,ingress --namespace aet command to watch progress of your instance setup. When all pods are in state Running you may start using your instance (it usually takes about 2-3 minutes from the start).

Uninstalling the Chart

To uninstall/delete the my-aet deployment:

helm uninstall my-aet -n aet

The command removes all the Kubernetes components associated with the chart and deletes the release.

Parameters

KeyTypeDefaultDescription
activemq.image.repositorystring"malaskowski/aet_activemq"image repository for ActiveMQ
activemq.image.tagstringnilActiveMQ image tag, overrides aetDockerTag
activemq.livenessProbe.enabledbooltrueenables ActiveMQ pods liveness probe
activemq.livenessProbe.failureThresholdint6
activemq.livenessProbe.initialDelaySecondsint120
activemq.livenessProbe.periodSecondsint30
activemq.livenessProbe.successThresholdint1
activemq.livenessProbe.timeoutSecondsint5
activemq.ports.adminPanelPortint8161Port ActiveMQ admin panel will be exposed at
activemq.ports.brokerServicePortint61616Port at which ActiveMQ exposes its broker service
activemq.ports.jmxPortint11199Port at which ActiveMQ exposes JMX that is used to purge queues
activemq.readinessProbe.enabledbooltrueenables ActiveMQ pods readiness probe
activemq.readinessProbe.failureThresholdint6
activemq.readinessProbe.initialDelaySecondsint60
activemq.readinessProbe.periodSecondsint10
activemq.readinessProbe.successThresholdint1
activemq.readinessProbe.timeoutSecondsint5
activemq.resources.limits.cpustring"250m"ActiveMQ limits cpu resources
activemq.resources.limits.memorystring"250Mi"ActiveMQ limits memory resources
activemq.resources.requests.cpustring"100m"ActiveMQ request cpu resources
activemq.resources.requests.memorystring"120Mi"ActiveMQ request memory resources
aetDockerTagstring"1.2.0"default version of AET images used to run the instance
browsermob.image.repositorystring"malaskowski/aet_browsermob"image repository for Browsermob Proxy
browsermob.image.tagstringnilBrowsermob image tag, overrides aetDockerTag
browsermob.livenessProbe.enabledbooltrueenables Browsermob pods liveness probe
browsermob.livenessProbe.failureThresholdint6
browsermob.livenessProbe.initialDelaySecondsint60
browsermob.livenessProbe.periodSecondsint30
browsermob.livenessProbe.successThresholdint1
browsermob.livenessProbe.timeoutSecondsint5
browsermob.ports.apiPortint8080Port with Browsermob API exposed
browsermob.proxyBasePortint8281Base port for the proxy range to start
browsermob.proxySizeint50Size of the proxy, when proxyBasePort is 8281 and size set to 50, proxy will use ports range 8281-8330
browsermob.readinessProbe.enabledbooltrueenables Browsermob pods readiness probe
browsermob.readinessProbe.failureThresholdint6
browsermob.readinessProbe.initialDelaySecondsint30
browsermob.readinessProbe.periodSecondsint10
browsermob.readinessProbe.successThresholdint1
browsermob.readinessProbe.timeoutSecondsint5
browsermob.resources.limits.cpustring"500m"Browsermob limits cpu resources
browsermob.resources.limits.memorystring"300Mi"Browsermob limits memory resources
browsermob.resources.requests.cpustring"100m"Browsermob request cpu resources
browsermob.resources.requests.memorystring"200Mi"Browsermob request memory resources
ingress.annotationsobject{"kubernetes.io/ingress.class":"nginx"}ingress annotations
ingress.enabledboolfalseenables ingress
ingress.hoststring""ingress's spec rules host, supersedes localDnsMapping
ingress.localDnsMappingstring"aet-127.0.0.1.nip.io"if host is not set, this value will be used as ingress's spec rules host - use e.g. nip.io to have a working alias for your instance
karaf.configs.cleaner.dryRunboolfalse
karaf.configs.cleaner.keepNVersionsint150
karaf.configs.cleaner.removeOlderThanint4
karaf.configs.cleaner.schedulestring"0 0 22 ? * *"
karaf.configs.database.allowAutoCreatebooltrueallows creating new databases by AET (no need to create them manually first, including indexes)
karaf.configs.externalSeleniumHubUrlstring""configures external Selenium Hub url including port (e.g. http://<<Selenium-Hub-DNS>>:4444 )
karaf.configs.runner.ftint120Time in seconds, after which suite processing will be interrupted if no notification was received in duration of this parameter. That means if Runner will be not updated by any collection or comparison result in that time it will decide to force stop suite processing.
karaf.configs.runner.maxConcurrentSuitesCountint2Defines the maximum number of suites processed concurrently byt the Runner. If more suites will come to the system, they will be scheduled for later processing.
karaf.configs.runner.maxMessagesInCollectorQueueint4Defines the maximum amount of messages in the collector queue. This should be equal the total number of browser sessions provided by Selenium Grid and collector instances.
karaf.configs.runner.mttlint300Time in seconds after which messages will be thrown out of queues.
karaf.configs.runner.urlPackageSizeint1Defines how many urls are being sent in one message. Do not change this value unless you are absolutly certain you know what you do :).
karaf.configs.seleniumChromeOptionslist["--disable-plugins","--headless","--hide-scrollbars","--disable-gpu","start-maximized","enable-automation","--no-sandbox","--disable-infobars","--disable-dev-shm-usage","--disable-browser-side-navigation","--dns-prefetch-disable"]list of Chrome capabilities that are passed to Selenium while requesting a browser
karaf.configs.workers.collectorInstancesNoint4
karaf.configs.workers.collectorPrefetchSizeint1
karaf.configs.workers.comparatorInstancesNoint5
karaf.configs.workers.comparatorPrefetchSizeint1
karaf.env.javaMaxMemstring"2048m"
karaf.image.repositorystring"malaskowski/aet_karaf"image repository for Apache Karaf
karaf.image.tagstringnilKaraf image tag, overrides aetDockerTag, use '-arm64' tags when running on Apple Silicon processors
karaf.initContainers.initTimeoutSecondsint120time after which init checks for hub, mongo and activemq will timeout if not found in network
karaf.initContainers.waitForActivemqbooltrueenables waiting for ActiveMq to be available before running the main Karaf conainer
karaf.initContainers.waitForHubbooltrueenables waiting for Selenium Grid Hub to be available before running the main Karaf conainer
karaf.initContainers.waitForMongobooltrueenables waiting for MongoDB to be available before running the main Karaf conainer
karaf.livenessProbe.enabledbooltrueenables Karaf pods liveness probe
karaf.livenessProbe.failureThresholdint6
karaf.livenessProbe.initialDelaySecondsint120
karaf.livenessProbe.periodSecondsint30
karaf.livenessProbe.successThresholdint1
karaf.livenessProbe.timeoutSecondsint5
karaf.ports.osgiint8181Port with Karaf console and endpoints
karaf.readinessProbe.enabledbooltrueenables Karaf pods readiness probe
karaf.readinessProbe.failureThresholdint6
karaf.readinessProbe.initialDelaySecondsint120
karaf.readinessProbe.periodSecondsint10
karaf.readinessProbe.successThresholdint1
karaf.readinessProbe.timeoutSecondsint5
karaf.resources.limits.cpustring"1000m"Karaf limits cpu resources
karaf.resources.limits.memorystring"2000Mi"Karaf limits memory resources
karaf.resources.requests.cpustring"750m"Karaf request cpu resources
karaf.resources.requests.memorystring"1500Mi"Karaf request memory resources
mongodb.arbiter.enabledboolfalse
mongodb.architecturestring"standalone"
mongodb.auth.enabledboolfalse
mongodb.image.tagstring"3.6"
mongodb.labels."app.kubernetes.io/component"string"database"
mongodb.labels."app.kubernetes.io/instance"string"mongodb-aet"
mongodb.labels."app.kubernetes.io/managed-by"string"kubectl"
mongodb.labels."app.kubernetes.io/name"string"mongodb"
mongodb.labels."app.kubernetes.io/part-of"string"aet"
mongodb.labels."app.kubernetes.io/version"string"3.6"
mongodb.persistence.sizestring"2Gi"
mongodb.resources.limits.cpustring"1000m"
mongodb.resources.limits.memorystring"2Gi"
mongodb.resources.requests.cpustring"500m"
mongodb.resources.requests.memorystring"512Mi"
mongodb.service.portint27017
mongodb.strategyTypestring"RollingUpdate"
mongodb.useStatefulSetbooltrue
report.image.repositorystring"malaskowski/aet_report"image repository for Reports
report.image.tagstringnilReports image tag, overrides aetDockerTag
report.livenessProbe.enabledbooltrueenables Reports pods liveness probe
report.livenessProbe.failureThresholdint2
report.livenessProbe.initialDelaySecondsint15
report.livenessProbe.periodSecondsint30
report.livenessProbe.successThresholdint1
report.livenessProbe.timeoutSecondsint1
report.ports.serviceint80Port Reports will be served at
report.readinessProbe.enabledbooltrueenables Reports pods readiness probe
report.readinessProbe.failureThresholdint2
report.readinessProbe.initialDelaySecondsint15
report.readinessProbe.periodSecondsint10
report.readinessProbe.successThresholdint1
report.readinessProbe.timeoutSecondsint1
report.resources.limits.cpustring"100m"Reports limits cpu resources
report.resources.limits.memorystring"100Mi"Reports limits memory resources
report.resources.requests.cpustring"50m"Reports request cpu resources
report.resources.requests.memorystring"50Mi"Reports request memory resources
sgrid.chrome.configs.maxInstancesPerNodeint1number of instances of same version of browser that can run in node
sgrid.chrome.configs.maxSessionsPerNodeint1number of browsers (Any browser and version) that can run in parallel at a time in node, overrides max instances settings by restricting the number of browser instances that can run in parallel
sgrid.chrome.image.repositorystring"selenium/node-chrome"
sgrid.chrome.image.tagstring"3.14.0-arsenic"
sgrid.chrome.livenessProbe.enabledbooltrueenables Selenium Grid Node pods liveness probe
sgrid.chrome.livenessProbe.failureThresholdint2
sgrid.chrome.livenessProbe.initialDelaySecondsint30
sgrid.chrome.livenessProbe.periodSecondsint30
sgrid.chrome.livenessProbe.successThresholdint1
sgrid.chrome.livenessProbe.timeoutSecondsint5
sgrid.chrome.readinessProbe.enabledbooltrueenables Selenium Grid Node pods readiness probe
sgrid.chrome.readinessProbe.failureThresholdint2
sgrid.chrome.readinessProbe.initialDelaySecondsint30
sgrid.chrome.readinessProbe.periodSecondsint30
sgrid.chrome.readinessProbe.successThresholdint1
sgrid.chrome.readinessProbe.timeoutSecondsint5
sgrid.chrome.replicasint4configure number of replicas of chrome replicas
sgrid.chrome.resources.limits.cpustring"750m"Selenium Grid Node limits cpu resources
sgrid.chrome.resources.limits.memorystring"1250Mi"Selenium Grid Node limits memory resources
sgrid.chrome.resources.requests.cpustring"250m"Selenium Grid Node request cpu resources
sgrid.chrome.resources.requests.memorystring"500Mi"Selenium Grid Node request memory resources
sgrid.enabledbooltrueenables Selenium Grid
sgrid.hub.image.repositorystring"selenium/hub"
sgrid.hub.image.tagstring"3.14.0-arsenic"
sgrid.hub.livenessProbe.enabledbooltrueenables Selenium Grid Hub pods liveness probe
sgrid.hub.livenessProbe.failureThresholdint6
sgrid.hub.livenessProbe.initialDelaySecondsint30
sgrid.hub.livenessProbe.periodSecondsint30
sgrid.hub.livenessProbe.successThresholdint1
sgrid.hub.livenessProbe.timeoutSecondsint5
sgrid.hub.ports.serviceint4444Port Selenium Grid Hub will be served at
sgrid.hub.readinessProbe.enabledbooltrueenables Selenium Grid Hub pods readiness probe
sgrid.hub.readinessProbe.failureThresholdint6
sgrid.hub.readinessProbe.initialDelaySecondsint15
sgrid.hub.readinessProbe.periodSecondsint10
sgrid.hub.readinessProbe.successThresholdint1
sgrid.hub.readinessProbe.timeoutSecondsint5
sgrid.hub.resources.limits.cpustring"800m"Selenium Grid Hub limits cpu resources
sgrid.hub.resources.limits.memorystring"1250Mi"Selenium Grid Hub limits memory resources
sgrid.hub.resources.requests.cpustring"200m"Selenium Grid Hub request cpu resources
sgrid.hub.resources.requests.memorystring"750Mi"Selenium Grid Hub request memory resources

Requirements

RepositoryNameVersion
https://raw.githubusercontent.com/bitnami/charts/pre-2022/bitnamimongodb10.20.0

This chart depends on Bitnami MongoDB chart. By default settings of this chart, MongoDB runs in standalone mode as Statefull Set and RollingUpdate.

Development

If you are using default ingress, you should install NginX ingress controller first. Use this tutorial.

  1. Checkout repo and change directory to charts/aet
  2. Build dependencies: helm dependency build
  3. Install AET (locally): helm install --set ingress.enabled=true local . -n aet --create-namespace

Your AET instance domain should be http://aet-127.0.0.1.nip.io/

Improvements (help wanted)