Skip to content

Commit 01c4059

Browse files
committed
docs(scheduler): sort sections and update roadmap
1 parent b94c788 commit 01c4059

2 files changed

Lines changed: 95 additions & 87 deletions

File tree

docs/customizing_deis/choosing-a-scheduler.rst

Lines changed: 83 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ The :ref:`scheduler` creates, starts, stops, and destroys each :ref:`container`
1111
of your app. For example, a command such as ``deis scale web=3`` tells the
1212
scheduler to run three containers from the Docker image for your app.
1313

14-
Deis defaults to using the `Fleet Scheduler`_. The Tech previews of the `Swarm Scheduler`_,
15-
`Mesos`_ and `Kubernetes`_ are available for testing. Keep watching `dynamic metadata fleet PR 1077`_
16-
for support of runtime changes to metadata.
14+
Deis defaults to using the :ref:`fleet_scheduler`. Tech previews of schedulers based on
15+
:ref:`Kubernetes <k8s_scheduler>`, :ref:`Mesos with Marathon <mesos_scheduler>`, and
16+
:ref:`Swarm <swarm_scheduler>` are available for testing.
1717

1818
.. note::
1919

20-
If you are using a scheduler other than fleet app containers will not be rescheduled if deis-registry is unavailable.
21-
For more information look at `deis-registry issue 3619`.
20+
If you are using a scheduler other than fleet, app containers will not be rescheduled if
21+
deis-registry is unavailable. For more information, see `deis-registry issue 3619`_.
2222

2323
Settings set by scheduler
2424
-------------------------
@@ -49,6 +49,7 @@ setting description
4949
"mesos_marathon" or "k8s" (default: "fleet")
5050
==================================== ===============================================
5151

52+
.. _fleet_scheduler:
5253

5354
Fleet Scheduler
5455
---------------
@@ -71,74 +72,27 @@ To use the Fleet Scheduler backend explicitly, set the controller's
7172
7273
$ deisctl config controller set schedulerModule=fleet
7374
74-
75-
Swarm Scheduler
76-
---------------
77-
78-
.. important::
79-
80-
The Swarm Scheduler is a technology preview and is not recommended for
81-
production use.
82-
83-
`swarm`_ is a scheduling backend for Docker:
84-
85-
Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts
86-
into a single, virtual host.
87-
88-
..
89-
90-
Swarm serves the standard Docker API, so any tool which already communicates
91-
with a Docker daemon can use Swarm to transparently scale to multiple hosts...
92-
93-
Deis includes an enhanced version of swarm v0.2.0 with node failover and optimized
94-
locking on container creation. The Swarm Scheduler uses a `soft affinity`_ filter
95-
to spread app containers out among available machines.
96-
97-
Swarm requires the Docker Remote API to be available at TCP port 2375. If you are
98-
upgrading an earlier installation of Deis, please refer to the CoreOS documentation
99-
to `enable the remote API`_.
100-
101-
.. note::
102-
103-
**Known Issues**
104-
105-
- It is not yet possible to change the default affinity filter.
106-
107-
To test the Swarm Scheduler backend, first install and start the swarm components:
108-
109-
.. code-block:: console
110-
111-
$ deisctl install swarm && deisctl start swarm
112-
113-
Then set the controller's ``schedulerModule`` to "swarm":
114-
115-
.. code-block:: console
116-
117-
$ deisctl config controller set schedulerModule=swarm
118-
119-
The Swarm Scheduler is now active. Commands such as ``deis destroy`` or
120-
``deis scale web=9`` will use `swarm`_ to manage app containers.
121-
122-
To monitor Swarm Scheduler operations, watch the logs of the swarm-manager
123-
component, or spy on Docker events directly on the swarm-manager machine:
75+
.. _k8s_scheduler:
12476

12577
Kubernetes Scheduler
12678
--------------------
12779

12880
.. important::
12981

130-
The Kubernetes Scheduler is a technology preview and is not recommended for
131-
production use.
82+
The Kubernetes Scheduler is a technology preview and is not recommended for production use.
83+
Since it requires overlay networking, Kubernetes can only be enabled on a new cluster.
13284

133-
`Kubernetes`_ orchestration system for docker containers:
85+
`Kubernetes`_ is an orchestration system for Docker containers:
13486

135-
Kubernetes provides APIs to manage, deploy and scale docker containers. Kubernetes deploys docker containers as `pods`_,
136-
unique entity across a cluster. Containers inside a pod share the same namespaces. More information about `pods`_.
87+
Kubernetes (k8s) provides APIs to manage, deploy and scale Docker containers. Kubernetes
88+
deploys containers as `pods`_, providing a unique entity across a cluster, but allowing
89+
containers within the pod to share a namespace.
13790

