mirror of
https://github.com/spaytac/orbiter.git
synced 2026-01-22 05:04:41 +00:00
Added swarm demo
This PR adds a demo with docker swarm and docker-machine.
This commit is contained in:
parent
9c29551112
commit
919e3bafba
@ -12,9 +12,12 @@ We designed in collaboration with InfluxData to show how metrics can be used.
|
|||||||
It is based on plugins called `provider`. At the moment we implemented:
|
It is based on plugins called `provider`. At the moment we implemented:
|
||||||
|
|
||||||
* Docker Swarm mode [(go to zero-conf
|
* Docker Swarm mode [(go to zero-conf
|
||||||
chapter](https://github.com/gianarb/orbiter#autodetect)
|
chapter](https://github.com/gianarb/orbiter#autodetect). look full example
|
||||||
|
under `./contrib/swarm` directory
|
||||||
* DigitalOcean
|
* DigitalOcean
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
orbiter daemon -config config.yml
|
orbiter daemon -config config.yml
|
||||||
```
|
```
|
||||||
|
|||||||
15
contrib/swarm/Makefile
Normal file
15
contrib/swarm/Makefile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
IP = $(shell docker-machine ip sw1)
|
||||||
|
init:
|
||||||
|
./cluster/create.sh
|
||||||
|
destroy:
|
||||||
|
docker-machine rm -f sw1 sw2 sw3 sw4
|
||||||
|
deploy:
|
||||||
|
docker stack deploy --compose-file stack.yml stack
|
||||||
|
ps:
|
||||||
|
docker service ls
|
||||||
|
docker stack ps stack
|
||||||
|
scale-up:
|
||||||
|
curl -X POST -v http://$(IP):8081/handle/autodetect_swarm/stack_micro/up
|
||||||
|
scale-down:
|
||||||
|
curl -X POST -v http://$(IP):8081/handle/autodetect_swarm/stack_micro/down
|
||||||
|
|
||||||
57
contrib/swarm/README.md
Normal file
57
contrib/swarm/README.md
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
This is a tutorial to use orbiter as autoscaler with Docker Swarm.
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
|
||||||
|
* Docker CLI installed
|
||||||
|
* Docker Machine
|
||||||
|
* Virtualbox
|
||||||
|
|
||||||
|
1. Create a swarm cluster with 4 nodes. One manager and three workers. It uses
|
||||||
|
Docker Machine and Virtualbox as provider.
|
||||||
|
```
|
||||||
|
make init
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Point Docker CLI to the right Docker machine. The master is called sw1.
|
||||||
|
|
||||||
|
```
|
||||||
|
eval $(docker-machine env sw1)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Deploy your stack. The stack contains two services, one called orbiter and
|
||||||
|
another called micro. Micro is the web app that we are autoscaling.
|
||||||
|
|
||||||
|
```
|
||||||
|
make deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
4. This command shows the current situation. The first table represent the
|
||||||
|
number of services and how many task are running under a service. You should
|
||||||
|
see two services. Micro has 10 tasks.
|
||||||
|
|
||||||
|
```
|
||||||
|
make ps
|
||||||
|
```
|
||||||
|
|
||||||
|
5. There is an utility in the makefile to scale up and down micro.
|
||||||
|
|
||||||
|
```
|
||||||
|
make scale-up
|
||||||
|
make scale-down
|
||||||
|
```
|
||||||
|
|
||||||
|
6. You can check the number of tasks changing every time you scale with the
|
||||||
|
command:
|
||||||
|
|
||||||
|
```
|
||||||
|
make ps
|
||||||
|
```
|
||||||
|
|
||||||
|
7. At the end of the test you can clean your envrionment
|
||||||
|
|
||||||
|
```
|
||||||
|
make destroy
|
||||||
|
```
|
||||||
|
|
||||||
|
That's it. Have a look at the code in `./stack.yml` and `Makefile` to have more
|
||||||
|
information about how orbiter works.
|
||||||
26
contrib/swarm/cluster/create.sh
Executable file
26
contrib/swarm/cluster/create.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
provider=virtualbox
|
||||||
|
echo "### Init Servers ###"
|
||||||
|
|
||||||
|
docker-machine create -d ${provider} sw1 &
|
||||||
|
docker-machine create -d ${provider} sw2 &
|
||||||
|
docker-machine create -d ${provider} sw3 &
|
||||||
|
docker-machine create -d ${provider} sw4 &
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
|
echo "### Configurate cluster ###"
|
||||||
|
|
||||||
|
MANAGER_IP=$(docker-machine ip sw1)
|
||||||
|
docker-machine ssh sw1 docker swarm init --advertise-addr ${MANAGER_IP}
|
||||||
|
TOKEN=$(docker-machine ssh sw1 docker swarm join-token -q worker)
|
||||||
|
docker-machine ssh sw2 docker swarm join --token ${TOKEN} ${MANAGER_IP}:2377
|
||||||
|
docker-machine ssh sw3 docker swarm join --token ${TOKEN} ${MANAGER_IP}:2377
|
||||||
|
docker-machine ssh sw4 docker swarm join --token ${TOKEN} ${MANAGER_IP}:2377
|
||||||
|
|
||||||
|
# Information
|
||||||
|
echo ""
|
||||||
|
echo "CLUSTER INFORMATION"
|
||||||
|
echo "discovery token: ${TOKEN}"
|
||||||
|
echo "Environment variables to connect trough docker cli"
|
||||||
|
docker-machine env sw1
|
||||||
50
contrib/swarm/stack.yml
Normal file
50
contrib/swarm/stack.yml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
orbiter:
|
||||||
|
image: gianarb/orbiter
|
||||||
|
command: daemon
|
||||||
|
ports:
|
||||||
|
- 8081:8000
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
deploy:
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == manager
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 512M
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 256M
|
||||||
|
micro:
|
||||||
|
image: gianarb/micro:1.2.0
|
||||||
|
labels: [orbiter=true]
|
||||||
|
networks:
|
||||||
|
- micro-net
|
||||||
|
ports:
|
||||||
|
- 8000:8000
|
||||||
|
deploy:
|
||||||
|
mode: replicated
|
||||||
|
replicas: 10
|
||||||
|
labels: [orbiter=true]
|
||||||
|
update_config:
|
||||||
|
parallelism: 2
|
||||||
|
delay: 3s
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 512M
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 256M
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
delay: 3s
|
||||||
|
max_attempts: 3
|
||||||
|
window: 5s
|
||||||
|
networks:
|
||||||
|
micro-net:
|
||||||
Loading…
Reference in New Issue
Block a user