This repository has been archived by the owner. It is now read-only.
Kelda is an approachable way to deploy to the cloud.
Clone or download
Permalink
Failed to load latest commit information.
api foreman: Write machine role directly to database Mar 17, 2018
blueprint kelda: Replace scheduler with Kubernetes Mar 12, 2018
cli cli: Add command for provider configuration Mar 27, 2018
cloud google: Upgrade Ubuntu to latest version Mar 26, 2018
connection connection: Improve error message when unix socket already exists Mar 15, 2018
counter kelda: Move from github.com/quilt/quilt to github.com/kelda/kelda Oct 13, 2017
db foreman: Write machine role directly to database Mar 17, 2018
docs docs: Add documentation for base-infrastructure and configure-provider Mar 27, 2018
examples docs: Remove references to deprecated functions Feb 20, 2018
integration-tester ci: Log GET failure timestamp Mar 20, 2018
join join: Reorder imports to be consistent with goimports Oct 14, 2017
js js/install: Fix path of the base infrastructure script Mar 28, 2018
minion network: Replace custom OpenFlow with localport OVN configuration Apr 3, 2018
ovs google: Upgrade Ubuntu to latest version Mar 26, 2018
scripts format: Don't check line length for go:generate lines Mar 12, 2018
util util: Modify JoinNotifiers to take any number of notifiers Feb 3, 2018
vendor vendor: Remove unused dependencies Mar 12, 2018
version kelda: Replace scheduler with Kubernetes Mar 12, 2018
.codecov.yaml integration-tester: Improve docs on priority Sep 22, 2017
.eslintignore js: Add linting for examples files Sep 10, 2017
.eslintrc.json lint: Change .eslintrc.json to allow `continue` Nov 9, 2017
.gitignore gitignore: Include coverage.lcov Nov 10, 2017
.travis.yml travis: Don't provide email when logging into DockerHub Dec 12, 2017
CHANGELOG.md network: Replace custom OpenFlow with localport OVN configuration Apr 3, 2018
Dockerfile kelda: Replace scheduler with Kubernetes Mar 12, 2018
LICENSE.md kelda: Update the last few stragglers to the new name Oct 18, 2017
Makefile cli: Add command for provider configuration Mar 27, 2018
README.md readme: Deprecate the project Apr 27, 2018
kelda.go kelda: Replace scheduler with Kubernetes Mar 12, 2018
package.json cli: Add command for provider configuration Mar 27, 2018

README.md

Deprecation Notice

This project is no longer being maintained by the Kelda team. To get updated when our next project is ready, sign up for our mailing list!

Build Status Go Report Card Code Coverage

Kelda

A straightforward way to configure containerized applications.

What is Kelda?

Kelda is a simple way to configure, run, and manage containerized applications in the cloud.

No more YAML, templating, complicated CLIs, and new domain specific languages. Kelda’s intuitive JavaScript API makes it easy to describe what you want to run in the cloud — that is, the virtual machines, containers, network policies, and more.

Using Kelda's CLI, simply pass your high-level blueprint to Kelda’s Kubernetes-based deployment platform. We'll take care of the nitty gritty details needed to get your system up and running in your cloud of choice.

Install

Install Kelda with npm:

$ npm install -g @kelda/install

Check out more in our Quick Start tutorial.

Deploy Quickly On...

providers

How Do I Use It?

  1. Describe your application using Kelda's JavaScript API (or use a pre-made blueprint).

    const kelda = require('kelda');
    
    // A Docker container running your application.
    const app = new kelda.Container({
      name: 'my-app',
      image: 'myDockerImage',
    });
    
    // Expose the application to the public internet on port 80.
    kelda.allowTraffic(kelda.publicInternet, app, 80);
  2. Describe where to run the application.

    // A virtual machine with 8 GiB RAM and 2 CPUs on Amazon EC2.
    const virtualMachine = new kelda.Machine({
      provider: 'Amazon', // 'Google', 'DigitalOcean'.
      ram: 8,
      cpu: 2,
    });
    
    // An infrastructure with one Kelda Master machine and 6 Worker machines -- all in EC2.
    const infrastructure = new kelda.Infrastructure({
      masters: virtualMachine,
      workers: virtualMachine.replicate(6),
    });
    
    // Deploy the app to the infrastructure.
    app.deploy(infrastructure);
  3. Boot the application to your preferred cloud using Kelda's CLI.

    $ kelda run ./myBlueprint.js
    Your blueprint is being deployed. Check its status with `kelda show`.
  4. Manage your deployment from the command line.

    Keep track of virtual machines and containers.

    $ kelda show
    MACHINE         ROLE      PROVIDER    REGION       SIZE         PUBLIC IP         STATUS
    i-0d1d363a57    Master    Amazon      us-west-1    m3.medium    54.149.85.24      connected
    i-0b6ef239c7    Worker    Amazon      us-west-1    m3.medium    54.218.19.34      connected
    ...
    
    CONTAINER       MACHINE         COMMAND          HOSTNAME    STATUS     CREATED           PUBLIC IP
    bce2362f3a1f    i-0b6ef239c7                     my-app      running    20 seconds ago    54.218.19.34:80
    ...

    SSH into containers and machines (here, the my-app container).

    $ kelda ssh my-app

    Stop the deployment.

    $ kelda stop

    And more...

Learn more in our Quick Start tutorial.

API

Here are a some of the cool things you can do with Kelda's API.

Share and Reuse Configuration

Don't waste time combing through reams of application specific documentation. Share and reuse configuration like you do with other software libraries.

const Redis = require('@kelda/redis');
const redisDB = new Redis(3, 'ADMIN_PASSWORD'); // A Redis database with 3 workers.

Configure a Secure Network

Only allow the traffic your application needs.

// Let the app send traffic to the Redis database on port 6379.
kelda.allowTraffic(app, redisDB.master, 6379);

Run Containers

Quickly get running in the cloud.

const otherApp = new kelda.Container({
  name: 'my-other-app',
  image: 'myOtherImage',
});

Keep Sensitive Data Safe

We keep your keys, certificates, and passwords encrypted and in the right hands.

otherApp.env['GITHUB_OATH_TOKEN'] = new kelda.Secret('githubOathToken');

Deploy Anywhere

Kelda's API is cloud agnostic, so you, your users, and colleagues can run the same blueprint in any of Kelda's supported clouds.

const machine = new kelda.Machine({
  provider: 'Google', // 'Amazon', 'DigitalOcean'.
  size: 'n1-standard-2', // 'm3.medium', '1gb'.
});

See the full API reference in our docs.

Reference Blueprints

Kelda blueprints have been written for many popular applications. Here are some that we recommend checking out:

  • Apache Spark. Deploy a multi-node Spark cluster for data processing.
  • HAProxy. Load balance traffic across different applications.
  • Kibana. Vizualize data from a hosted Elasticsearch instance.

Get Involved

We would love to work with you, get your feedback, or answer any questions you have!