138-
Kubernetes requires overlay network so that each pod can get a unique IP across the cluster which is achieved by using `flannel`_.
139-
Deis repository provides a new user-data file to bootstrap CoreOs machines on the cluster with flannel.
91+
Kubernetes requires the `flannel`_ overlay network so each pod receives a unique IP address within
92+
the cluster. Existing Deis clusters cannot simply turn on overlay networking. Instead, provision
93+
a new cluster to enable `flannel`_.
14094

141-
To test the Kubernetes Scheduler, first install and start the kubernetes components:
95+
To test the Kubernetes Scheduler, first install and start the Kubernetes components:
14296

14397
.. code-block:: console
14498
@@ -150,23 +104,26 @@ Then set the controller's ``schedulerModule`` to "k8s":
150104
151105
$ deisctl config controller set schedulerModule=k8s
152106
153-
The Kubernetes scheduler is now active. Commands such as ``deis destroy`` or
154-
``deis scale web=9`` will use kubernetes ApiServer to manage app pods.
107+
The Kubernetes scheduler is now active. Commands such as ``deis destroy`` or ``deis scale web=9``
108+
will use the Kubernetes ApiServer to manage app pods.
155109

156-
Deis creates a `replication controller`_ to manage pods and a `service`_ which acts as a proxy and routes traffic to the pods associated with the App.
157-
A new release uses rolling deploy mechanism where in we create and replace the pod with the new release one by one until all the pods are replaced properly or rollback to the older release
158-
if any error occurs which differs from the existing schedulers where we create all the containers at a time and replace them with the old ones.
110+
Deis creates a `replication controller`_ to manage pods and a `service`_ which proxies traffic to
111+
the pods for your app. Unlike other Deis schedulers, new app releases on Kubernetes do a rolling
112+
deploy: pods with the new release replace old pods one at a time, until all are replaced (or until
113+
an error forces a rollback to the previous release).
159114

160115
.. note::
161116

162117
**Known Issues**
163118

164-
- Kubernetes ApiServer is not HA. If ApiServer is rescheduled it will reschedule all the kubernetes units.
165-
- Kubernetes does resource based scheduling. Specifying limits will create reservation of the specified resource on the node.
166-
- Installing flannel is not backwards compatible as it changes Docker bridge which requires restarting
167-
Docker Engine.
168-
- Docker Engine is started with arguments ``--iptables=false --ip-masq=false`` for the docker not to create IP masquerading rule and use the one created by flannel.
119+
- The flannel overlay network is not backward-compatible with earlier Deis clusters, since it
120+
changes Docker networking and requires new units from Deis' user-data file.
121+
- The Kubernetes ApiServer is not HA. If the ApiServer is rescheduled, it will reschedule all
122+
Kubernetes units.
123+
- Kubernetes implements resource-based scheduling. Specifying limits will create a reservation
124+
of that resource on the node.
169125

126+
.. _mesos_scheduler:
170127

171128
Mesos with Marathon framework
172129
-----------------------------
@@ -188,7 +145,7 @@ Mesos with Marathon framework
188145
service discovery, load balancing and REST API to control your Apps.
189146

190147
Deis uses the Marathon framework to schedule containers. Since Marathon is a framework for long-running
191-
jobs, Deis uses the `Fleet Scheduler`_ to run batch processing jobs. ``deisctl`` installs a standalone Mesos
148+
jobs, Deis uses the :ref:`fleet_scheduler` to run batch processing jobs. ``deisctl`` installs a standalone Mesos
192149
cluster. To install an HA Mesos cluster, follow the directions at `aledbf-mesos`_, and set the etcd key
193150
``/deis/scheduler/mesos/marathon`` to any Marathon node IP address. If a request is received by a regular
194151
Marathon node, it is proxied to the master Marathon node.
@@ -221,6 +178,58 @@ Deis starts Marathon on port 8180. You can manage apps through the Marathon UI,
221178
- Deis does not yet use Marathon's docker container API to create containers.
222179
- CPU shares are integers representing the number of CPUs. Memory limits should be specified in MB.
223180

181+
.. _swarm_scheduler:
182+
183+
Swarm Scheduler
184+
---------------
185+
186+
.. important::
187+
188+
The Swarm Scheduler is a technology preview and is not recommended for
189+
production use.
190+
191+
`swarm`_ is a scheduling backend for Docker:
192+
193+
Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts
194+
into a single, virtual host.
195+
196+
..
197+
198+
Swarm serves the standard Docker API, so any tool which already communicates
199+
with a Docker daemon can use Swarm to transparently scale to multiple hosts...
200+
201+
Deis includes an enhanced version of swarm v0.2.0 with node failover and optimized
202+
locking on container creation. The Swarm Scheduler uses a `soft affinity`_ filter
203+
to spread app containers out among available machines.
204+
205+
Swarm requires the Docker Remote API to be available at TCP port 2375. If you are
206+
upgrading an earlier installation of Deis, please refer to the CoreOS documentation
207+
to `enable the remote API`_.
208+
209+
.. note::
210+
211+
**Known Issues**
212+
213+
- It is not yet possible to change the default affinity filter.
214+
215+
To test the Swarm Scheduler backend, first install and start the swarm components:
216+
217+
.. code-block:: console
218+
219+
$ deisctl install swarm && deisctl start swarm
220+
221+
Then set the controller's ``schedulerModule`` to "swarm":
222+
223+
.. code-block:: console
224+
225+
$ deisctl config controller set schedulerModule=swarm
226+
227+
The Swarm Scheduler is now active. Commands such as ``deis destroy`` or
228+
``deis scale web=9`` will use `swarm`_ to manage app containers.
229+
230+
To monitor Swarm Scheduler operations, watch the logs of the swarm-manager
231+
component, or spy on Docker events directly on the swarm-manager machine:
232+
224233

