|
| 1 | +:title: Isolating the Planes |
| 2 | +:description: Configuring the cluster to isolate the control plane, data plane, and router mesh. |
| 3 | + |
| 4 | +.. _isolating-planes: |
| 5 | + |
| 6 | +Isolating the Planes |
| 7 | +==================== |
| 8 | + |
| 9 | +.. include:: ../_includes/_isolating-planes-description.rst |
| 10 | + |
| 11 | +Understanding Fleet metadata |
| 12 | +---------------------------- |
| 13 | + |
| 14 | +The key to isolating the Control Plane, Data Plane, and Router Mesh is Fleet |
| 15 | +metadata. Although Deis supports alternate schedulers, Deis components |
| 16 | +themselves are all scheduled via Fleet. |
| 17 | + |
| 18 | +Deis configures the Fleet daemon executing on each node at the time of |
| 19 | +provisioning via cloud-config. Within that configuration, it is possible to tag |
| 20 | +nodes with metadata in the form of key/value pairs to arbitrarily describe |
| 21 | +attributes of the node. For instance, an operator may tag a node with |
| 22 | +``ssd=true`` to indicate that a node's volumes use solid state disk. |
| 23 | + |
| 24 | +.. code-block:: yaml |
| 25 | +
|
| 26 | + #cloud-config |
| 27 | + --- |
| 28 | + coreos: |
| 29 | + fleet: |
| 30 | + metadata: ssd=true |
| 31 | + # ... |
| 32 | +
|
| 33 | +When scheduling a unit of work via Fleet, it is also possible to annotate that |
| 34 | +unit with metadata that is required to be present on any node in order to be |
| 35 | +considered eligible to host that work. In keeping with our previous example, |
| 36 | +to restrict a unit of work to only those nodes equipped with SSD, the unit may |
| 37 | +be annotated thusly: |
| 38 | + |
| 39 | +.. code-block:: yaml |
| 40 | +
|
| 41 | + # ... |
| 42 | + [X-Fleet] |
| 43 | + MachineMetadata="ssd=true" |
| 44 | +
|
| 45 | +Deis takes advantage of this very mechanism to establish which nodes are |
| 46 | +eligible to host each of the Control Plane, Data Plane, and Router Mesh. |
| 47 | + |
| 48 | +`More details on Fleet metadata`_ |
| 49 | + |
| 50 | +cloud-config |
| 51 | +------------ |
| 52 | + |
| 53 | +To configure a Fleet node as eligible to host Control Plane components, the |
| 54 | +following cloud-config may be used: |
| 55 | + |
| 56 | +.. code-block:: yaml |
| 57 | +
|
| 58 | + #cloud-config |
| 59 | + --- |
| 60 | + coreos: |
| 61 | + fleet: |
| 62 | + metadata: controlPlane=true |
| 63 | +
|
| 64 | +Similarly, ``dataPlane=true`` and ``routerMesh=true`` may be used to establish |
| 65 | +eligibility to host components of the Data Plane (including applications) and |
| 66 | +Router Mesh, respectively. |
| 67 | + |
| 68 | +It is also possible to configure nodes as eligible to host two or even all |
| 69 | +three of the Control Plane, Data Plane, and Router Mesh. In fact, this is |
| 70 | +the default behavior described by Deis' included cloud-config. |
| 71 | + |
| 72 | +.. code-block:: yaml |
| 73 | +
|
| 74 | + #cloud-config |
| 75 | + --- |
| 76 | + coreos: |
| 77 | + fleet: |
| 78 | + metadata: controlPlane=true,dataPlane=true,routerMesh=true |
| 79 | +
|
| 80 | +It should be obvious that isolating the planes as described here requires |
| 81 | +subsets of a cluster's nodes to be configured differently from one another (with |
| 82 | +different metadata). Deis provisioning scripts do not currently account for |
| 83 | +this, so managing separate cloud-config for each subset of nodes in the cluster |
| 84 | +is left as an exercise for the advanced operator. |
| 85 | + |
| 86 | +Decorating units |
| 87 | +---------------- |
| 88 | + |
| 89 | +To complement the cloud-config described above, Deis 1.9.0 and later are capable |
| 90 | +of seamlessly "decorating" the Fleet units for each Deis platform component with |
| 91 | +the metadata that describes where each unit may be hosted. |
| 92 | + |
| 93 | +.. note:: |
| 94 | + |
| 95 | + For the purposes of backwards compatibility with Deis clusters provisioned |
| 96 | + using versions of Deis older than 1.9.0, decorating the platform's units |
| 97 | + with metadata is an opt-in. Nodes in older clusters are guaranteed to be |
| 98 | + lacking the metadata that indicates what components they are eligible to |
| 99 | + host. As such, decorated units would be ineligible to run anywhere within |
| 100 | + such a cluster. |
| 101 | + |
| 102 | + To opt in, use the following: |
| 103 | + |
| 104 | + .. code-block:: console |
| 105 | +
|
| 106 | + $ deisctl config platform set enablePlacementOptions=true |
| 107 | +
|
| 108 | +Alternate schedulers |
| 109 | +-------------------- |
| 110 | + |
| 111 | +Recent versions of Deis ship with |
| 112 | +:ref:`technology previews <choosing_a_scheduler>` that permit the use of |
| 113 | +alternate schedulers such as Swarm or Mesos with Marathon. |
| 114 | + |
| 115 | +If opting into both isolated planes and an alternate scheduler, units for the |
| 116 | +alternate scheduler's agents (a Mesos slave process, for instance) will be |
| 117 | +decorated appropriately to isolate them to the Data Plane. |
| 118 | + |
| 119 | +.. _`More details on Fleet metadata`: https://coreos.com/fleet/docs/latest/unit-files-and-scheduling.html#fleet-specific-options |
0 commit comments