fleet ties together systemd and etcd into a distributed init system
Go Shell Other
Permalink
Failed to load latest commit information.
Documentation docs: reword deprecation notice Feb 7, 2017
agent Merge pull request #1695 from endocode/dongsu/agent-conflict-multi-units Dec 15, 2016
api api: get Value embedded as members in struct Nov 11, 2016
client Import implementation for dynamic metadata Nov 10, 2016
config added capabilities Aug 1, 2016
debug *: add license headers for gRPC source files Aug 12, 2016
engine engine: fix a bug in engine being unreachable Dec 2, 2016
examples *: drop remaining X-[Condition] references Sep 5, 2014
fixtures fix(ssh): fix tests, further cleanup for simplification May 9, 2014
fleetctl fleetctl: introduce a unit test for restart Dec 14, 2016
fleetd fleetd,main: make github.com/coreos/fleet go-getable Sep 13, 2016
functional Merge pull request #1624 from endocode/dongsu/fleetctl-restart-global… Dec 16, 2016
heart *: update license headers Jul 18, 2016
job agent,job: add new test cases for multiple Conflicts values Nov 7, 2016
log *: update license headers Jul 18, 2016
machine *: add license headers for gRPC source files Aug 12, 2016
metrics *: update license headers Jul 18, 2016
pkg *: replace err.Error() with err Aug 24, 2016
protobuf protobuf: upgrade gogo/protobuf to 8d70fb31 (2016-11-05) Dec 2, 2016
registry registry/rpc: update Balancer.Start() according to gRPC 1.0.2 Dec 2, 2016
resource *: update license headers Jul 18, 2016
schema schema: regenerate v1-gen.go Dec 2, 2016
scripts scripts: add fleet-wrapper Dec 23, 2016
server Merge pull request #1717 from improbable-io/forks/v0.13.0 Dec 19, 2016
ssh ssh: fix a bug in dropping privileges on Linux Oct 22, 2016
systemd fleetd: process dependencies in [Install] section Nov 2, 2016
unit *: add license headers for gRPC source files Aug 12, 2016
vendor vendor: update vendors as of 2016-11-25 Dec 2, 2016
version Spell checking and made all the linters happy Aug 1, 2016
.gitignore chore(tests): git ignore coverage output May 2, 2014
.travis.yml travis: use the latest version of each stable golang tree Nov 25, 2016
CONTRIBUTING.md *: add maintenance warnings Dec 22, 2016
DCO docs(contributing): merge changes from template and split out DCO Apr 4, 2014
Dockerfile scripts: add scripts for building Docker images Nov 21, 2016
LICENSE chore(project): Beef up README; pull in template-project Feb 5, 2014
MAINTAINERS *: add maintenance warnings Dec 22, 2016
NOTICE *: update license headers Jul 18, 2016
README.md README: add link to moving from fleet to kubernetes blog post Feb 15, 2017
build build: change path to fleetd into the top source directory Sep 13, 2016
build-docker build: secured CDIR variable, now should work with spaces in path Jul 18, 2016
build-env functional: run tests with enable_grpc turned both on and off Aug 9, 2016
cover chore(tests): git ignore coverage output May 2, 2014
fleet.conf.sample config: add etcd authentication Jul 13, 2016
glide.lock vendor: update vendors as of 2016-11-25 Dec 2, 2016
glide.yaml vendor: update vendors as of 2016-11-25 Dec 2, 2016
main.go fleetd,main: make github.com/coreos/fleet go-getable Sep 13, 2016
test test: exclude ./gopath also from the list for checking license headers Aug 16, 2016
test-docker build: secured CDIR variable, now should work with spaces in path Jul 18, 2016
vendor.manifest fleetd: implemented GetUnitsByNames dbus method Jun 7, 2016

README.md

WARNINGWARNINGWARNING Deprecation warning WARNINGWARNINGWARNING

fleet is no longer developed or maintained by CoreOS. After February 1, 2018, a fleet container image will continue to be available from the CoreOS Quay registry, but will not be shipped as part of Container Linux. CoreOS instead recommends Kubernetes for all clustering needs.

The project exists here for historical reference. If you are interested in the future of the project and taking over stewardship, please contact fleet@coreos.com

fleet - a distributed init system

Build Status 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 quite low-level, and is designed as a foundation for higher order orchestration. fleet is a cluster-wide elaboration on systemd units, and is not a container manager or orchestration system. fleet supports basic scheduling of systemd units across nodes in a cluster. Those looking for more complex scheduling requirements or a first-class container orchestration system should check out Kubernetes. The fleet and kubernetes comparison table has more information about the two systems.

Current status

The fleet project is no longer maintained.

As of v1.0.0, fleet has seen production use for some time and is largely considered stable. However, there are various known and unresolved issues, including scalability limitations with its architecture. As such, it is not recommended to run fleet clusters larger than 100 nodes or with more than 1000 services.

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.../172.17.8.103

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
UNIT            HASH     DSTATE    STATE     TMACHINE
hello.service   e55c0ae  launched  launched  113f16a7.../172.17.8.103

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

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

Supported Deployment Patterns

fleet is not intended to be an all-purpose orchestration system, and as such supports only a few simple 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.

Building

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

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

Project Details

API

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.

License

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.