Mit Mesos-Compose biete ich eine Alternative zu Mesosphere Marathon an. Hierbei ist das Ziel, docker-compose files in MesosTasks zu übersetzten.
Ziel ist es die Arbeitsweise mit Mesos näher an den Workflow der Entwickler anzupassen. Es ist unstrittig, dass der Großteil der Entwickler im Microservice Umfeld sich mit der docker-compose Syntax auskennen und den Workload ggfs in einer lokalen Docker Umgebung testen. Die gleiche docker-compose.yaml kann mit Hilfe der Mesos CLI an das mesos-compose Framework geschickt werden. Das Framework scheduled daraufhin die entsprechenden Container in Apache Mesos.
Folgende features stellt das mesos-compose framework zur Verfügung
Als Docker-Compose Syntax wird die Version 3.9 unterstützt. Dabei sind bislang folgende Parameter umgesetzt:
version: '3.9'
services:
app:
image: alpine:latest
command: "sleep"
arguments: ["1000"]
restart: always
volumes:
- "12345test:/tmp"
environment:
MYSQL_HOST: test
hostname: test
container_name: test
container_type: docker
shell: true
mesos:
task_name: "mc:test:app1" # an alternative taskname
executer:
command: "/mnt/mesos/sandbox/my-custom-executor"
fetch:
- value: http://localhost/my-custom-executor
executable: true
extract: false
cache: false
labels:
traefik.enable: "true"
traefik.http.routers.test.entrypoints: "web"
traefik.http.routers.test.service: "mc_test_app1_80" # if an alternative taskname is set, we have to use it here to
traefik.http.routers.test.rule: "HostRegexp(`example.com`, `{subdomain:[a-z]+}.example.com`)"
network_mode: "BRIDGE"
networks:
default:
aliases:
- test
ports:
- "8080:80"
- "9090"
- "8081:81/tcp"
- "8082:82/udp"
- "8082:82/http"
- "8082:82/https"
- "8082:82/h2c"
- "8082:82/wss"
network: default
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
healthcheck:
delay_seconds: 15
interval_seconds: 10
timeout_seconds: 20
consecutive_failures: 3
grace_period_seconds: 10
command:
value: "mysqladmin ping -h localhost"
http:
scheme:
port:
path:
statuses:
- 200
tcp:
port:
deploy:
placement:
constraints:
- "node.hostname==localhost"
- "node.platform.os==linux"
- "node.platform.arch==arm"
- "unique"
replicas: 1
resources:
limits:
cpus: 0.01
memory: 50
networks:
default:
external: true
name: weave
driver: bridge
volumes:
12345test:
driver: local