k3s/test/images/resource-consumer
Ewa Socala ce5d7d43db added README file to Resource Consumer 2015-10-01 10:28:48 +02:00
..
consume-cpu Fix typo for milicores to millicores 2015-09-08 14:12:08 -04:00
Dockerfile added possibility of memory consumption to Dockerfile 2015-09-09 16:09:17 +02:00
Makefile Bumped image tag for Resource Consumer 2015-09-15 16:10:58 +02:00
README.md added README file to Resource Consumer 2015-10-01 10:28:48 +02:00
resource_consumer.go move contrib/for-tests to test/images 2015-08-14 20:42:46 -07:00
resource_consumer_handler.go Merge pull request #13789 from socaa/resource-consumer-memory 2015-09-10 08:49:42 -07:00
utils.go Memory consumption added to Resource Consumer 2015-09-10 13:50:49 +02:00

README.md

Resource Consumer

Overview

Resource Consumer is a tool which allows to generate cpu/memory utilization in a container. The reason why it was created is testing kubernetes autoscaling. Resource Consumer can help with autoscaling tests for:

  • cluster size autoscaling,
  • horizontal autoscaling of pod - changing the size of replication controller,
  • vertical autoscaling of pod - changing its resource limits.

Usage

Resource Consumer starts an HTTP server and handle sended requests. It listens on port given as a flag (default 8080). Action of consuming resources is send to the container by a POST http request. Each http request creates new process. Http request handler is in file resource_consumer_handler.go

The container consumes specified amount of resources:

  • CPU in millicores,
  • Memory in megabytes.

###Consume CPU http request

  • suffix "ConsumeCPU",
  • parameters "millicores" and "durationSec".

Consumes specified amount of millicores for durationSec seconds. Consume CPU uses "./consume-cpu/consume-cpu" binary (file consume-cpu/consume_cpu.go). When CPU consumption is too low this binary uses cpu by calculating math.sqrt(0) 10^7 times and if consumption is too high binary sleeps for 10 millisecond. One replica of Resource Consumer cannot consume more that 1 cpu.

###Consume Memory http request

  • suffix "ConsumeMem",
  • parameters "megabytes" and "durationSec".

Consumes specified amount of megabytes for durationSec seconds. Consume Memory uses stress tool (stress -m 1 --vm-bytes megabytes --vm-hang 0 -t durationSec). Request leading to consumig more memory then container limit will be ignored.

###CURL example

$ kubectl run resource-consumer --image=gcr.io/google_containers/resource_consumer:beta
$ kubectl expose rc resource-consumer --create-external-load-balancer=true --port=8080 --target-port=8080
$ kubectl get services resource-consumer

There are two IPs first one is internal, second one is the external load-balanced IP. Both serving port 8080. (Use second one)

$ curl --data "millicores=300&durationSec=600" http://104.197.103.250:8080/ConsumeCPU.

300 millicores will be consumed for 600 seconds.

Image

Docker image of Resource Consumer can be found in Google Container Registry as gcr.io/google_containers/resource_consumer:beta

Use cases

###Cluster size autoscaling

  1. Consume more resources on each node that is specified for autoscaler
  2. Observe that cluster size increased

###Horizontal autoscaling of pod

  1. Create consuming RC and start consuming appropriate amount of resources
  2. Observe that RC has been resized
  3. Observe that usage on each replica decreased

###Vertical autoscaling of pod

  1. Create consuming pod and start consuming appropriate amount of resources
  2. Observed that limits has been increased

Analytics