GithubHelp home page GithubHelp logo

manriquecms / mesos-consul Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mantl/mesos-consul

0.0 1.0 0.0 182 KB

Mesos to Consul bridge for service discovery

License: Apache License 2.0

Makefile 1.98% Go 98.02%

mesos-consul's Introduction

mesos-consul

Build Status

Mesos to Consul bridge for service discovery.

Mesos-consul automatically registers/deregisters services run as Mesos tasks.

This means if you have a Mesos task called application, this program will register the application in Consul, and it will be exposed via DNS as application.service.consul.

This program also does Mesos leader discovery, so that leader.mesos.service.consul will point to the current leader.

Table of Contents

Comparisons to other discovery software

This project is similar to mesos-dns in that it polls Mesos to get information about tasks. However, instead of exposing this information via a built-in DNS server, we populate Consul service discovery with this information. Consul then exposes the services via DNS and via its API.

Benefits of using Consul:

  • Integration with other tools like consul-template
  • Multi-DC DNS lookups
  • Configurable health checks that run on each system

Registrator is another tool that populates Consul (and other backends like etcd) with the status of Docker containers. However, Registrator is currently limited to reporting on Docker containers and does not track Mesos tasks.

Building

docker build -t mesos-consul .

Running

Mesos-consul can be run in a Docker container via Marathon. If your Zookeeper and Marathon services are registered in consul, you can use .service.consul to find them, otherwise change the vaules for your environment:

curl -X POST [email protected] -H "Content-Type: application/json" http://marathon.service.consul:8080/v2/apps'

Where mesos-consul.json is similar to (replacing the image with your image):

{
  "args": [
    "--zk=zk://zookeeper.service.consul:2181/mesos"
  ],  
  "container": {
    "type": "DOCKER",
    "docker": {
      "network": "BRIDGE",
      "image": "{{ mesos_consul_image }}:{{ mesos_consul_image_tag }}"
    }   
  },  
  "id": "mesos-consul",
  "instances": 1,
  "cpus": 0.1,
  "mem": 256
}


You can add options to authenticate via basic http or Consul token.

Usage

Options

Option Description
version Print mesos-consul version
refresh Time between refreshes of Mesos tasks
mesos-ip-order Comma separated list to control the order in which github.com/CiscoCloud/mesos-consul searches or the task IP address. Valid options are 'netinfo', 'mesos', 'docker' and 'host' (default netinfo,mesos,host)
healthcheck Enables a http endpoint for health checks. When this flag is enabled, serves health status on 127.0.0.1:24476
healthcheck-ip Health check service interface ip (default 127.0.0.1)
healthcheck-port Health check service port. (default 24476)
consul-auth The basic authentication username (and optional password), separated by a colon.
consul-ssl Use HTTPS while talking to the registry.
consul-ssl-verify Verify certificates when connecting via SSL.
consul-ssl-cert Path to an SSL certificate to use to authenticate to the registry server
consul-ssl-cacert Path to a CA certificate file, containing one or more CA certificates to use to valid the registry server certificate
consul-token The registry ACL token
heartbeats-before-remove Number of times that registration needs to fail before removing task from Consul. (default: 1)
whitelist Only register services matching the provided regex. Can be specified multitple time
blacklist Does not register services matching the provided regex. Can be specified multitple time
service-name=<name> Service name of the Mesos hosts
service-tags=<tag>,... Comma delimited list of tags to register the Mesos hosts. Mesos hosts will be registered as (leader
task-tag=<pattern:tag> Tag tasks matching pattern with given tag. Can be specified multitple times
zk* Location of the Mesos path in Zookeeper. The default value is zk://127.0.0.1:2181/mesos
group-separator Choose the group separator. Will replace _ in task names (default is empty)

Consul Registration

Leader, Master and Follower Nodes

Role Registration
Leader leader.mesos.service.consul, master.mesos.service.consul
Master master.mesos.service.consul
Follower follower.mesos.service.consul

Mesos Tasks

Tasks are registered as task_name.service.consul

Tags

Tags can be added to consul by using labels in Mesos. If you are using Marathon you can add a label called tags to your service definition with a comma-separated list of strings that will be registered in consul as tags.

For example, in your marathon service definition:

{
  "id": "tagging-test",
  "container": { /*...*/},
  "labels": {
    "tags": "label1,label2,label3"
  }
}

This will result in a service tagging-test being created in consul with 3 separate tags: label1 label2 and label3

// GET /v1/catalog/service/tagging-test
[
  {
    Node: "consul",
    Address: "10.0.2.15",
    ServiceID: "mesos-consul:10.0.2.15:tagging-test:31562",
    ServiceName: "tagging-test5",
    ServiceTags: [
      "label1",
      "label2",
      "label3"
    ],
    ServiceAddress: "10.0.2.15",
    ServicePort: 31562
  }
]

Todo

  • Use task labels for metadata
  • Support for multiple port tasks

mesos-consul's People

Contributors

chrisaubuchon avatar atongen avatar jnonon avatar bryanstephens avatar kamaradclimber avatar rncry avatar ryane avatar stevendborrelli avatar brianhicks avatar manriquecms avatar dylanmei avatar corebug avatar barthoda avatar naemono avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.