DCOS : Deploy a Load Balanced App using Marathon-lb

In this blog, we are going to deploy a sample load balanced app over DCOS and expose it to the outside of the cluster using Marathon-lb. Here we will be using a containerized application which serves a DCOS site.

Here we are using Marathon-lb as an external load balancer. It is based on HAProxy which provides proxying and load balancing for TCP and HTTP based applications.


  1. You should have access to a running DCOS cluster.
  2. You should have at least one public and one private agent.

Now we will follow several steps to make our app running and accessible from outside of the cluster.


  1. Install DCOS CLI on the local machine.

curl -O https://downloads.dcos.io/binaries/cli/linux/x86-64/dcos-1.10/dcos
sudo mv dcos /usr/local/bin
chmod +x /usr/local/bin/dcos
dcos cluster setup address_of_master_node

Note: You can leave this step if you have already installed DCOS CLI and It is pointing to running DCOS cluster.

2. Install Marathon-lb using DCOS CLI. Marathon-lb by defaults runs on public agents.

dcos package install marathon-lb

3. Create Marathon JSON for your application.

"id": "sample-dcos-website",
"container": {
"type": "DOCKER",
"portMappings": [
{ "hostPort": 0, "containerPort": 80, "servicePort": 10004 }
"docker": {
"image": "mesosphere/dcos-website:cff383e4f5a51bf04e2d0177c5023e7cebcab3cc"
"instances": 2,
"cpus": 0.25,
"mem": 100,
"networks": [ { "mode": "container/bridge" } ],
"healthChecks": [{
"protocol": "HTTP",
"path": "/",
"portIndex": 0,
"timeoutSeconds": 2,
"gracePeriodSeconds": 15,
"intervalSeconds": 3,
"maxConsecutiveFailures": 2
"HAPROXY_0_VHOST": "Public-Node-IP"

Note: Set the value of HAPROXY_0_VHOST to IP address of the public node.

4. Run your application using this command with DCOS CLI.

dcos marathon app add path_to_above_json_file

Note: It will take one or two minutes to deploy your application over DCOS.

5. Now go to DCOS UI and you can see 2 instances of your service running there.

Screenshot from 2018-04-13 12-48-17

6. Now you can go to the browser and check the service running there.


Note– Here Public_Node_IP is the address of the public node where Marathon-lb is running and Port is the servicePort defined in Marathon JSON above which is 10004 in our case.



  1. Mesosphere


This entry was posted in Devops, Scala and tagged , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s