Code Monkey home page Code Monkey logo

armada's Introduction

Armada

Armada

CircleCI Go Report Card

Armada is an experimental application to achieve high throughput of run-to-completion jobs on multiple Kubernetes clusters.

It stores queues for users/projects with pod specifications and creates these pods once there is available resource in one of the connected Kubernetes clusters.

Documentation

Key features

  • Armada maintains fair resource share over time (inspired by HTCondor priority)
  • It can handle large amounts of queued jobs (million+)
  • It allows adding and removing clusters from the system without disruption
  • By utilizing multiple Kubernetes clusters the system can scale beyond the limits of a single Kubernetes cluster

Key concepts

Queue: Represent user or project, used to maintain fair share over time, has priority factor

Job: Unit of work to be run (described as Kubernetes PodSpec)

Job Set: Group of related jobs, api allows observing progress of job set together

Try it out locally

Prerequisites:

  • Git
  • Go 1.12+
  • Docker installed. Ensure the current user has permission to run the docker command without sudo.
  • 3GB Disk space
  1. Clone repository & build
git clone https://github.com/G-Research/armada.git
cd armada
make build
  1. Get Kind (Installation help here)

Kind is Kubernetes in Docker. It allows us to easily run a local Kubernetes cluster using Docker.

GO111MODULE="on" go get sigs.k8s.io/[email protected]
  1. Create 2 Kind clusters

As this step is using Docker, it will require root to run

kind create cluster --name demoA --config ./example/kind-config.yaml
kind create cluster --name demoB --config ./example/kind-config.yaml 
  1. Start Redis
docker run -d -p 6379:6379 redis
  1. Start server in one terminal
./bin/server
  1. Start executor for demoA cluster in a new terminal
KUBECONFIG=$(kind get kubeconfig-path --name="demoA") ARMADA_APPLICATION_CLUSTERID=demoA ARMADA_METRICSPORT=9001 ./bin/executor
  1. Start executor for demoB cluster in a new terminal
KUBECONFIG=$(kind get kubeconfig-path --name="demoB") ARMADA_APPLICATION_CLUSTERID=demoB ARMADA_METRICSPORT=9002 ./bin/executor
  1. Create queue, submit jobs and watch progress
./bin/armadactl create-queue test --priorityFactor 1
./bin/armadactl submit ./example/jobs.yaml
./bin/armadactl watch job-set-1

armada's People

Contributors

gconway-gr avatar jamesmurkin avatar jankaspar avatar jimbobby5 avatar samclark avatar

Watchers

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