• This repository has been archived on 09/Dec/2021
  • Stars
    star
    304
  • Rank 137,274 (Top 3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Kubernetes scale & soak load tester

A simple Kubernetes load testing tool

kboom logo

NOTE: this is WIP and also this is not an official AWS tool. Provided as is and use at your own risk.

Think of kboom as the Kubernetes equivalent of boom, allowing you to create short-term load for scale testing and long-term load for soak testing. Supported load out of the box for scale testing are pods and custom resources via CRDs for soak testing is planned.

Check out the interactive demo.

Why bother?

I didn't find a usable tool to do Kubernetes-native load testing, for scalability and/or soak purposes. Here's where I can imagine kboom might be useful for you:

  • You are a cluster admin and want to test how much "fits" in the cluster. You use kboom for a scale test and see how many pods can be placed and how long it takes.
  • You are a cluster or namespace admin and want to test how long it takes to launch a set number of pods in a new cluster, comparing it with what you already know from an existing cluster.
  • You are developer and want to test your custom controller or operator. You use kboom for a long-term soak test of your controller.

Install

Before you begin, you will need kubectl client version v1.12.0 or higher for kubectl plugin support.

To install kboom, do the following:

$ curl https://raw.githubusercontent.com/mhausenblas/kboom/master/kboom -o kubectl-kboom
$ chmod +x kubectl-kboom
$ sudo mv ./kubectl-kboom /usr/local/bin

From this point on you can use it as a kubectl plugin as in kubectl kboom. However, in order for you to generate the load, you'll have to also give it the necessary permissions (note: you only need to do this once, per cluster):

$ kubectl create ns kboom
$ kubectl apply -f https://raw.githubusercontent.com/mhausenblas/kboom/master/permissions.yaml

Now you're set up and good to go, next up, learn how to use kboom.

Use

Here's how you'd use kboom to do some scale testing. The load test is run in-cluster as a Kubernetes job so you do multiple runs and compare outcomes in a straight-forward manner. Note that by default kboom assumes there's a namespace kboom available and it will run in this namespace. If this namespace doesn't exist, create it with kubectl create ns kboom or otherwise use the --namespace parameter to overwrite it.

So, first we use the generate command to generate the load, launching 10 pods (that is, using busybox containers that just sleep) with a timeout of 14 seconds (that is, if a pod is not running within that time, it's considered a failure):

$ kubectl kboom generate --mode=scale:14 --load=pods:10
job.batch/kboom created

From now on you can execute the results command as often as you like, you can see the live progress there:

$ kubectl kboom results
Server Version: v1.12.6-eks-d69f1b
Running a scale test, launching 10 pod(s) with a 14s timeout ...

-------- Results --------
Overall pods successful: 6 out of 10
Total runtime: 14.061988653s
Fastest pod: 9.003997546s
Slowest pod: 13.003831951s
p50 pods: 12.003529448s
p95 pods: 13.003831951s

When you're done, and don't need the results anymore, use kubectl kboom cleanup to get rid of the run. Note: should you execute the cleanup command too soon for kboom to terminate all its test pods, you can use kubectl delete po -l=generator=kboom to get rid of all orphaned pods.

Known issues and plans

  • Need to come up with stricter permissions, currently too wide and not following the least privileges principle.
  • Add support for custom resources and soak testing (running for many hours).
  • Add support for other core resources, such as services or deployments.

More Repositories

1

cinf

Command line tool to view namespaces and cgroups, useful for low-level container prodding
Go
455
star
2

dnpipes

Distributed Named Pipes
Go
452
star
3

lambda-architecture.net

A repository of information, examples and good practices around the Lambda Architecture
CSS
369
star
4

reshifter

Kubernetes cluster state management
CSS
294
star
5

burry.sh

Cloud Native Infrastructure BackUp & RecoveRY
Go
260
star
6

mkdocs-deploy-gh-pages

GitHub Action to deploy an MkDocs site to GitHub Pages
Shell
242
star
7

rbac.dev

A collection of good practices and tools for Kubernetes RBAC
229
star
8

schema-org-rdf

Schema.org in RDF
HTML
187
star
9

k8s-sec

Kubernetes Security: from Image Hygiene to Network Policies
143
star
10

cidrchk

CLI tool for CIDR range operations (check, generate)
Go
134
star
11

kubed-sh

A cloud native Kubernetes cluster shell for the casual user
Go
97
star
12

krs

A command line tool for capturing and serializing Kubernetes resource statistics in OpenMetrics format
Go
95
star
13

modern-linux.info

Learning Modern Linux book website
Shell
89
star
14

kube-rpi

Kubernetes on Raspberry Pi 4 with 64-bit OS
82
star
15

the-container-security-book

The Container Security Book—a free book for practitioners
82
star
16

cn-ref

A collection of tools and references around container networking
78
star
17

rbIAM

A unified IAM+Kubernetes RBAC access control exploration tool
Go
75
star
18

5stardata.info

Information around TimBL's 5 star Open Data plan
HTML
70
star
19

eksphemeral

A simple Amazon EKS manager for ephemeral clusters
Go
66
star
20

stateful-kubernetes

All Thingz Stateful Apps & Tooling in Kubernetes
HTML
65
star
21

kn

A collection of shell functions for Kubernetes native dabbling
Shell
50
star
22

right-size-guide

A CLI tool providing memory & CPU recommendations for containerized apps
Go
49
star
23

l2i

The Lambda Layer Inspector (L2I)
Go
43
star
24

rbacadabra

A collection of RBAC recipes and tips & tricks
42
star
25

zdd-lab

DC/OS Zero Downtime Deployments Lab
Shell
39
star
26

simpleservice

A simple service for testing container orchestration setups
Python
35
star
27

yages

Yet another gRPC echo server (YAGES)
Go
34
star
28

troubleshooting-k8s-apps

Troubleshooting Kubernetes Applications
HTML
33
star
29

o11y-in-action.cloud

Cloud Observability in Action
Go
30
star
30

usn-app

UberSocialNet—applying the Lambda Architecture
Python
29
star
31

kubectl-in-action

Tips and Tricks around using kubectl to manage your Kubernetes cluster
29
star
32

web.instata

Turn your POTD into Web data
Python
26
star
33

canihaznonprivilegedcontainers.info

Advocacy site for the uptake of using non-privileged containers
24
star
34

omnidator

Translates Schema.org annotated data formats (microdata, CSV, etc.) into other data formats (JSON, RDF, etc.)
Python
24
star
35

mehdb

Educational Kubernetes-native NoSQL datastore using StatefulSet and persistent volumes
Go
23
star
36

k8s-autoscale

Kubernetes Autoscaling Experiments
JavaScript
23
star
37

turtled

A simple online RDF Turtle editor
JavaScript
22
star
38

operator-101

A step-by-step walkthrough of bootstrapping a Kubernetes operator
21
star
39

nase

A PoC for native Kubernetes secrets support via AWS Secrets Manager
Go
21
star
40

hadoop-data-ingestion

Renders options for ingesting data into Hadoop
21
star
41

mkdocs-template

A template for MkDocs publishing via GitHub Action
19
star
42

mrlin

mrlin is 'MapReduce processing of Linked Data' … because it's magic
Python
17
star
43

s3-echoer

Reads input from stdin and uploads it to an existing S3 bucket
Go
16
star
44

gitops101

GitOps 101
16
star
45

m-shop

Marathon/Docker deployment of a Web application incl. analytics using the ELK stack
JavaScript
15
star
46

ld-in-couch

Enables you to store, process and query Linked Data in Apache CouchDB.
Python
15
star
47

kruiser

A proxy that transparently exposes gRPC Kubernetes services cluster-externally
Go
14
star
48

imgn

From monolith to containerized microservices to serverless
Go
14
star
49

otel-adoption-survey-2022

OpenTelemetry Adoption Survey 2022
14
star
50

arn.services

Utility service for Amazon Resource Names (ARNs)
Go
13
star
51

tride

turning tabular data into entities
Python
13
star
52

apache-drill-frontend

A front-end for Apache Drill
JavaScript
13
star
53

aws-tmux

AWS status for tmux
Shell
13
star
54

apache-drill-sandbox

A collection of experiments and recipes around Apache Drill
12
star
55

fosdem2018-godevroom-networkingdeepdive

FOSDEM 2018 Go devroom, Networking deepdive—From net.Dial to gRPC
Go
12
star
56

http-range-14-burner

A collection of http-range-14 facts to produce an infographic about resources spent over the past 10y
11
star
57

awsometag

A tool to tag AWS resources in a unified manner
Go
11
star
58

go4systasks

Using the Go programming language for system tasks
Go
11
star
59

aws-container-security-survey-2020

AWS container security survey 2020
11
star
60

aws-container-security-survey-2019

Questions and results of the AWS container security survey 2019
11
star
61

boring-is-cool

Advocacy site for boring technology
HTML
10
star
62

mc

A Simple Mesos-DNS Client
Python
10
star
63

temporal-opa

Temporal reasoning with OPA
Open Policy Agent
10
star
64

ref.otel.help

Collection of OpenTelemetry good practices, tutorials, docs
Python
10
star
65

using-client-go

A versioned collection of snippets showing how to use client-go
Go
10
star
66

Racoon

Rapid-appraisal crawler for original open data nuggets
Python
9
star
67

apache-big-data-cheat-sheet

A cheat sheet for Big Data technologies at and from The Apache Software Foundation
9
star
68

kubecuddler

A simple Go package wrapping kubectl invocations
Go
8
star
69

madr

Linked Open Data Mobile AugmenteD Reality
Python
8
star
70

go4ops

Go for ops
Go
8
star
71

marvin

A demonstrator for a nanoservices-based application on DC/OS
JavaScript
8
star
72

addrable

Addressable tabular data on the Web
JavaScript
7
star
73

dromedar

Apache Drill On Apache Mesos
Python
7
star
74

odc2011

Local Planning Explorer Ireland
PHP
7
star
75

school-explorer

Presents information about schools to help parents to decide where to send their kids to
PHP
7
star
76

fallacies-of-distributed-gomputing

The Fallacies Of Distributed Gomputing—talk at GopherCon 2017
Go
7
star
77

RDF2x

A collection of converters from RDF to data formats
6
star
78

openshift-cheat-sheet

Cheat sheet for OpenShift
6
star
79

dependentjobs

DependentJobs for Kubernetes
Go
6
star
80

influxdb-dweet.io

Experiment to ingest data from dweet.io into InfluxDB
Python
6
star
81

container-networking

Container Networking
5
star
82

ld-profiler

Dirt-simple Linked Data access profiler
Python
5
star
83

sparqlbin.com

A generic SPARQL processor and sharing tool.
Python
5
star
84

clump

A cluster dump tool
Go
5
star
85

letsgo

Let's Go! is a hands-on introduction into the Go programming language
Go
5
star
86

bigdatainthecloud.info

The Q&A site for devops, developers and analysts that deal with Big Data processing in cloud computing environments.
5
star
87

shodan

An event-sourcing-based RDF datastore and processor
Python
4
star
88

aws-cli-fu

Collection of my favorite AWS CLI calls
4
star
89

2018-state-of-faas-on-kube

KubeCon Europe 2018—Lightning Talk: The State Of FaaS on Kubernetes
4
star
90

qrcan

Query Resolver & Comprehensive Archive Network
JavaScript
4
star
91

kaput

Kubernetes Attack and Policy Underminer Tool
Go
4
star
92

hdt-online

A simple HDT converter online service
JavaScript
4
star
93

cloudnaive.online

All things infosec concerning *nix, containers, Kubernetes, and serverless computing
4
star
94

util-containers

A collection of utility container images
3
star
95

funcnstein

a multi-platform tool for managing functions
3
star
96

sdx

Seamless Developer Experience
Go
3
star
97

github-api-fetcher

Fetches data from the public GitHub API and ingests it into various sinks
Go
3
star
98

containerz.info

Advocacy website around Linux containers
HTML
3
star
99

noteless

A e2e demo of serverless technologies
Go
3
star
100

rdfxml.info

An advocacy site to inform people about the drawbacks of RDF/XML
3
star