Quick Start | Developer Guide | 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.
-
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: 64In above yaml file, we have:
- Defined a service with the name
helloworld - Configured the service to use ZooKeeper at
master.mesos:2181for 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
helloworldpod using:
pods:
helloworld:
count: {{COUNT}}
tasks:
...- Declared that we need atleast
{{COUNT}}instances of thehelloworldpod running at all times, whereCOUNTis the environment variable that is injected into the scheduler process at launch time via Marathon. It defaults to1for this example. - Defined a task specification for our
servertask using:
tasks:
server:
goal: RUNNING
cmd: "echo 'Hello World!' >> helloworld-container-volume/output && sleep 10"
cpus: {{SERVER_CPU}}
memory: 32We 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 MBpersistent 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.
