https://github.com/mbogus/kube-amqp-autoscale
Dynamically scale kubernetes resources using the length of an AMQP queue (number of messages available for retrieval from the queue) to determine the load
https://github.com/mbogus/kube-amqp-autoscale
autoscale autoscaler autoscaling kubernetes
Last synced: 3 months ago
JSON representation
Dynamically scale kubernetes resources using the length of an AMQP queue (number of messages available for retrieval from the queue) to determine the load
- Host: GitHub
- URL: https://github.com/mbogus/kube-amqp-autoscale
- Owner: mbogus
- License: apache-2.0
- Created: 2016-06-30T11:44:43.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-03-26T17:37:47.000Z (over 3 years ago)
- Last Synced: 2024-11-25T15:52:26.486Z (11 months ago)
- Topics: autoscale, autoscaler, autoscaling, kubernetes
- Language: Go
- Size: 58.6 KB
- Stars: 63
- Watchers: 4
- Forks: 15
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# kube-amqp-autoscale
Dynamically scale kubernetes resources using length of an AMQP queue (number of messages available for retrieval from the queue) to determine the load on an application/Kubernetes pod.
**NOTICE**
If your application load is not queue-bound but rather CPU-sensitive, make sure to use built-in Kubernetes [Horizontal Pod Autoscaling](http://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/) instead of this project.
## Status
*Alpha*
[](https://travis-ci.org/mbogus/kube-amqp-autoscale) [](https://coveralls.io/github/mbogus/kube-amqp-autoscale?branch=master)
## Usage
The best way to use the service is by importing [automated build docker container](https://hub.docker.com/r/mbogus/kube-amqp-autoscale/).
Please follow the instructions on the automated build page.## Go get
go get github.com/mbogus/kube-amqp-autoscale
## Clone from [github](https://github.com/mbogus/kube-amqp-autoscale)
* Create directory for APT projects `mkdir -p $GOPATH/src/github.com/mbogus`
as typical in [writing go programs](https://golang.org/doc/code.html)
* Clone this project `git clone https://github.com/mbogus/kube-amqp-autoscale.git`### Building on Windows
If you have a unix-y shell on Windows ([MSYS2](http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/),
[CYGWIN](https://cygwin.com/install.html) or other), see *Build project* below.### Build project
The project depends on several external Go projects that can be automatically
downloaded using `make depend` target.Run `make depend && make [build]`
## Runtime environment variables
* `GOMAXPROCS` limits the number of operating system threads that can execute
user-level Go code simultaneously## Runtime command-line arguments
* **`amqp-uri`** required, RabbitMQ broker URI, e.g. `amqp://guest:guest@127.0.0.1:5672//`
* **`amqp-queue`** required, RabbitMQ queue name to measure load on an application. Use comma separator to specify multiple queues.
* **`api-url`** required, Kubernetes API URL, e.g. `http://127.0.0.1:8080`
* `api-user` optional, username for basic authentication on Kubernetes API
* `api-passwd` optional, password for basic authentication on Kubernetes API
* `api-token` optional, path to a bearer token file for OAuth authentication, on a Kubernetes pod usually `/var/run/secrets/kubernetes.io/serviceaccount/token`
* `api-cafile` optional, path to CA certificate file for HTTPS connections to Kubernetes API from within a cluster, typically `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`
* `api-insecure` optional, set to `true` for connecting to Kubernetes API without verifying TLS certificate; unsafe, use for development only (default `false`)
* `min` lower limit for the number of replicas for a Kubernetes pod that can be set by the autoscaler (default `1`)
* **`max`** required, upper limit for the number of replicate for a Kubernetes pod that can be set by the autoscaler (must be greater than `min`)
* **`name`** required, name of the Kubernetes resource to autoscale
* `kind` type of the Kubernetes resource to autoscale, one of `Deployment`, `ReplicationController`, `ReplicaSet` (default `Deployment`)
* `ns` Kubernetes namespace (default `default`)
* `interval` time interval between Kubernetes resource scale runs in secs (default `30`)
* **`threshold`** required, number of messages on a queue representing maximum load on the autoscaled Kubernetes resource
* `increase-limit` limit number of Kubernetes pods to be provisioned in a single scale iteration to max of the value, set to a number greater than 0, default `unbounded`
* `decrease-limit` limit number of Kubernetes pods to be terminated in a single scale iteration to max of the value, set to a number greater than 0, default `unbounded`
* `stats-interval` time interval between metrics gathering runs in seconds (default `5`)
* `eval-intervals` number of autoscale intervals used to calculate average queue length (default `2`)
* `stats-coverage` required percentage of statistics to calculate average queue length (default `0.75`)
* `db` sqlite3 database filename for storing queue length statistics (default `file::memory:?cache=shared`)
* `db-dir` directory for sqlite3 statistics database file
* `version` show version
* `metrics-listen-address` the address to listen on for exporting Prometheus metrics (default `:9505`)## Integration tests
To run intergation tests, make sure to configure access to running RabbitMQ instance,
export environment variable `AMQP_URI=amqp://username:passwd@rabbitmq-host:5672//`
and run `go test -tags=integration ./...`