/dcos-commons

Primary LanguageJavaApache License 2.0Apache-2.0

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.

Status

DC/OS SDK is currently in alpha stage: it can run services, but APIs change regularly, and features are under active development.

Benefits

  • 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.

===============

Quick Start

From a workstation with 8G Memory, Git, VirtualBox 5.0.x, and Vagrant 1.8.4, run:

  1. Download the DC/OS SDK.
git clone https://github.com/mesosphere/dcos-commons.git
  1. 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.
  1. Enter your development environment.
cd tools/vagrant/ && vagrant ssh
  1. Build your hello-world example project.
cd /dcos-commons/frameworks/helloworld/ && ./build.sh local
  1. Start your hello-world DC/OS service.
dcos package install hello-world
  1. 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.

===============

Understanding the Hello World Service Specification

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 the helloworld pod running at all times, where COUNT is the environment variable that is injected into the scheduler process at launch time via Marathon. It defaults to 1 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

===============

References

===============

Contributions

Contributions are welcome! See CONTRIBUTING.

===============

License

DC/OS SDK is licensed under the Apache License, Version 2.0.