Skip to content
Snippets Groups Projects
Commit 70dc2015 authored by Sören Henning's avatar Sören Henning
Browse files

Merge branch 'master' into install-theodolite-volumes-using-helm

parents b2acaab7 6cb3ddb3
No related branches found
No related tags found
1 merge request!192Install Theodolite volumes using Helm
...@@ -8,7 +8,7 @@ authors: ...@@ -8,7 +8,7 @@ authors:
given-names: Wilhelm given-names: Wilhelm
orcid: "https://orcid.org/0000-0001-6625-4335" orcid: "https://orcid.org/0000-0001-6625-4335"
title: Theodolite title: Theodolite
version: "0.4.0" version: "0.5.0"
repository-code: "https://github.com/cau-se/theodolite" repository-code: "https://github.com/cau-se/theodolite"
license: "Apache-2.0" license: "Apache-2.0"
doi: "10.1016/j.bdr.2021.100209" doi: "10.1016/j.bdr.2021.100209"
......
...@@ -4,20 +4,17 @@ ...@@ -4,20 +4,17 @@
Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines. It consists of three modules: Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines. It consists of three modules:
## Theodolite Benchmarks ## Theodolite Benchmarking Tool
Theodolite contains 4 application benchmarks, which are based on typical use cases for stream processing within microservices. For each benchmark, a corresponding workload generator is provided. Currently, this repository provides benchmark implementations for Apache Kafka Streams and Apache Flink. The benchmark sources can be found in [Thedolite benchmarks](benchmarks).
## Theodolite Execution Framework
Theodolite aims to benchmark scalability of stream processing engines for real use cases. Microservices that apply stream processing techniques are usually deployed in elastic cloud environments. Hence, Theodolite's cloud-native benchmarking framework deploys its components in a cloud environment, orchestrated by Kubernetes. More information on how to execute scalability benchmarks can be found in [Thedolite execution framework](execution).
Theodolite aims to benchmark scalability of stream processing engines for real use cases. Microservices that apply stream processing techniques are usually deployed in elastic cloud environments. Hence, Theodolite's cloud-native benchmarking framework deploys its components in a cloud environment, orchestrated by Kubernetes. It is recommended to install Theodolite with the package manager Helm. The Theodolite Helm chart along with instructions how to install it can be found in the [`helm`](helm) directory.
## Theodolite Analysis Tools ## Theodolite Analysis Tools
Theodolite's benchmarking method creates a *scalability graph* allowing to draw conclusions about the scalability of a stream processing engine or its deployment. A scalability graph shows how resource demand evolves with an increasing workload. Theodolite provides Jupyter notebooks for creating such scalability graphs based on benchmarking results from the execution framework. More information can be found in [Theodolite analysis tool](analysis). Theodolite's benchmarking method maps load intensities to the resource amounts that are required for processing them. A plot showing how resource demand evolves with an increasing load allows to draw conclusions about the scalability of a stream processing engine or its deployment. Theodolite provides Jupyter notebooks for creating such plots based on benchmarking results from the execution framework. More information can be found in [Theodolite analysis tool](analysis).
## Theodolite Benchmarks
Theodolite comes with 4 application benchmarks, which are based on typical use cases for stream processing within microservices. For each benchmark, a corresponding load generator is provided. Currently, this repository provides benchmark implementations for Apache Kafka Streams and Apache Flink. The benchmark sources can be found in [Thedolite benchmarks](theodolite-benchmarks).
## How to Cite ## How to Cite
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"dateModified": "2021-03-18", "dateModified": "2021-03-18",
"downloadUrl": "https://github.com/cau-se/theodolite/releases", "downloadUrl": "https://github.com/cau-se/theodolite/releases",
"name": "Theodolite", "name": "Theodolite",
"version": "0.4.0", "version": "0.5.0",
"description": "Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines.", "description": "Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines.",
"developmentStatus": "active", "developmentStatus": "active",
"referencePublication": "https://doi.org/10.1016/j.bdr.2021.100209", "referencePublication": "https://doi.org/10.1016/j.bdr.2021.100209",
......
...@@ -10,16 +10,20 @@ permalink: / ...@@ -10,16 +10,20 @@ permalink: /
Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines. It consists of three modules: Theodolite is a framework for benchmarking the horizontal and vertical scalability of stream processing engines. It consists of three modules:
## Theodolite Benchmarks ## Theodolite Benchmarking Tool
Theodolite contains 4 application benchmarks, which are based on typical use cases for stream processing within microservices. For each benchmark, a corresponding workload generator is provided. Currently, this repository provides benchmark implementations for Kafka Streams. Theodolite aims to benchmark scalability of stream processing engines for real use cases. Microservices that apply stream processing techniques are usually deployed in elastic cloud environments. Hence, Theodolite's cloud-native benchmarking framework deploys its components in a cloud environment, orchestrated by Kubernetes. It is recommended to install Theodolite with the package manager Helm. The Theodolite Helm chart along with instructions how to install it can be found in the [`helm`](helm) directory.
## Theodolite Analysis Tools
## Theodolite Execution Framework Theodolite's benchmarking method maps load intensities to the resource amounts that are required for processing them. A plot showing how resource demand evolves with an increasing load allows to draw conclusions about the scalability of a stream processing engine or its deployment. Theodolite provides Jupyter notebooks for creating such plots based on benchmarking results from the execution framework. More information can be found in [Theodolite analysis tool](analysis).
Theodolite aims to benchmark scalability of stream processing engines for real use cases. Microservices that apply stream processing techniques are usually deployed in elastic cloud environments. Hence, Theodolite's cloud-native benchmarking framework deploys as components in a cloud environment, orchestrated by Kubernetes. More information on how to execute scalability benchmarks can be found in [Thedolite execution framework](execution). ## Theodolite Benchmarks
Theodolite comes with 4 application benchmarks, which are based on typical use cases for stream processing within microservices. For each benchmark, a corresponding load generator is provided. Currently, this repository provides benchmark implementations for Apache Kafka Streams and Apache Flink. The benchmark sources can be found in [Thedolite benchmarks](theodolite-benchmarks).
## Theodolite Analysis Tools ## How to Cite
If you use Theodolite, please cite
Theodolite's benchmarking method create a *scalability graph* allowing to draw conclusions about the scalability of a stream processing engine or its deployment. A scalability graph shows how resource demand evolves with an increasing workload. Theodolite provides Jupyter notebooks for creating such scalability graphs based on benchmarking results from the execution framework. More information can be found in [Theodolite analysis tool](analysis). > Sören Henning and Wilhelm Hasselbring. (2021). Theodolite: Scalability Benchmarking of Distributed Stream Processing Engines in Microservice Architectures. Big Data Research, Volume 25. DOI: [10.1016/j.bdr.2021.100209](https://doi.org/10.1016/j.bdr.2021.100209). arXiv:[2009.00304](https://arxiv.org/abs/2009.00304).
apiVersion: v1 apiVersion: v1
entries: entries:
theodolite: theodolite:
- apiVersion: v2
appVersion: 0.5.0
created: "2021-11-04T17:45:14.153231798+01:00"
dependencies:
- condition: grafana.enabled
name: grafana
repository: https://grafana.github.io/helm-charts
version: 6.0.0
- condition: kube-prometheus-stack.enabled
name: kube-prometheus-stack
repository: https://prometheus-community.github.io/helm-charts
version: 12.0.0
- condition: cp-helm-charts.enabled
name: cp-helm-charts
repository: https://soerenhenning.github.io/cp-helm-charts
version: 0.6.0
- condition: kafka-lag-exporter.enabled
name: kafka-lag-exporter
repository: https://lightbend.github.io/kafka-lag-exporter/repo/
version: 0.6.6
description: Theodolite is a framework for benchmarking the scalability stream
processing engines.
digest: 8a4f218e44341eb8fb09ddc58c6aaa0a14aded685f3423088c21fe0ffc112281
home: https://cau-se.github.io/theodolite
maintainers:
- email: soeren.henning@email.uni-kiel.de
name: Sören Henning
url: https://www.se.informatik.uni-kiel.de/en/team/soeren-henning-m-sc
name: theodolite
sources:
- https://github.com/cau-se/theodolite
type: application
urls:
- https://github.com/cau-se/theodolite/releases/download/v0.5.0/theodolite-0.5.0.tgz
version: 0.5.0
- apiVersion: v2 - apiVersion: v2
appVersion: 0.4.0 appVersion: 0.4.0
created: "2021-03-18T15:50:50.930902088+01:00" created: "2021-03-18T15:50:50.930902088+01:00"
...@@ -36,4 +71,4 @@ entries: ...@@ -36,4 +71,4 @@ entries:
urls: urls:
- https://github.com/cau-se/theodolite/releases/download/v0.4.0/theodolite-0.4.0.tgz - https://github.com/cau-se/theodolite/releases/download/v0.4.0/theodolite-0.4.0.tgz
version: 0.4.0 version: 0.4.0
generated: "2021-03-18T15:50:50.897801281+01:00" generated: "2021-11-04T17:45:14.120866992+01:00"
...@@ -18,8 +18,11 @@ again be merged into master. ...@@ -18,8 +18,11 @@ again be merged into master.
3. Update all references to artifacts which are versioned. This includes: 3. Update all references to artifacts which are versioned. This includes:
1. Update all references to Theodolite Docker images to tag `v0.3.1`. These are the Kubernetes resource definitions in 1. Update all references to Theodolite Docker images to tag `v0.3.1`. These are:
`execution`, the references to *latest* in `run_uc.py`, the Docker Compose files in `theodolite-benchmarks/docker-test` and the example `theodolite.yaml` job. 1. the default `helm/values.yaml` file,
2. the example `execution/theodolite.yaml` job,
3. the Kubernetes benchmark resources in `theodolite-benchmarks/definitions/**/resources` and
2. the Docker Compose files in `theodolite-benchmarks/docker-test`.
2. Update both, the `version` and the `appVersion` fields, in the Helm `Charts.yaml` file to `0.3.1`. 2. Update both, the `version` and the `appVersion` fields, in the Helm `Charts.yaml` file to `0.3.1`.
......
exp_counter.txt
results
...@@ -29,6 +29,6 @@ dependencies: ...@@ -29,6 +29,6 @@ dependencies:
repository: https://lightbend.github.io/kafka-lag-exporter/repo/ repository: https://lightbend.github.io/kafka-lag-exporter/repo/
condition: kafka-lag-exporter.enabled condition: kafka-lag-exporter.enabled
version: 0.5.0-SNAPSHOT version: 0.6.0-SNAPSHOT
appVersion: 0.5.0-SNAPSHOT appVersion: 0.6.0-SNAPSHOT
...@@ -2,55 +2,47 @@ ...@@ -2,55 +2,47 @@
## Installation ## Installation
Install the chart via: The Theodolite Helm chart with all its dependencies can be installed via:
```sh ```sh
helm dependencies update . helm dependencies update .
helm install theodolite . helm install theodolite .
``` ```
This chart installs requirements to execute benchmarks with Theodolite. ## Customize Installation
Dependencies and subcharts: As usual, the installation with Helm can be configured by passing a values YAML file:
- Prometheus Operator ```
- Prometheus helm install theodolite . -f <your-config.yaml>
- Grafana (incl. dashboard and data source configuration)
- Kafka
- Zookeeper
- A Kafka client pod
## Test
Test the installation:
```sh
helm test theodolite
``` ```
Our test files are located [here](templates/../../theodolite-chart/templates/tests). Many subcharts have their own tests, these are also executed and are placed in the respective /templates folders. We provide a minimal configuration, especially suited for development environments, with the `preconfigs/minimal.yaml`
file.
Please note: If a test fails, Helm will stop testing.
It is possible that the tests are not running successfully at the moment. This is because the Helm tests of the subchart cp-confluent receive a timeout exception. There is an [issue](https://github.com/confluentinc/cp-helm-charts/issues/318) for this problem on GitHub. Per default, Helm installs the Theodolite CRDs used for the operator. If Theodolite will not be used as operator or if
the CRDs are already installed, you can skip their installation by adding the flag `--skip-crds`.
## Configuration ## Test Installation
In development environments Kubernetes resources are often low. To reduce resource consumption, we provide an `one-broker-value.yaml` file. This file can be used with: Test the installation with:
```sh ```sh
helm install theodolite . -f preconfigs/one-broker-values.yaml helm test theodolite
``` ```
Our test files are located [here](templates/tests). Many subcharts have their own tests, which are also executed.
Please note: If a test fails, Helm will stop testing.
## Uninstall this Chart ## Uninstall this Chart
To uninstall/delete the `theodolite` deployment (by default Helm will be install all CRDs (`execution` and `benchmark`) automatically. If Helm should not install these CRDs, use the flag `--skip-crds`) The Theodolite Helm can easily be removed with:
```sh ```sh
helm uninstall theodolite helm uninstall theodolite
``` ```
This command does not remove the CRDs which are created by this chart. Remove them manually with: Helm does not remove any CRDs created by this chart. You can remove them manually with:
```sh ```sh
# CRDs from Theodolite # CRDs from Theodolite
...@@ -69,9 +61,20 @@ kubectl delete crd thanosrulers.monitoring.coreos.com ...@@ -69,9 +61,20 @@ kubectl delete crd thanosrulers.monitoring.coreos.com
## Development ## Development
**Hints**: ### Dependencies
The following 3rd party charts are used by Theodolite:
- Kube Prometheus Stack (to install the Prometheus Operator, which is used to create a Prometheus instances)
- Grafana (including a dashboard and a data source configuration)
- Confluent Platform (for Kafka and Zookeeper)
- Kafka Lag Exporter (used to collect monitoring data of the Kafka lag)
### Hints
#### Grafana
- Grafana configuration: Grafana ConfigMaps contains expressions like {{ topic }}. Helm uses the same syntax for template function. More information [here](https://github.com/helm/helm/issues/2798) Grafana ConfigMaps contain expressions like `{{ topic }}`. Helm uses the same syntax for template function. More information [here](https://github.com/helm/helm/issues/2798)
- Escape braces: {{ "{{" topic }} - Escape braces: {{ "{{" topic }}
- Let Helm render the template as raw string: {{ `{{ <config>}}` }} - Let Helm render the template as raw string: {{ `{{ <config>}}` }}
\ No newline at end of file
cp-helm-charts:
cp-zookeeper:
servers: 1
cp-kafka:
brokers: 1
configurationOverrides:
offsets.topic.replication.factor: "1"
cp-helm-charts:
## ------------------------------------------------------
## Zookeeper
## ------------------------------------------------------
cp-zookeeper:
servers: 1 # default: 3
## ------------------------------------------------------
## Kafka
## ------------------------------------------------------
cp-kafka:
brokers: 1 # default: 10
configurationOverrides:
offsets.topic.replication.factor: "1"
\ No newline at end of file
...@@ -22,8 +22,8 @@ spec: ...@@ -22,8 +22,8 @@ spec:
serviceAccount: {{ include "theodolite.fullname" . }}-random-scheduler serviceAccount: {{ include "theodolite.fullname" . }}-random-scheduler
containers: containers:
- name: random-scheduler - name: random-scheduler
image: ghcr.io/cau-se/theodolite-random-scheduler:latest image: "{{ .Values.randomScheduler.image }}:{{ .Values.randomScheduler.imageTag }}"
#imagePullPolicy: Always imagePullPolicy: "{{ .Values.randomScheduler.imagePullPolicy }}"
env: env:
- name: TARGET_NAMESPACE - name: TARGET_NAMESPACE
value: {{ .Release.Namespace }} value: {{ .Release.Namespace }}
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
RELEASE_NAME=$1 # Supposed to be equal to tag, e.g., v0.3.0 RELEASE_NAME=$1 # Supposed to be equal to tag, e.g., v0.3.0
RELEASE_PATH="https://github.com/cau-se/theodolite/releases/download" RELEASE_PATH="https://github.com/cau-se/theodolite/releases/download"
REPO_INDEX="../../docs/index.yaml" REPO_INDEX="../docs/index.yaml"
helm repo index . --url $RELEASE_PATH/$RELEASE_NAME --merge $REPO_INDEX && \ helm repo index . --url $RELEASE_PATH/$RELEASE_NAME --merge $REPO_INDEX && \
mv index.yaml $REPO_INDEX mv index.yaml $REPO_INDEX
\ No newline at end of file
...@@ -279,6 +279,9 @@ rbac: ...@@ -279,6 +279,9 @@ rbac:
randomScheduler: randomScheduler:
enabled: true enabled: true
image: ghcr.io/cau-se/theodolite-random-scheduler
imageTag: latest
imagePullPolicy: Always
rbac: rbac:
create: true create: true
serviceAccount: serviceAccount:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment