|
1 | 1 | # Architecture |
2 | 2 |
|
3 | | -Deis uses a service oriented architecture with [components][] |
4 | | -grouped into a Control Plane, Data Plane and Router Mesh. |
| 3 | +Deis Workflow is built using a service oriented architecture. All components |
| 4 | +are published as a set of container images which can be deployed to any |
| 5 | +compliant Kubernetes cluster. |
5 | 6 |
|
6 | | -## System Diagram |
| 7 | +## Overview |
7 | 8 |
|
8 | | - |
| 9 | + |
9 | 10 |
|
10 | | -Operators use [Helm][] to stand up the cluster's Control Plane, Data Plane and Router Mesh. |
11 | | -End-users of the platform interact with the Control Plane using the `Deis API`. |
| 11 | +Operators use [Helm][] to configure and install the Workflow components which |
| 12 | +interface directly with the underlying Kubernetes cluster. Service discovery, |
| 13 | +container availability and networking are all delegated to Kubernetes, while |
| 14 | +Workflow provides a clean and simple developer experience. |
12 | 15 |
|
13 | | -The Control Plane dispatches work to the Data Plane via a scheduler. |
14 | | -The Router Mesh is used to route traffic to both the Control Plane and Data Plane. |
15 | | -Because the router mesh is usually connected to the public Internet, |
16 | | -it is often connected to a front-end load balancer. |
| 16 | +## Platform Services |
17 | 17 |
|
18 | | -## Control Plane |
| 18 | + |
19 | 19 |
|
20 | | - |
| 20 | +Deis Workflow provides additional functionality to your Kubernetes cluster, including: |
21 | 21 |
|
22 | | -The Control Plane performs management functions for the platform. |
23 | | -Control plane components (in blue) are all implemented as Docker containers. |
| 22 | +* [Source to Image Builder][builder] which compiles your Application code via Buildpacks or Dockerfiles |
| 23 | +* [Cross-Pod Log Aggregation][logger] which gathers logs from all of your Application processes |
| 24 | +* [Simple REST API][controller] which powers the CLI and any external integrations |
| 25 | +* Application release and rollback |
| 26 | +* Authentication and Authorization to Application resources |
| 27 | +* [HTTP/HTTPS edge routing][router] for your Applications |
24 | 28 |
|
25 | | -The [store][] component consists of a number of smaller components that represent a |
26 | | -containerized Ceph cluster which provides a blob storage API and POSIX filesystem API |
27 | | -for the control plane's stateful components: |
| 29 | +## Kubernetes-Native |
28 | 30 |
|
29 | | - * [registry][] - a Docker registry used to hold images and configuration data |
30 | | - * [database][] - a Postgres database used to store platform state |
| 31 | +Every platform component and applications deployed via Workflow expect to be |
| 32 | +running on an existing Kubernetes cluster. This means that you can happily run |
| 33 | +your Kubernetes-native workloads next to applications that are managed through |
| 34 | +Deis Workflow. |
31 | 35 |
|
32 | | -End-users interact primarily with the [controller][] which exposes an |
33 | | -HTTP API. They can also interact with the [builder][] via `git push`. |
| 36 | + |
34 | 37 |
|
35 | | -## Data Plane |
| 38 | +## Application Layout and Edge Routing |
36 | 39 |
|
37 | | - |
| 40 | +By default Workflow creates per-application Namespaces and Services so you can |
| 41 | +easily connect your applications to other on-cluster services through standard |
| 42 | +Kubernetes mechanisms. |
38 | 43 |
|
39 | | -The Data Plane is where [containers][] (in blue) are run on behalf of end-users. |
| 44 | + |
40 | 45 |
|
41 | | -The platform scheduler is in charge of placing containers on hosts in the data plane. |
| 46 | +The router component is responsible for routing HTTP/s traffic to your |
| 47 | +Applications as well as proxying `git push` and platform API traffic. |
42 | 48 |
|
43 | | -## Router Mesh |
| 49 | +By default, the router component is deployed as a Kubernetes service with type |
| 50 | +`LoadBalancer`; which, depending on your configuration, will provision a |
| 51 | +cloud-native load balancer automatically. |
44 | 52 |
|
45 | | - |
46 | | - |
47 | | -The Router Mesh publishes [Applications][] to consumers. |
48 | | - |
49 | | -Each [router][] in the mesh is a dynamically configured Nginx web server designed to route inbound |
50 | | -traffic to the appropriate Kubernetes services for applications running in the data and control |
51 | | -planes. Additionally, routers perform typical web server responsibilities such as SSL termination |
52 | | -and gzip compression. |
53 | | - |
54 | | -Any changes to router configuration or certificates are applied within seconds. |
| 53 | +The router automatically discovers routeable Applications, SSL/TLS certificates |
| 54 | +and application-specific configurations through the use of Kubernetes |
| 55 | +annotations. Any changes to router configuration or certificates are applied |
| 56 | +within seconds. |
55 | 57 |
|
56 | 58 | ## Topologies |
57 | 59 |
|
58 | | -For small deployments you can run the entire platform |
59 | | --- Control Plane, Data Plane and Router Mesh -- on just 3 servers. |
60 | | - |
61 | | -For larger deployments, you'll want to isolate the Control Plane and Router |
62 | | -Mesh, then scale your Data Plane out to as many servers as you need. |
| 60 | +Deis Workflow no longer dictates a specific topology or server count for your |
| 61 | +deployment. The platform components will happily run on single-server |
| 62 | +configurations as well as multi-server production clusters. |
63 | 63 |
|
64 | | -See [Isolating the Planes][isolating-planes] for further details. |
65 | | - |
66 | | -[applications]: ../reference-guide/terms.md#application |
67 | 64 | [builder]: components.md#builder |
68 | 65 | [components]: components.md |
69 | | -[helm]: http://helm.sh |
70 | | -[containers]: ../reference-guide/terms.md#container |
71 | 66 | [controller]: components.md#controller |
72 | | -[database]: components.md#database |
73 | | -[isolating-planes]: ../managing-deis/isolating-the-planes.md |
74 | | -[registry]: components.md#registry |
| 67 | +[helm]: http://helm.sh |
| 68 | +[logger]: components.md#logger |
75 | 69 | [router]: components.md#router |
76 | | -[store]: components.md#store |
0 commit comments