├── .gitignore ├── Chart.yaml ├── Dockerfile ├── Makefile ├── OWNERS ├── README.md ├── VERSIONS ├── config └── user.properties ├── k8s ├── Chart.yaml ├── OWNERS ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── jmeter-master-deployment.yaml │ ├── jmeter-server-deployment.yaml │ └── jmeter-server-service.yaml └── values.yaml ├── local ├── Makefile ├── docker-compose.yml └── test │ └── sample.jmx ├── scripts ├── docker-entrypoint.sh └── install_plugin-manager.sh ├── templates ├── NOTES.txt ├── _helpers.tpl ├── jmeter-master-deployment.yaml ├── jmeter-server-deployment.yaml └── jmeter-server-service.yaml └── values.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | jmeter.log 2 | result.txt 3 | -------------------------------------------------------------------------------- /Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "3.3" 3 | description: A Distributed JMeter Helm chart 4 | name: distributed-jmeter 5 | version: 1.0.0 6 | home: http://jmeter.apache.org/ 7 | icon: http://jmeter.apache.org/images/logo.svg 8 | sources: 9 | - https://github.com/pedrocesar-ti/distributed-jmeter-docker 10 | maintainers: 11 | - name: pedrocesar-ti 12 | email: pedrocesar.ti@gmail.com 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jre-slim 2 | ARG JMETER_VERSION 3 | 4 | ENV JMETER_VERSION ${JMETER_VERSION:-3.3} 5 | ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VERSION/ 6 | ENV PATH $JMETER_HOME/bin:$PATH 7 | 8 | # INSTALL PRE-REQ 9 | RUN apt-get update && \ 10 | apt-get -y install \ 11 | wget 12 | 13 | # INSTALL JMETER BASE 14 | RUN mkdir /jmeter 15 | WORKDIR /jmeter 16 | 17 | RUN wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz && \ 18 | tar -xzf apache-jmeter-$JMETER_VERSION.tgz && \ 19 | rm apache-jmeter-$JMETER_VERSION.tgz && \ 20 | mkdir /jmeter-plugins && \ 21 | cd /jmeter-plugins/ && \ 22 | wget https://jmeter-plugins.org/downloads/file/JMeterPlugins-ExtrasLibs-1.4.0.zip && \ 23 | unzip -o JMeterPlugins-ExtrasLibs-1.4.0.zip -d /jmeter/apache-jmeter-$JMETER_VERSION 24 | 25 | WORKDIR $JMETER_HOME 26 | 27 | COPY config/user.properties bin/user.properties 28 | COPY scripts/install_plugin-manager.sh . 29 | COPY scripts/docker-entrypoint.sh /docker-entrypoint.sh 30 | 31 | RUN chmod +x install_plugin-manager.sh /docker-entrypoint.sh 32 | RUN ./install_plugin-manager.sh 33 | 34 | EXPOSE 6000 1099 50000 35 | ENTRYPOINT ["/docker-entrypoint.sh"] 36 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | build: 2 | @docker build -t pedrocesarti/jmeter-docker:local . 3 | 4 | build_all: 5 | @while read -r version ; do \ 6 | docker build --build-arg JMETER_VERSION=$$version --tag pedrocesarti/jmeter-docker:$$version . ; \ 7 | docker push pedrocesarti/jmeter-docker:$$version ; \ 8 | done < VERSIONS 9 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | approvers: 2 | - pedrocesar-ti 3 | reviewers: 4 | - pedrocesar-ti 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | :rotating_light: This project is outdated/abandoned/archived and will not be updated anymore. :rotating_light: 2 | 3 | ------------- 4 | 5 | 6 | # Distributed JMeter - Docker 7 | 8 | Apache Jmeter™ is an open source tool that helps creating and running load test plans. And this Docker image was created to help you running different versions of JMeter in a Docker container, also helping you running in a distributed fashion (master -> server approach). 9 | 10 | ## Supported tags 11 | 12 | The [Dockerfile](https://github.com/pedrocesar-ti/distributed-jmeter-docker/blob/master/Dockerfile) here is managed and built with arguments what helps building and pushing our JMeter images for all versions of JMeter available. If you want more information, have a look on the [Makefile](https://github.com/pedrocesar-ti/distributed-jmeter-docker/blob/master/Makefile). 13 | 14 | - 3.3, latest 15 | - 2.6 16 | - 2.7 17 | - 2.8 18 | - 2.9 19 | - 2.10 20 | - 2.11 21 | - 2.12 22 | - 2.13 23 | - 3.0 24 | - 3.1 25 | - 3.2 26 | - 4.0 27 | - 5.0 28 | 29 | ## Running Master or Server 30 | ### Master 31 | ```sh 32 | docker run -p 60000:60000 -v : -d pedrocesarti/jmeter-docker:latest master 33 | ``` 34 | 35 | ### Server 36 | ```sh 37 | docker run -p 1099:1099 -p 50000:50000 -d pedrocesarti/jmeter-docker:latest server 38 | ``` 39 | 40 | 41 | ## Running Master and Server (Docker Compose) 42 | You can also create a whole stack with master and servers to run a distributed JMeter tests locally or in a Docker Swarm Cluster. Check out this [docker-compose.yml](https://github.com/pedrocesar-ti/distributed-jmeter-docker/blob/master/local/docker-compose.yml) to see one example of this infra running locally. 43 | This example is going to create a master and a server container running locally, and you can also scale up and down the number servers instancesrunning. 44 | ```sh 45 | docker-compose up -d 46 | docker-compose scale server=5 47 | ``` 48 | 49 | ## Volumes 50 | Another good point to mention here is that we suggest that you use volumes to share your test plans with the master container and once you have your test plans on your master container, you only going to need exec: 51 | 52 | ```sh 53 | jmeter -n -t script.jmx -R server1,server2,… 54 | ``` 55 | 56 | You can also use this [docker-compose](https://github.com/pedrocesar-ti/distributed-jmeter-docker/blob/master/local/docker-compose.yml) to deploy in a Docker Swarm cluster defining better techniques to scale the number of replicas you want for each service and add all power of the internal discovery service. 57 | 58 | ## K8s 59 | For the Kubernetes support, also have a look at the official helm/[chart](https://github.com/helm/charts/tree/master/stable/distributed-jmeter) repository. 60 | 61 | 62 | Enjoy! :) 63 | -------------------------------------------------------------------------------- /VERSIONS: -------------------------------------------------------------------------------- 1 | 2.6 2 | 2.7 3 | 2.8 4 | 2.9 5 | 2.10 6 | 2.11 7 | 2.12 8 | 2.13 9 | 3.0 10 | 3.1 11 | 3.2 12 | 3.3 13 | 4.0 14 | 5.0 15 | -------------------------------------------------------------------------------- /config/user.properties: -------------------------------------------------------------------------------- 1 | jmeter.save.saveservice.default_delimiter=\t 2 | jmeter.save.saveservice.print_field_names=true 3 | -------------------------------------------------------------------------------- /k8s/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "1.0" 3 | description: A Distributed JMeter Helm chart 4 | name: distributed-jmeter 5 | version: 0.1.0 6 | home: http://jmeter.apache.org/ 7 | icon: http://jmeter.apache.org/images/logo.svg 8 | sources: 9 | - https://github.com/pedrocesar-ti/distributed-jmeter-docker 10 | maintainers: 11 | - name: pedrocesar-ti 12 | email: pedrocesar.ti@gmail.com 13 | -------------------------------------------------------------------------------- /k8s/OWNERS: -------------------------------------------------------------------------------- 1 | approvers: 2 | - pedrocesar-ti 3 | reviewers: 4 | - pedrocesar-ti 5 | -------------------------------------------------------------------------------- /k8s/README.md: -------------------------------------------------------------------------------- 1 | # Distributed JMeter 2 | 3 | Based on the work done [here](https://github.com/pedrocesar-ti/distributed-jmeter-docker). 4 | 5 | Apache Jmeter™ is an open source tool that helps creating and running load test plans. This helm/chart was created to help you running different versions of JMeter in a distributed fashion (master -> server architecture), for more info. 6 | 7 | ## Chart Details: 8 | This chart will do the following: 9 | - Deploy a JMeter master (by default 1) that is responsible to store the test plans and test results after running on the servers. 10 | - Deploy a JMeter server service (by default 3 replicas) that are responsible to run the actual test and send back the results to the master. 11 | 12 | 13 | ## Installing the Chart: 14 | To install the chart with the release name jmeter: 15 | ``` 16 | $ helm install --name distributed-jmeter stable/distributed-jmeter 17 | ``` 18 | 19 | ## Deploying different versions of JMeter 20 | The default [image](https://hub.docker.com/r/pedrocesarti/jmeter-docker/) allows you to run JMeter in all versions available. 21 | 22 | To change the version running on the helm you only need: 23 | ``` 24 | $ helm install --name distributed-jmeter --set master.image.tag=4.0 --set server.image.tag=4.0 stable/distributed-jmeter 25 | ``` 26 | 27 | Enjoy! :) 28 | -------------------------------------------------------------------------------- /k8s/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | JMeter is now starting. 2 | 3 | 4 | To get get a shell session on the master you only need to run: 5 | 6 | $ export MASTER_NAME=$(kubectl get pods -l role=master -o jsonpath='{.items[*].metadata.name}') 7 | $ kubectl exec -it $MASTER_NAME -- /bin/bash 8 | 9 | 10 | To copy your test plans to the master pod: 11 | $ kubectl cp sample.jmx $MASTER_NAME:/jmeter 12 | 13 | 14 | To run your test in all servers you need first a list of all servers IPs (comma-separated) and then you can run your test: 15 | $ export SERVER_IPS=$(kubectl get pods -lrole=server -o jsonpath='{.items[*].status.podIP}' | tr ' ' ',') 16 | $ kubectl exec -it $MASTER_NAME -- jmeter -n -t /jmeter/sample.jmx -R $SERVER_IPS 17 | -------------------------------------------------------------------------------- /k8s/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "distributed-jmeter.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "distributed-jmeter.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "distributed-jmeter.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /k8s/templates/jmeter-master-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Release.Name }}-master 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | role: master 10 | spec: 11 | replicas: {{ .Values.master.replicaCount }} 12 | strategy: 13 | type: RollingUpdate 14 | selector: 15 | matchLabels: 16 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 17 | app.kubernetes.io/instance: {{ .Release.Name }}-master 18 | role: master 19 | template: 20 | metadata: 21 | labels: 22 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 23 | app.kubernetes.io/instance: {{ .Release.Name }}-master 24 | role: master 25 | spec: 26 | containers: 27 | - name: {{ .Chart.Name }} 28 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 29 | imagePullPolicy: {{ .Values.image.pullPolicy }} 30 | args: ["master"] 31 | ports: 32 | - containerPort: 60000 33 | -------------------------------------------------------------------------------- /k8s/templates/jmeter-server-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Release.Name }}-server 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | role: server 10 | spec: 11 | replicas: {{ .Values.server.replicaCount }} 12 | strategy: 13 | type: RollingUpdate 14 | selector: 15 | matchLabels: 16 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 17 | app.kubernetes.io/instance: {{ .Release.Name }} 18 | role: server 19 | template: 20 | metadata: 21 | labels: 22 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 23 | app.kubernetes.io/instance: {{ .Release.Name }} 24 | role: server 25 | spec: 26 | containers: 27 | - name: {{ .Chart.Name }} 28 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 29 | imagePullPolicy: {{ .Values.image.pullPolicy }} 30 | args: ["server"] 31 | ports: 32 | - containerPort: 50000 33 | - containerPort: 1099 34 | -------------------------------------------------------------------------------- /k8s/templates/jmeter-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Release.Name }}-server 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | app.kubernetes.io/managed-by: {{ .Release.Service }} 10 | spec: 11 | clusterIP: None 12 | ports: 13 | - port: 50000 14 | protocol: TCP 15 | name: tcp-50000 16 | - port: 1099 17 | protocol: TCP 18 | name: tcp-1099 19 | selector: 20 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 21 | app.kubernetes.io/instance: {{ .Release.Name }} 22 | role: server 23 | -------------------------------------------------------------------------------- /k8s/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for distributed-jmeter. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | master: 6 | ## The number of pods in the master deployment 7 | replicaCount: 1 8 | 9 | server: 10 | ## The number of pods in the server deployment 11 | replicaCount: 3 12 | 13 | image: 14 | ## Specify an imagePullPolicy 15 | ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images 16 | pullPolicy: IfNotPresent 17 | 18 | ## The repository and image 19 | ## ref: https://hub.docker.com/r/pedrocesarti/jmeter-docker/ 20 | repository: "pedrocesarti/jmeter-docker" 21 | 22 | ## The tag for the image 23 | ## ref: https://hub.docker.com/r/pedrocesarti/jmeter-docker/tags/ 24 | tag: 3.3 25 | -------------------------------------------------------------------------------- /local/Makefile: -------------------------------------------------------------------------------- 1 | compose: 2 | @docker-compose up -d 3 | 4 | scale: 5 | @docker-compose scale server=5 6 | -------------------------------------------------------------------------------- /local/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | master: 5 | build: .. 6 | command: master 7 | tty: true 8 | ports: 9 | - "60000" 10 | volumes: 11 | - "./test/:/jmeter/sample/" 12 | networks: 13 | - jmeter-network 14 | server: 15 | image: pedrocesarti/jmeter-docker:latest 16 | command: server 17 | tty: true 18 | ports: 19 | - "50000" 20 | - "1099" 21 | networks: 22 | - jmeter-network 23 | depends_on: 24 | - master 25 | 26 | networks: 27 | jmeter-network: 28 | -------------------------------------------------------------------------------- /local/test/sample.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | continue 16 | 17 | false 18 | 1 19 | 20 | 100 21 | 1 22 | 1538201664000 23 | 1538201664000 24 | false 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | github.com 34 | 35 | https 36 | 37 | 38 | 6 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | GET 53 | true 54 | false 55 | true 56 | false 57 | 58 | 59 | 60 | 61 | 62 | 63 | false 64 | 65 | saveConfig 66 | 67 | 68 | true 69 | true 70 | true 71 | 72 | true 73 | true 74 | true 75 | true 76 | false 77 | true 78 | true 79 | false 80 | false 81 | false 82 | true 83 | false 84 | false 85 | false 86 | true 87 | 0 88 | true 89 | true 90 | true 91 | true 92 | true 93 | 94 | 95 | result.txt 96 | 97 | 98 | 99 | 100 | 101 | true 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /scripts/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | case $1 in 5 | master) 6 | tail -f /dev/null 7 | ;; 8 | server) 9 | $JMETER_HOME/bin/jmeter-server \ 10 | -Dserver.rmi.localport=50000 \ 11 | -Dserver_port=1099 12 | ;; 13 | *) 14 | echo "Sorry, this option doesn't exist!" 15 | ;; 16 | esac 17 | 18 | exec "$@" 19 | -------------------------------------------------------------------------------- /scripts/install_plugin-manager.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CMD_RUNNER_URL="http://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/2.0/cmdrunner-2.0.jar" 4 | PLUGIN_MANAGER_URL="https://jmeter-plugins.org/get/" 5 | 6 | # DOWNLOAD RUNNER 7 | wget -O "lib/cmdrunner-2.0.jar" $CMD_RUNNER_URL 8 | 9 | # DOWNLOAD MANAGER 10 | wget -O "lib/ext/jmeter-plugins-manager.jar" $PLUGIN_MANAGER_URL 11 | 12 | 13 | # GENERATING SCRIPTS 14 | java -cp lib/ext/jmeter-plugins-manager.jar org.jmeterplugins.repository.PluginManagerCMDInstaller 15 | 16 | 17 | -------------------------------------------------------------------------------- /templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | JMeter is now starting. 2 | 3 | 4 | To get get a shell session on the master you only need to run: 5 | 6 | $ export MASTER_NAME=$(kubectl get pods -l role=master -o jsonpath='{.items[*].metadata.name}') 7 | $ kubectl exec -it $MASTER_NAME -- /bin/bash 8 | 9 | 10 | To copy your test plans to the master pod: 11 | $ kubectl cp sample.jmx $MASTER_NAME:/jmeter 12 | 13 | 14 | To run your test in all servers you need first a list of all servers IPs (comma-separated) and then you can run your test: 15 | $ export SERVER_IPS=$(kubectl get pods -lrole=server -o jsonpath='{.items[*].status.podIP}' | tr ' ' ',') 16 | $ kubectl exec -it $MASTER_NAME -- jmeter -n -t /jmeter/sample.jmx -R $SERVER_IPS 17 | -------------------------------------------------------------------------------- /templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "distributed-jmeter.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "distributed-jmeter.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "distributed-jmeter.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /templates/jmeter-master-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ template "distributed-jmeter.fullname" . }}-master 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | app.kubernetes.io/managed-by: {{ .Release.Service }} 10 | app.kubernetes.io/component: master 11 | spec: 12 | replicas: {{ .Values.master.replicaCount }} 13 | strategy: 14 | type: RollingUpdate 15 | selector: 16 | matchLabels: 17 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | app.kubernetes.io/component: master 20 | template: 21 | metadata: 22 | labels: 23 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 24 | app.kubernetes.io/instance: {{ .Release.Name }} 25 | app.kubernetes.io/component: master 26 | spec: 27 | containers: 28 | - name: {{ .Chart.Name }} 29 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 30 | imagePullPolicy: {{ .Values.image.pullPolicy }} 31 | args: 32 | - master 33 | ports: 34 | - containerPort: 60000 35 | -------------------------------------------------------------------------------- /templates/jmeter-server-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ template "distributed-jmeter.fullname" . }}-server 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | app.kubernetes.io/managed-by: {{ .Release.Service }} 10 | app.kubernetes.io/component: server 11 | spec: 12 | replicas: {{ .Values.server.replicaCount }} 13 | strategy: 14 | type: RollingUpdate 15 | selector: 16 | matchLabels: 17 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | app.kubernetes.io/component: server 20 | template: 21 | metadata: 22 | labels: 23 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 24 | app.kubernetes.io/instance: {{ .Release.Name }} 25 | app.kubernetes.io/component: server 26 | spec: 27 | containers: 28 | - name: {{ .Chart.Name }} 29 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 30 | imagePullPolicy: {{ .Values.image.pullPolicy }} 31 | args: ["server"] 32 | ports: 33 | - containerPort: 50000 34 | - containerPort: 1099 35 | -------------------------------------------------------------------------------- /templates/jmeter-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "distributed-jmeter.fullname" . }}-server 5 | labels: 6 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 7 | helm.sh/chart: {{ include "distributed-jmeter.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | app.kubernetes.io/managed-by: {{ .Release.Service }} 10 | app.kubernetes.io/component: server 11 | spec: 12 | clusterIP: None 13 | ports: 14 | - port: 50000 15 | protocol: TCP 16 | name: tcp-50000 17 | - port: 1099 18 | protocol: TCP 19 | name: tcp-1099 20 | selector: 21 | app.kubernetes.io/name: {{ include "distributed-jmeter.name" . }} 22 | app.kubernetes.io/instance: {{ .Release.Name }} 23 | app.kubernetes.io/component: server 24 | -------------------------------------------------------------------------------- /values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for distributed-jmeter. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | master: 6 | ## The number of pods in the master deployment 7 | replicaCount: 1 8 | 9 | server: 10 | ## The number of pods in the server deployment 11 | replicaCount: 3 12 | 13 | image: 14 | ## Specify an imagePullPolicy 15 | ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images 16 | pullPolicy: IfNotPresent 17 | 18 | ## The repository and image 19 | ## ref: https://hub.docker.com/r/pedrocesarti/jmeter-docker/ 20 | repository: "pedrocesarti/jmeter-docker" 21 | 22 | ## The tag for the image 23 | ## ref: https://hub.docker.com/r/pedrocesarti/jmeter-docker/tags/ 24 | tag: 3.3 25 | --------------------------------------------------------------------------------