Quick Start | FAQ | Javadocs | Contributing | Slack
========= DC/OS SDK is a collection of tools, libraries, and documentation for easy integration and automation of stateful services, such as databases, message brokers, and caching services.
DC/OS SDK is currently in alpha stage: it can run services, but APIs change regularly, and features are under active development.
-
Simple and Flexible: The SDK provides the simplicity of a declarative YAML API as well as the flexibility to use the full Java programming language.
-
Automate Maintenance: Stateful services need to be maintained. With the SDK, you can automate maintenance routines, such as backup and restore, to simplify operations.
-
Available and Durable: When servers fail, you need to reschedule the tasks without data loss or performance impact. With the SDK, you develop automated recovery strategies so services heal themselves.
-
Production-Proven: Building reliable services is hard. Uber and Bing platform teams use the SDK for mission-critical databases and message brokers.
===============
From a workstation with 8G Memory, Git, VirtualBox 5.0.x, and Vagrant 1.8.4, run:
- Download the DC/OS SDK.
git clone https://github.com/mesosphere/dcos-commons.git
- Create your local development environment.
cd dcos-commons/ && ./get-dcos-docker.sh
- Visit the DC/OS cluster dashboard to verify your development environment is running.
- Enter your development environment.
cd tools/vagrant/ && vagrant ssh
- Build your hello-world example project.
cd /dcos-commons/frameworks/helloworld/ && ./build.sh local
- Start your hello-world DC/OS service.
dcos package install hello-world
- Explore your hello-world service.
- Visit the dashboard to see your hello-world service running.
- Click through to one of your tasks (e.g.
world-server-1-<uuid>
), select the Files tab, select world-container-path, and finally select the output file.
===============
The service specification declaratively defines the helloworld
service:
name: "helloworld"
pods:
helloworld:
count: {{COUNT}}
tasks:
server:
goal: RUNNING
cmd: "echo 'Hello World!' >> helloworld-container-volume/output && sleep 10"
cpus: {{SERVER_CPU}}
memory: 32
volume:
path: "helloworld-container-volume"
type: ROOT
size: 64
In above yaml file, we have:
- Defined a service with the name
helloworld
- Configured the service to use ZooKeeper at
master.mesos:2181
for storing framework state and configuration. - Configured the API port using
api-port: 8080
. By default, each service comes with a default set of useful APIs to enable operationalization. - Defined a pod specification for our
helloworld
pod using:
pods:
helloworld:
count: {{COUNT}}
tasks:
...
- Declared that we need atleast
{{COUNT}}
instances of thehelloworld
pod running at all times, whereCOUNT
is the environment variable that is injected into the scheduler process at launch time via Marathon. It defaults to1
for this example. - Defined a task specification for our
server
task using:
tasks:
server:
goal: RUNNING
cmd: "echo 'Hello World!' >> helloworld-container-volume/output && sleep 10"
cpus: {{SERVER_CPU}}
memory: 32
We have configured it to use {{SERVER_CPU}}
CPUs (which defaults to 0.5
for this example) and 32 MB
of memory.
- And finally, configured a
64 MB
persistent volume for our server task where the task data can be persisted using:
volume:
path: "helloworld-container-volume"
type: ROOT
size: 64
===============
===============
Contributions are welcome! See CONTRIBUTING.
===============
DC/OS SDK is licensed under the Apache License, Version 2.0.