Easy Kubernetes autoscaler controller.
To install mitose in your k8s cluster just run:
$ kubectl create -f mitose-app.yaml
We recommended you to use a diferent namespace
The Mitose controllers are configured by kubernetes configmaps.
Each entry on configmap represents a deployment to watch.
The configuration data format is json with those fields:
| Field | Description |
|---|---|
| namespace | namespace of deployment |
| deployment | deployment name |
| type | type of controller |
| max | maximum number of replicas |
| min | minimum number of replicas |
| scale_method | method of autoscaling (by editing HPA or editing DEPLOY) |
| interval | controller running interval (e.g. 1m) |
| active | if this controller is active |
Those fields are comom for each controller type.
You don't need to restart mitose when you change a configmap, because mitose will rebuild its controllers on each configmap change.
There is a mitose controller bases on AWS SQS queue size. The specifics configuration fields are:
| Field | Description |
|---|---|
| key | aws credential key |
| secret | aws credential secret |
| region | aws region |
| queue_urls | a list of the complete endopoints of the queues |
| msgs_per_pod | the desired number of msgs in queue per replica |
To configure a controller based on SQS queue size use the follow example:
{
"namespace": "target",
"deployment": "target",
"type": "sqs",
"interval": "1m",
"scale_method": "DEPLOY",
"max": 5,
"min": 1,
"active": true,
"key": "XXXX",
"secret": "XXXX",
"region": "us-east-1",
"queue_urls": ["https://sqs.us-east-1.amazonaws.com/XXXXXXX/XXXXXXX"],
"msgs_per_pod": 2
}To configure a controller based on GCP's Pub/Sub:
{
"namespace": "target",
"deployment": "target",
"type": "pubsub",
"interval": "1m",
"scale_method": "DEPLOY",
"max": 5,
"min": 1,
"active": true,
"google_application_credentials": "XXXX",
"region": "us-east1",
"subscription_ids": ["mysub"],
"project": "my-gcp-project",
"msgs_per_pod": 2
}google_application_credentials should be the location of a credentials.json file provided by GCP.
To configure a controller based on RabbitMQ queue size:
{
"namespace": "target",
"deployment": "target",
"type": "rabbitmq",
"interval": "1m",
"scale_method": "DEPLOY",
"max": 5,
"min": 1,
"active": true,
"credentials": "XXXX",
"queue_urls": ["https://my-rabbitmq-domain/api/queues/vhost/queue-name"],
"msgs_per_pod": 2
}credentials should be the user:password of RabbitMQ encoded in base64 format.
Save that content as target.json file and create a configmap
using the kubectl create configmap command, f.ex:
$ kubectl create configmap config --from-file=target.json --namespace=mitoseTo expose mitose metrics to prometheus you need to expose a service to deploy
$ kubectl expose deployment mitose --type=ClusterIP --port=5000 --namespace mitose
and add the annotation prometheus.io/scrape: "true" on this service.
Mitose will start a http server on the port configured by environment variable $PORT.
If you deployed mitose using the
mitose-app.yamlfile, you don't need that.
- Tests
- Admin to CRUD the configs.