225234
.. _Kubernetes: http://kubernetes.io/
226235
.. _Mesos: http://mesos.apache.org

docs/roadmap/roadmap.rst

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,29 @@ through the routing mesh.
2424

2525
Scheduling and Orchestration
2626
----------------------------
27-
Today Deis uses `Fleet`_ for scheduling. Unfortunately, Fleet does not support
28-
resource-based scheduling, which results in poor cluster utilization at scale.
27+
Today Deis uses :ref:`Fleet <fleet_scheduler>` for scheduling. Unfortunately, Fleet does not
28+
support resource-based scheduling, which results in poor cluster utilization at scale.
2929

3030
Fortunately, Deis is composable and can easily hot-swap orchestration APIs.
3131
Because the most promising container orchestration solutions are under heavy development,
3232
the Deis project is focused on releasing "technology previews".
3333

34-
These technology previews will help the community try different orchestration solutions easily,
35-
report their findings and help guide the future direction of Deis.
34+
These technology previews help the community try different orchestration solutions easily,
35+
report their findings and guide the future direction of Deis. :ref:`Kubernetes <k8s_scheduler>`,
36+
:ref:`Mesos with Marathon <mesos_scheduler>`, and :ref:`Swarm <swarm_scheduler>` will all be
37+
available for testing in Deis v1.9.
3638

37-
- [X] Swarm preview
38-
- [ ] `Mesos preview`_
39-
- [ ] `Kubernetes preview`_
39+
- [X] :ref:`Swarm preview <swarm_scheduler>`
40+
- [X] :ref:`Mesos preview <mesos_scheduler>`
41+
- [X] :ref:`Kubernetes preview <k8s_scheduler>`
4042

4143
Etcd 2
4244
------
4345
A CP database like etcd is central to Deis, which requires a distributed lock service and key/value store.
4446
As problems with etcd directly impact platform stability, Deis must move to the more stable etcd2.
4547

46-
- [ ] Switch to etcd2
47-
- [ ] Migration strategy for etcd 0.4.x -> etcd2
48+
- [X] Switch to etcd2
49+
- [X] Migration strategy for etcd 0.4.x -> etcd2
4850

4951
This feature is tracked as GitHub issue `#3564`_.
5052

@@ -106,7 +108,7 @@ Networking v2
106108
To provide a better container networking experience, Deis must provide an overlay network
107109
that can facilitate SDN and improved service discovery.
108110

109-
- [ ] Overlay Network
111+
- [X] Overlay Network (flannel)
110112
- [ ] `Internal Service Discovery`_
111113
- [ ] Migration Strategy
112114

@@ -135,14 +137,11 @@ This feature is tracked as GitHub issue `#231`_.
135137
.. _`CoreUpdate`: https://coreos.com/docs/coreupdate/custom-apps/coreupdate-protocol/
136138
.. _`Deis Push`: https://github.com/deis/deis/issues/2680
137139
.. _`Docker Registry v2`: https://github.com/deis/deis/issues/3814
138-
.. _`Fleet`: https://github.com/coreos/fleet#readme
139140
.. _`Google Omaha Protocol`: https://code.google.com/p/omaha/wiki/ServerProtocol
140141
.. _`Interactive Deis Run`: https://github.com/deis/deis/issues/117
141142
.. _`Internal Service Discovery`: https://github.com/deis/deis/issues/3072
142-
.. _`Kubernetes preview`: https://github.com/deis/deis/issues/3850
143143
.. _`like CoreOS`: https://coreos.com/releases/
144144
.. _`Log Tailing`: https://github.com/deis/deis/issues/465
145-
.. _`Mesos preview`: https://github.com/deis/deis/issues/3809
146145
.. _`Service Broker API`: http://docs.cloudfoundry.org/services/api.html
147146
.. _`TTY Broker component`: https://github.com/deis/deis/issues/3808
148147
.. _`Update client/agent`: https://github.com/deis/deis/issues/3811

0 commit comments

Comments
 (0)