Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A Distributed init System
Go Shell
Failed to load latest commit information.
Documentation Added unit info for reconcile interval
Godeps Godeps: bump etcd deps
agent agent: do not call wg.Done before wg.Add
api api: prevent templates from being activated
client *: change license header to line comments
config *: change license header to line comments
engine registry: Move lease implementation into separate package
examples *: drop remaining X-[Condition] references
fixtures fix(ssh): fix tests, further cleanup for simplification
fleetctl fleetctl: Give DEBUG print if need wait for launch when start unit
fleetd fleetd: move stringSlice into pkg
functional functional/platform: remove --experimental-api
heart *: change license header to line comments
job *: change license header to line comments
log *: change license header to line comments
machine *: change license header to line comments
pkg pkg: add basic StringSlice test
registry registry: use consistent reads to avoid etcd set/get races
resource *: change license header to line comments
schema *: update google golang api package locations
scripts scripts: add SSH key replacement & removal
server registry: use official etcd lib
ssh *: change license header to line comments
systemd systemd: rely on caller to reload unit files
unit unit: add UnitNameInfo.IsTemplate
version version: bump to v0.11.2+git
.gitignore chore(tests): git ignore coverage output
.travis.yml drop references to go 1.3 and replace them with go 1.4 CONTRIBUTING: update to new commit style
DCO docs(contributing): merge changes from template and split out DCO
LICENSE chore(project): Beef up README; pull in template-project
NOTICE chore(project): Beef up README; pull in template-project readme: fix kubernetes link to use http
build build: add flags for go1.4 static build
build-aci drop references to go 1.3 and replace them with go 1.4
build-docker drop references to go 1.3 and replace them with go 1.4
cover chore(tests): git ignore coverage output
fleet.conf.sample fleetd: default to ports 4001 and 2379 for etcd
test etcd: drop unnecessary etcd client
test-docker drop references to go 1.3 and replace them with go 1.4

fleet - a distributed init system

Build Status

fleet ties together systemd and etcd into a simple distributed init system. Think of it as an extension of systemd that operates at the cluster level instead of the machine level. This project is very low level and is designed as a foundation for higher order orchestration.

fleet is oriented around systemd units and is not a container manager or orchestration system. fleet supports very basic scheduling of systemd units in a cluster. Those looking for more complex scheduling requirements or a first-class container orchestration system should check out Kubernetes.

Using fleet

Launching a unit with fleet is as simple as running fleetctl start:

$ fleetctl start examples/hello.service
Unit hello.service launched on 113f16a7.../

The fleetctl start command waits for the unit to get scheduled and actually start somewhere in the cluster. fleetctl list-unit-files tells you the desired state of your units and where they are currently scheduled:

$ fleetctl list-unit-files
hello.service   e55c0ae  launched  launched  113f16a7.../

fleetctl list-units exposes the systemd state for each unit in your fleet cluster:

$ fleetctl list-units
UNIT            MACHINE                    ACTIVE   SUB
hello.service   113f16a7.../   active   running

Supported Deployment Patterns

  • Deploy a single unit anywhere on the cluster
  • Deploy a unit globally everywhere in the cluster
  • Automatic rescheduling of units on machine failure
  • Ensure that units are deployed together on the same machine
  • Forbid specific units from colocation on the same machine (anti-affinity)
  • Deploy units to machines only with specific metadata

These patterns are all defined using custom systemd unit options.

Getting Started

Before you can deploy units, fleet must be deployed and configured on each host in your cluster. (If you are running CoreOS, fleet is already installed.)

After you have machines configured (check fleetctl list-machines), get to work with the client.


fleet must be built with Go 1.4+ on a Linux machine. Simply run ./build and then copy the binaries out of bin/ onto each of your machines. The tests can similarly be run by simply invoking ./test.

If you're on a machine without Go 1.4+ but you have Docker installed, run ./build-docker to compile the binaries instead.

Project Details


The fleet API uses JSON over HTTP to manage units in a fleet cluster. See the API documentation for more information.

Release Notes

See the releases tab for more information on each release.


See CONTRIBUTING for details on submitting patches and contacting developers via IRC and mailing lists.


fleet is released under the Apache 2.0 license. See the LICENSE file for details.

Specific components of fleet use code derivative from software distributed under other licenses; in those cases the appropriate licenses are stipulated alongside the code.

Something went wrong with that request. Please try again.