Skip to content

Commit 423996e

Browse files
adding chart load-generator-0.1.2
1 parent 9801a5a commit 423996e

File tree

7 files changed

+240
-0
lines changed

7 files changed

+240
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*~
18+
# Various IDEs
19+
.project
20+
.idea/
21+
*.tmproj
22+
.vscode/
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
appVersion: "1.0"
3+
description: A Helm chart that uses k6 to generate load
4+
maintainers:
5+
- name: sudermanjr
6+
name: load-generator
7+
version: 0.1.2

charts/load-generator-0.1.2/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Load Generation
2+
3+
A chart that uses k6 to generate load
4+
5+
## Values
6+
7+
| Parameter | Description | Default |
8+
| --------- | ----------- | ------- |
9+
| `image.pullPolicy` | | `Always` |
10+
| `image.repository` | | `loadimpact/k6` |
11+
| `image.tag` | | `0.22.1` |
12+
| `loadScript` | The js script that you want to generate the load. | `import http from "k6/http";` | `SEE Values.yaml` |
13+
| `replicaCount` | Number of load pods | `1` |
14+
| `resources.limits.cpu` | | `500m` |
15+
| `resources.limits.memory` | | `256Mi` |
16+
| `resources.requests.cpu` | | `250m` |
17+
| `resources.requests.memory` | | `128Mi` |
18+
| `k6.duration` | Duration of k6 test | `0` - infinite, keep running while pod runs |
19+
| `k6.rps` | Max requests per second in each k6 pod | `1` |
20+
| `k6.maxVUs` | Max number of k6 VUs per pod | `1` |
21+
| `k6.VUs` | Actual number of running VUs at start. Must be less than maxVUs | `1` |
22+
| `influx.eanbled` | Enable sending to an influxdb | `false` |
23+
| `influx.dbName` | Name of influx database to keep data | `k6` |
24+
| `influx.insecure` | non-https influx | `true` |
25+
| `influx.url` | URL of influx to send to | `"http://data-influxdb.tick:8086"` |
26+
| `influx.retention` | Name of influx retention policy to use for data | `autogen` |
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
5+
{{- define "load-generator.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 "load-generator.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 "load-generator.chart" -}}
31+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
32+
{{- end -}}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: {{ include "load-generator.fullname" . }}
5+
data:
6+
load.js: |
7+
{{ .Values.loadScript | indent 4 }}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "load-generator.fullname" . }}
5+
labels:
6+
app.kubernetes.io/name: {{ include "load-generator.name" . }}
7+
helm.sh/chart: {{ include "load-generator.chart" . }}
8+
app.kubernetes.io/instance: {{ .Release.Name }}
9+
app.kubernetes.io/managed-by: {{ .Release.Service }}
10+
spec:
11+
replicas: {{ .Values.replicaCount }}
12+
selector:
13+
matchLabels:
14+
app.kubernetes.io/name: {{ include "load-generator.name" . }}
15+
app.kubernetes.io/instance: {{ .Release.Name }}
16+
template:
17+
metadata:
18+
labels:
19+
app.kubernetes.io/name: {{ include "load-generator.name" . }}
20+
app.kubernetes.io/instance: {{ .Release.Name }}
21+
spec:
22+
containers:
23+
- name: {{ .Chart.Name }}
24+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
25+
imagePullPolicy: {{ .Values.image.pullPolicy }}
26+
command: ["k6", "run", "/k6/load.js"]
27+
env:
28+
- name: K6_DURATION
29+
value: {{ .Values.k6.duration | quote }}
30+
- name: K6_RPS
31+
value: {{ .Values.k6.rps | quote }}
32+
- name: K6_VUS_MAX
33+
value: {{ .Values.k6.maxVUs | quote }}
34+
- name: K6_VUS
35+
value: {{ .Values.k6.VUs | quote }}
36+
{{- if .Values.influx.enabled }}
37+
- name: INFLUXDB_DB
38+
value: {{ .Values.influx.dbName | quote }}
39+
- name: INFLUXDB_INSECURE
40+
value: {{ .Values.influx.insecure | quote }}
41+
- name: INFLUXDB_ADDR
42+
value: {{ .Values.influx.url | quote }}
43+
- name: INFLUXDB_RETENTION
44+
value: {{ .Values.influx.retention | quote }}
45+
args: ["--out", "influxdb"]
46+
{{- end }}
47+
ports:
48+
- name: http
49+
containerPort: 80
50+
protocol: TCP
51+
volumeMounts:
52+
- name: k6files
53+
mountPath: /k6
54+
resources:
55+
{{- toYaml .Values.resources | nindent 12 }}
56+
volumes:
57+
- name: k6files
58+
configMap:
59+
name: {{ include "load-generator.fullname" . }}
60+
{{- with .Values.nodeSelector }}
61+
nodeSelector:
62+
{{- toYaml . | nindent 8 }}
63+
{{- end }}
64+
{{- with .Values.affinity }}
65+
affinity:
66+
{{- toYaml . | nindent 8 }}
67+
{{- end }}
68+
{{- with .Values.tolerations }}
69+
tolerations:
70+
{{- toYaml . | nindent 8 }}
71+
{{- end }}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Default values for load-generator.
2+
# This is a YAML-formatted file.
3+
# Declare variables to be passed into your templates.
4+
5+
replicaCount: 1
6+
7+
loadScript: |
8+
import http from "k6/http";
9+
import { check, fail } from "k6";
10+
import { Rate } from "k6/metrics";
11+
12+
export let options = {
13+
noConnectionReuse: true,
14+
thresholds: {
15+
"errors": ["rate<0.05"]
16+
}
17+
};
18+
19+
export let url = "https://example.com/"
20+
export let errorRate = new Rate("errors");
21+
22+
export default function() {
23+
24+
let params = {
25+
headers: {
26+
"User-Agent": "k6"
27+
},
28+
redirects: 5,
29+
tags: { "k6test": "yes" }
30+
};
31+
let jar = http.cookieJar();
32+
jar.set(url, "loadtest", "true");
33+
34+
let res = http.post(url, params );
35+
36+
errorRate.add(res.status != 200);
37+
check(res, {
38+
"Status 200": (r) => r.status === 200
39+
});
40+
};
41+
42+
k6:
43+
duration: "0"
44+
rps: "1"
45+
maxVUs: "1"
46+
VUs: "1"
47+
48+
influx:
49+
enabled: false
50+
dbName: "k6"
51+
insecure: "true"
52+
url: "http://data-influxdb.tick:8086"
53+
retention: "autogen"
54+
55+
image:
56+
repository: loadimpact/k6
57+
tag: 0.22.1
58+
pullPolicy: Always
59+
60+
nameOverride: ""
61+
fullnameOverride: ""
62+
63+
resources:
64+
limits:
65+
cpu: 500m
66+
memory: 256Mi
67+
requests:
68+
cpu: 250m
69+
memory: 128Mi
70+
71+
nodeSelector: {}
72+
73+
tolerations: []
74+
75+
affinity: {}

0 commit comments

Comments
 (0)