cfk
Version:
Finbox's PaaS
188 lines (180 loc) • 6.63 kB
YAML
services:
reporter:
image: "finboxio/reporter:${CFK_VERSION}"
container_name: reporter
hostname: "${HOSTNAME}-reporter.weave.local"
volumes:
- "/var/run/weave/weave.sock:/var/run/docker.sock"
- "/data/reporter:/srv/reporter"
environment:
CFK_START_AFTER: "discovery"
HOSTNAME: "${HOSTNAME}"
DOMAIN: "${DOMAIN}"
SLACK_HOOK: "${SLACK_HOOK}"
SLACK_CHANNEL: "${SLACK_CHANNEL}"
router:
image: "finboxio/router:${CFK_VERSION}"
container_name: router
hostname: "${HOSTNAME}-router.weave.local"
dns:
- "172.42.0.1"
- "8.8.8.8"
- "8.8.4.4"
ports:
- "80:80"
- "81:81"
- "9090:9090"
- "${HOST_IP}:53:53"
- "${HOST_IP}:53:53/udp"
environment:
CFK_START_AFTER: "reporter"
CFK_ROLE: "${CFK_ROLE}"
CFK_VERSION: "${CFK_VERSION}"
CONSUL_MINWAIT: "${CONSUL_MINWAIT}"
CONSUL_MAXWAIT: "${CONSUL_MAXWAIT}"
CONSUL_MAXSTALE: "${CONSUL_MAXSTALE}"
SERVICE_80_NAME: "router"
SERVICE_80_TAGS: "${CFK_ROLE},http,admin"
SERVICE_81_NAME: "proxy-router"
SERVICE_81_TAGS: "${CFK_ROLE},http,admin"
SERVICE_9090_NAME: "haproxy"
SERVICE_9090_TAGS: "${CFK_ROLE},http,admin"
SERVICE_53_NAME: "router-dns"
HOSTNAME: "${HOSTNAME}"
HAPROXY_DOMAIN: "${DOMAIN}"
CONSUL_URL: "${HOST_IP}:8500"
ADMIN_USER: "${ADMIN_USER}"
ADMIN_PASS: "${ADMIN_PASS}"
FORCE_SSL: "${FORCE_SSL}"
FALLBACK_URL: "${FALLBACK_URL}"
REQUIRED_SERVICES: router-9090,agent-consul-8500,agent-mesos-5051
agent-consul:
image: gliderlabs/consul-agent:0.6
container_name: agent-consul
hostname: agent-consul.weave.local
ports:
- "8300:8300"
- "8301:8301"
- "8301:8301/udp"
- "8302:8302"
- "8302:8302/udp"
- "8400:8400"
- "8500:8500"
- "8600:8600"
- "8600:8600/udp"
command: "-node ${HOSTNAME} -advertise ${HOST_IP}"
volumes:
- "/usr/bin/jq:/usr/bin/jq"
environment:
CFK_START_AFTER: "router"
CFK_START_PRECONDITION: >
dig +short @${HOST_IP} ${HOSTNAME}-router.weave.local
| grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'
GOMAXPROCS: 2
SERVICE_8500_NAME: "agent-consul"
SERVICE_8500_TAGS: "${CFK_ROLE},http,admin"
SERVICE_8500_CHECK_HTTP: "/v1/status/leader"
SERVICE_8500_CHECK_INTERVAL: "30s"
SERVICE_8500_CHECK_TIMEOUT: "5s"
SERVICE_8600_NAME: "consul-dns"
SERVICE_8300_IGNORE: "true"
SERVICE_8301_IGNORE: "true"
SERVICE_8302_IGNORE: "true"
SERVICE_8400_IGNORE: "true"
SERVICE_53_IGNORE: "true"
# logstash:
# image: logstash:2.1
# container_name: logstash
# hostname: "${HOSTNAME}-logstash.weave.local"
# volumes:
# - "/data/logstash:/srv/logstash"
# - "/data/reporter:/srv/reporter"
# command: "logstash -e \"input { file { path => '/srv/reporter/containers.log' codec => json sincedb_path => '/srv/logstash/sincedb' } } output { elasticsearch { hosts => 'elasticsearch' } }\""
# environment:
# CFK_START_AFTER: "consul-agent"
# CFK_START_PRECONDITION: >
# curl -s -f localhost:8500/v1/health/service/elasticsearch
# | jq -e ".[] | .Checks | .[]
# | jq -s ".[] | select(.Status==\"warning\" or .Status==\"critical\")"
# | jq -s "."
# | jq -e "length == 0"
reaper:
image: "finboxio/reaper:${CFK_VERSION}"
container_name: reaper
hostname: "${HOSTNAME}-reaper.weave.local"
volumes:
- "/var/run/weave/weave.sock:/var/run/docker.sock"
environment:
CFK_START_AFTER: "agent-consul"
CFK_START_PRECONDITION: >
curl -s -f localhost:8500/v1/health/service/consul
| jq -e ".[] | .Checks | .[]"
| jq -s ".[] | select(.Status==\"warning\" or .Status==\"critical\")"
| jq -s "."
| jq -e "length == 0"
GRACE_PERIOD: "600"
CONSUL_URL: "${HOST_IP}:8500"
HOSTNAME: "${HOSTNAME}"
DOMAIN: "${DOMAIN}"
INTERVAL: "30"
MAX_FAILURES: "9"
SLACK_HOOK: "${SLACK_HOOK}"
SLACK_CHANNEL: "${SLACK_CHANNEL}"
registrator:
# TODO: Switch back to original gliderlabs/registrator once https://github.com/gliderlabs/registrator/pull/245 is merged
image: johnydays/registrator
container_name: registrator
hostname: "${HOSTNAME}-registrator.weave.local"
volumes:
- "/var/run/weave/weave.sock:/tmp/docker.sock"
command: "-internal -retry-attempts -1 -deregister always -resync 30 consul://${HOST_IP}:8500"
environment:
CFK_START_AFTER: "agent-consul"
CFK_START_PRECONDITION: >
curl -s -f localhost:8500/v1/health/service/consul
| jq -e ".[] | .Checks | .[]"
| jq -s ".[] | select(.Status==\"warning\" or .Status==\"critical\")"
| jq -s "."
| jq -e "length == 0"
HOSTNAME: "${HOSTNAME}"
agent-mesos:
image: mesosphere/mesos-slave:0.28.1
container_name: agent-mesos
hostname: agent-mesos.weave.local
ports:
- "5051:5051"
privileged: true
pid: host
volumes:
- "/var/run/weave/weave.sock:/var/run/weave/weave.sock"
- "/usr/bin/docker:/usr/bin/docker:ro"
- "/usr/lib/x86_64-linux-gnu/libapparmor.so.1.1.0:/usr/lib/x86_64-linux-gnu/libapparmor.so.1"
- "/tmp/mesos:/tmp/mesos"
environment:
CFK_START_AFTER: "registrator"
CFK_START_PRECONDITION: >
curl -s -f localhost:8500/v1/health/service/mesos
| jq -e ".[] | .Checks | .[]"
| jq -s ".[] | select(.Status==\"warning\" or .Status==\"critical\")"
| jq -s "."
| jq -e "length == 0"
&& curl -s -f localhost:8500/v1/health/service/mesos
| jq -e ".[] | .Checks | .[] | select(.ServiceName==\"mesos\")"
| jq -s ".[] | select(.Status==\"passing\")"
| jq -s "."
| jq -e "length >= ${QUORUM_NUM}"
SERVICE_NAME: "agent-mesos"
SERVICE_TAGS: "${CFK_ROLE},http,admin"
SERVICE_CHECK_SCRIPT: >
curl -s -f http://mesos.router.local/master/state.json
| jq ".slaves | .[].id"
| grep $$(curl -s http://${HOST_IP}:5051/state.json | jq ".id")
MESOS_CONTAINERIZERS: "docker,mesos"
MESOS_DEFAULT_CONTAINER_IMAGE: "ubuntu:14.04"
MESOS_DOCKER: "/usr/bin/docker"
MESOS_DOCKER_PULLER_TIMEOUT_SECS: "300"
MESOS_DOCKER_STOP_TIMEOUT: "10secs"
MESOS_DOCKER_SOCKET: "/var/run/weave/weave.sock"
MESOS_EXECUTOR_REGISTRATION_TIMEOUT: "10mins"
MESOS_MASTER: "zk://zookeeper:2181/mesos"
MESOS_HOSTNAME: "${HOSTNAME}"