{"id":13416170,"url":"https://github.com/spotify/helios","last_synced_at":"2025-12-30T03:38:15.876Z","repository":{"id":17399126,"uuid":"20171642","full_name":"spotify/helios","owner":"spotify","description":"Docker container orchestration platform","archived":true,"fork":false,"pushed_at":"2024-09-12T12:43:28.000Z","size":7755,"stargazers_count":2106,"open_issues_count":17,"forks_count":233,"subscribers_count":85,"default_branch":"master","last_synced_at":"2025-01-16T04:11:04.347Z","etag":null,"topics":["container","docker","helios","java","orchestration"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spotify.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2014-05-26T02:29:06.000Z","updated_at":"2025-01-02T01:09:24.000Z","dependencies_parsed_at":"2022-08-30T17:42:01.046Z","dependency_job_id":null,"html_url":"https://github.com/spotify/helios","commit_stats":null,"previous_names":[],"tags_count":462,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spotify%2Fhelios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spotify%2Fhelios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spotify%2Fhelios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spotify%2Fhelios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spotify","download_url":"https://codeload.github.com/spotify/helios/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234555955,"owners_count":18851879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","docker","helios","java","orchestration"],"created_at":"2024-07-30T21:00:54.958Z","updated_at":"2025-09-28T19:32:05.595Z","avatar_url":"https://github.com/spotify.png","language":"Java","readme":"Helios [![Circle CI](https://circleci.com/gh/spotify/helios/tree/master.png?style=badge)](https://circleci.com/gh/spotify/helios/tree/master) [![Slack Status](http://slackin.spotify.com/badge.svg)](http://slackin.spotify.com) [ ![Download](https://api.bintray.com/packages/spotify/deb/helios/images/download.svg) ](https://bintray.com/spotify/deb/helios/_latestVersion)\n======\n\n## Status: Sunset\n\nThis project was created when there were no open source container orchestration frameworks.\nSince the advent of Kubernetes and other tools, we've stopped using helios at Spotify\nand have now switched to other tools like Kubernetes. This project will no longer accept PRs.\n\nHelios is a Docker orchestration platform for deploying and managing\ncontainers across an entire fleet of servers. Helios provides a HTTP\nAPI as well as a command-line client to interact with servers running\nyour containers. It also keeps a history of events in your cluster including\ninformation such as deploys, restarts and version changes.\n\n\nUsage Example\n-------------\n\n```sh\n# Create an nginx job using the nginx container image, exposing it on the host on port 8080\n$ helios create nginx:v1 nginx:1.7.1 -p http=80:8080\n\n# Check that the job is listed\n$ helios jobs\n\n# List helios hosts\n$ helios hosts\n\n# Deploy the nginx job on one of the hosts\n$ helios deploy nginx:v1 \u003chost\u003e\n\n# Check the job status\n$ helios status\n\n# Curl the nginx container when it's started running\n$ curl \u003chost\u003e:8080\n\n# Undeploy the nginx job\n$ helios undeploy -a nginx:v1\n\n# Remove the nginx job\n$ helios remove nginx:v1\n```\n\nGetting Started\n---------------\n\nIf you're looking for how to use Helios, see the [docs directory](docs).\nMost probably the [User Manual](docs/user_manual.md) is what you're looking for.\n\nIf you're looking for how to download, build, install and run Helios, keep reading.\n\nPrerequisites\n--------------\n\nThe binary release of Helios is built for Ubuntu 14.04.1 LTS, but Helios should\nbe buildable on any platform with at least Java 8 and a recent Maven 3\navailable.\n\nOther components that are required for a helios installation are:\n\n* [Docker 1.0](https://github.com/docker/docker) or newer\n* [Zookeeper 3.4.0](https://zookeeper.apache.org/) or newer\n\n\nInstall \u0026 Run\n-------------\n\n### Quick start for local usage\nUse [helios-solo](https://github.com/spotify/helios/blob/master/docs/helios_solo.md)\nto launch a local environment with a Helios master and agent.\n\nFirst, ensure you have [Docker installed locally](http://docs.docker.com/engine/installation/).\nTest this by making sure `docker info` works. Then install helios-solo:\n\n```bash\n# add the helios apt repository\n$ sudo apt-key adv --keyserver hkp://keys.gnupg.net:80 --recv-keys 6F75C6183FF5E93D\n$ echo \"deb https://dl.bintray.com/spotify/deb trusty main\" | sudo tee -a /etc/apt/sources.list.d/helios.list\n\n# install helios-solo on Debian/Ubuntu\n$ sudo apt-get update \u0026\u0026 sudo apt-get install helios-solo\n\n# install helios-solo on OS X\n$ brew tap spotify/public \u0026\u0026 brew install helios-solo\n```\n\nOnce you've got it installed, bring up the helios-solo cluster:\n\n```bash\n# launch a helios cluster in a Docker container\n$ helios-up\n\n# check if it worked and the solo agent is registered\n$ helios-solo hosts\n```\n\nYou can now [use helios-solo](https://github.com/spotify/helios/blob/master/docs/helios_solo.md#usage)\nas your local Helios cluster. If you have issues, see [the detailed helios-solo documentation](https://github.com/spotify/helios/blob/master/docs/helios_solo.md).\n\n### Production on Debian, Ubuntu, etc.\n\nPrebuilt Debian packages are available for production use. To install:\n\n```bash\n# add the helios apt repository\n$ sudo apt-key adv --keyserver hkp://keys.gnupg.net:80 --recv-keys 6F75C6183FF5E93D\n$ echo \"deb https://dl.bintray.com/spotify/deb trusty main\" | sudo tee -a /etc/apt/sources.list.d/helios.list\n\n# install Helios command-line tools\n$ sudo apt-get install helios\n\n# install Helios master (assumes you have zookeeperd installed)\n$ sudo apt-get install helios-master\n\n# install Helios agent (assumes you have Docker installed)\n$ sudo apt-get install helios-agent\n```\n\nNote that the Helios master and agent services both try to connect to ZooKeeper at `localhost:2181`\nby default. We recommend reading [the Helios configuration \u0026 deployment guide](https://github.com/spotify/helios/blob/master/docs/how_to_deploy.md)\nbefore starting a production cluster.\n\n### Manual approach\n\nThe launcher scripts are in [bin/](bin). After you've built Helios following the\ninstructions below, you should be able to start the agent and master:\n\n    $ bin/helios-master \u0026\n    $ bin/helios-agent \u0026\n\nIf you see any issues, make sure you have the prerequisites (Docker and Zookeeper) installed.\n\nBuild \u0026 Test\n------------\n\nFirst, make sure you have Docker installed locally. If you're using OS X, we\nrecommend using [docker-machine](https://docs.docker.com/machine/).\n\nActually building Helios and running its tests should be a simple matter\nof running:\n\n    $ mvn clean package\n\nFor more info on setting up a development environment and an introduction to\nthe source code, see the [Developer Guide](docs/developer_guide.md).\n\nHow it all fits together\n------------------------\n\nThe `helios` command line tool connects to your helios master via HTTP. The\nHelios master is connected to a Zookeeper cluster that is used both as\npersistent storage and as a communications channel to the agents. The\nhelios agent is a java process that typically lives on the same host as\nthe Docker daemon, connecting to it via a Unix socket or optionally TCP\nsocket.\n\nHelios is designed for high availability, with execution state being confined\nto a potentially highly available Zookeeper cluster. This means that several\nhelios-master services can respond to HTTP requests concurrently, removing\nany single point of failure in the helios setup using straight forward HTTP\nload balancing strategies.\n\n\nProduction Readiness\n--------------------\nWe at Spotify are running Helios in production (as of October 2015) with dozens\nof critical backend services, so we trust it.  Whether you should trust it to\nnot cause smoking holes in your infrastructure is up to you.\n\n\nWhy Helios?\n-----------\n\nThere are a number of Docker orchestration systems, why should you\nchoose Helios?\n\n* Helios is pragmatic.  We're not trying to solve everything *today*,\n  but what we have, we try hard to ensure is rock-solid.  So we don't\n  have things like resource limits or dynamic scheduling yet.  Today,\n  for us, it has been more important to get the CI/CD use cases, and\n  surrounding tooling solid first.  That said, we eventually want to\n  do dynamic scheduling, composite jobs, etc. (see below for more).\n  But what we provide, we use (i.e. we eat our own dogfood), so you\n  can have reasonable assurances that anything that's been in the\n  codebase for more than a week or two is pretty solid as we release\n  frequently (usually, at least weekly) into production here at\n  Spotify.\n\n* Helios should be able to fit in the way you already do ops.  Of the\n  popular Docker orchestration frameworks, Helios is the only one\n  we're aware of that doesn't have anything much in the way of system\n  dependencies.  That is, we don't require that you run in AWS or GCE,\n  etc.  We don't require a specific network topology.  We don't\n  require you run a specific operating system.  We don't require that\n  you're using Mesos.  Our only requirement is that you have a\n  ZooKeeper cluster somewhere and a JVM on the machines which\n  Helios runs on.  So if you're using Puppet, Chef, etc., to manage the\n  rest of the OS install and configuration, you can still continue to\n  do so with whatever Linux OS you're using.\n\n* Don't have to drink *all* the Kool-Aid.  Generally, we try to make\n  it so you only have to take the features you want to use, and should\n  be able to ignore the rest.  For example, Helios doesn't prescribe a\n  discovery service: we happen to provide a plugin for SkyDNS, and we\n  hear that someone else is working on one for another service, but if\n  you don't want to even use a discovery service, you don't have to.\n\n* Scalability.  We're already at hundreds of machines in\n  production, but we're nowhere near the limit before the existing\n  architecture would need to be revisited.  Helios can also scale down\n  well in that you can run a single machine instance if you want to\n  run it all locally.\n\nOther Software You Might Want To Consider\n-----------------------------------------\nHere are a few other things you probably want to consider using alongside\nHelios:\n* [docker-gc](https://github.com/spotify/docker-gc) Garbage collects dead containers and removes unused images.\n* [helios-skydns](https://github.com/spotify/helios-skydns) Makes it so you can auto register services in SkyDNS.  If you use leading underscores in your SRV record names, let us know, we have a patch for etcd which disables the \"hidden\" node feature which makes this use case break.\n* [skygc](https://github.com/spotify/skygc)  When using SkyDNS, especially if you're using the Helios Testing Framework, can leave garbage in the skydns tree within etcd.  This will clean out dead stuff.\n* [docker-maven-plugin](https://github.com/spotify/docker-maven-plugin)  Simplifies the building of Docker containers if you're using Maven (and most likely Java).\n\nFindbugs\n--------\n\nTo run [findbugs](http://findbugs.sourceforge.net) on the helios codebase, do\n`mvn clean compile site`. This will build helios and then run an analysis,\nemitting reports in `helios-*/target/site/findbugs.html`.\n\nTo silence an irrelevant warning, add a filter match along with a justification\nin `findbugs-exclude.xml`.\n\nThe Nickel Tour\n---------------\n\nThe sources for the Helios master and agent are under [helios-services](helios-services).\nThe CLI source is under [helios-tools](helios-tools).\nThe Helios Java client is under [helios-client](helios-client).\n\nThe main meat of the Helios agent is in [Supervisor.java](helios-services/src/main/java/com/spotify/helios/agent/Supervisor.java),\nwhich revolves around the lifecycle of managing individual running Docker containers.\n\nFor the master, the HTTP response handlers are in [src/main/java/com/spotify/helios/master/resources](helios-services/src/main/java/com/spotify/helios/master/resources).\n\nInteractions with ZooKeeper for the agent and master are mainly in [ZookeeperAgentModel.java](helios-services/src/main/java/com/spotify/helios/agent/ZooKeeperAgentModel.java)\nand [ZooKeeperMasterModel.java](helios-services/src/main/java/com/spotify/helios/master/ZooKeeperMasterModel.java),\nrespectively.\n\nThe Helios services use [Dropwizard](http://www.dropwizard.io/0.7.1/docs/) which is a\nbundle of Jetty, Jersey, Jackson, Yammer Metrics, Guava, Logback and\nother Java libraries.\n\n\nCommunity Ideas\n---------------\n\nThese are things we want, but haven't gotten to.  If you feel\ninspired, we'd love to talk to you about these (in no particular\norder):\n\n* Host groups\n* ACLs - on jobs, hosts, and deployments\n* Composite jobs -- be able to deploy related containers as a unit on a machine\n* Run once jobs -- for batch jobs\n* Resource specification and enforcement -- That is: restrict my container to *X* MB of RAM, *X* CPUs, and *X* MB disk and perhaps other things like IOPs, network bandwidth, etc.\n* Dynamic scheduling of jobs -- either within Helios itself or as a layer on top\n* Packaging/Config for other Linux distributions such as RedHat, CoreOS, etc.\n","funding_links":[],"categories":["Container Operations","Java","[Java](#java)","Orchestration","orchestration","容器化工具","V. Tools for developing"],"sub_categories":["Orchestration","2. Deploy, config and build"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspotify%2Fhelios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspotify%2Fhelios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspotify%2Fhelios/lists"}