|
2 years ago | |
---|---|---|
.github/workflows | 2 years ago | |
img | 2 years ago | |
vendor | 2 years ago | |
.gitignore | 2 years ago | |
.traefik.yml | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 2 years ago | |
config.yml | 2 years ago | |
config_dev.yml | 2 years ago | |
docker-compose.yml | 2 years ago | |
go.mod | 2 years ago | |
go.sum | 2 years ago | |
ondemand.go | 2 years ago | |
ondemand_test.go | 2 years ago | |
traefik.yml | 2 years ago | |
traefik_dev.yml | 2 years ago |
README.md
Traefik Ondemand Plugin
Traefik plugin to scale down to zero containers on docker swarm.
Description
A container may be a simple nginx server serving static pages, when no one is using it, it still consume CPU and memory.
With this plugin you can scale down to zero when there is no request for the service. It will scale back to 1 when there is a user requesting the service.
Demo
The service whoami is scaled to 0. We configured a timeout of 10 seconds.
Run the demo
use watch -n 1 docker service ls
to see in real time the service getting downscaled
docker swarm init
export TRAEFIK_PILOT_TOKEN=your_traefik_pilot_token
docker stack deploy -c docker-compose.yml TRAEFIK_HACKATHON
- Go to
localhost:8000/whoami
--> service is starting - Refresh --> service is responding
- wait 10 seconds
- Refresh --> service is starting again because it was scaled down to 0
Configuration
serviceUrl
the traefik-ondemand-service url (e.g. http://ondemand:10000)name
the service to scale on demand name (docker service ls)timeout
(default: 60) timeout in seconds for the service to be scaled down to zero after the last request
See config.yml
and docker-compose.yml
for full configuration.
Limitations
Cannot use service labels
You cannot set the labels for a service inside the service definition.
Otherwise when scaling to 0 the specification would not be found because there is no more task running. So you have to write it under the dynamic configuration file.
The need of "traefik-ondemand-service"
We are running "traefik-ondemand-service" to interact freely with the docker deamon and manage an independant lifecycle from traefik.
We may try to update this plugin to embed the scaling behavior in a future.
-> The source is available at https://github.com/acouvreur/traefik-ondemand-service
TODO
- Embed "traefik-ondemand-service" inside the plugin directly
- Scale up service (max replica, threshold)
- Scale down from N to 1 (threshold)
- Kubernetes integration
- Add configuration sample with plugin in non dev mode
Authors
Alexis Couvreur (left) and Alexandre Hiltcher (right)