Git Product home page Git Product logo

spread's Introduction

logo

Build Status Release Hex.pm GoDoc Status

Website | Slack | Email | Twitter | Facebook

#Docker to Kubernetes in one command

spread is a command line tool that builds and deploys a Docker project to a Kubernetes cluster in one command. The project's goals are to:

  • Enable rapid iteration with Kubernetes
  • Be the fastest, simplest way to deploy Docker to production
  • Work well for a single developer or an entire team (no more broken bash scripts!)

See how we deployed Mattermost (and you can too!):

logo

Spread is under open, active development. New features will be added regularly over the next few months - explore our roadmap to see what will be built next and send us pull requests for any features you’d like to see added.

See our philosophy for more on our mission and values.

##Requirements

##Installation

$ brew tap redspread/spread
$ brew install spread

##Quickstart

This assumes you have a running Kubernetes cluster.

  1. Install Spread with $ brew tap redspread/spread then $ brew install spread
  2. Clone Mattermost, the open source Slack $ git clone http://github.com/redspread/kube-mattermost
  3. Deploy Mattermost to Kubernetes: $ spread deploy .
  4. Grab the public IP and put it in your browser to see your self-hosted app!

For a more detailed walkthrough, see the full guide.

##What's been done so far

  • spread deploy [-s] PATH [kubectl context]: Deploys a Docker project to a Kubernetes cluster. It completes the following order of operations:
    • Reads context of directory and builds Kubernetes deployment hierarchy.
    • Updates all Kubernetes objects on a Kubernetes cluster.
    • Returns a public IP address, if type Load Balancer is specified.
  • Established an implicit hierarchy of Kubernetes objects
  • Multi-container deployment

##What's being worked on now

  • Build functionality for spread deploy so it also builds any images indicated to be built and pushes those images to the indicated Docker registry.
  • spread deploy -p: Pushes all images to registry, even those not built by spread deploy.
  • Support for Linux and Windows
  • Inner-app linking
  • spread logs: Returns logs for any deployment, automatic trying until logs are accessible.
  • spread build: Builds Docker context and pushes to a local Kubernetes cluster.
  • spread rewind: Quickly rollback to a previous deployment.

See more of our roadmap here!

##Future Goals

  • Develop workflow for container versioning (containers = image + config)
  • Introduce paramaterization for container configuration

##FAQ

How are clusters selected? Remote clusters are selected from the current kubectl context. Later, we will add functionality to explicitly state kubectl arguments.

How should I set up my directory? Spread requires a specific project directory structure, as it builds from a hierarchy of entities:

  • Dockerfile
  • *.ctr - optional container file, there can be any number
  • pod.yaml - pod file, there can be only one per directory
  • rc.yaml - replication controller file, there can be only one per directory
  • /.k2e - holds arbitrary Kubernetes objects, such as services and secrets

*What is the .ctr file? The .ctr file is the container struct usually found in the pod.yaml or rc.yaml. Containers can still be placed in pods or replication controllers, but we're encouraging separate container files because it enables users to eventually reuse containers across an application.

*Can I deploy a project with just a Dockerfile and .ctr? Yes. Spread implicitly infers the rest of the app hierarchy.

##Contributing

We'd love to see your contributions - please see the CONTRIBUTING file for guidelines on how to contribute.

##Reporting bugs If you haven't already, it's worth going through Elika Etemad's guide for good bug reporting. In one sentence, good bug reports should be both reproducible and specific.

##Contact Founders: [email protected]
Slack: redspread.slack.com
Planning: Roadmap
Bugs: Issues

##License Spread is under the Apache 2.0 license. See the LICENSE file for details.

spread's People

Contributors

ethernetdan avatar mfburnett avatar kern avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.