Skip to content

Commit bcf8b9c

Browse files
author
Jason Hansen
committed
Merge pull request #39 from slack/update-components
Update Components documentation for v2
2 parents c8078bc + 0b0b638 commit bcf8b9c

1 file changed

Lines changed: 118 additions & 39 deletions

File tree

Lines changed: 118 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,149 @@
11
# Components
22

3-
Deis consists of a number of components that combine to create a distributed PaaS.
4-
Each Deis component is deployed as a container or set of containers.
3+
Workflow is comprised of a number of small, independent services that combine
4+
to create a distributed PaaS. All Workflow components are deployed as services
5+
(and associated controllers) in your Kubernetes cluster. If you are interested
6+
we have a more detailed exploration of the [Workflow
7+
architecture][architecture].
8+
9+
All of the componentry for Workflow is built with composability in mind. If you
10+
need to customize one of the components for your specific deployment or need
11+
the functionality in your own project we invite you to give it a shot!
512

613
## Controller
714

8-
The controller component is an HTTP API server. Among other functions, the
9-
controller contains the scheduler, which decides where to run app containers.
10-
The `deis` command-line client interacts with this component.
15+
Project Location: [deis/workflow](https://github.com/deis/workflow)
16+
17+
The controller component is an HTTP API server which serves as the endpoint for
18+
the `deis` CLI. The controller provides all of the platform functionality as
19+
well as interfacing with your Kubernetes cluster. The controller persists all
20+
of its data to the database component.
1121

1222
## Database
1323

14-
The database component is a [PostgreSQL][] server used to store durable platform state. Backups and
15-
WAL logs are pushed to the [Store][] through [WAL-E][]. When the database is restarted, backups are
16-
fetched and replayed from Store so no data is lost.
24+
Project Location: [deis/postgres](https://github.com/deis/postgres)
25+
26+
The database component is a managed instance of [PostgreSQL][] which holds a
27+
majority of the platforms state. Backups and WAL files are pushed to the object
28+
storage via [WAL-E][]. When the database is restarted, backups are fetched and
29+
replayed from object storage so no data is lost. For more information on backup
30+
and restore read the documentation for
31+
[Backing up and Restoring Data][backupandrestore].
32+
33+
## Builder: builder, slugbuilder, and dockerbuilder
1734

18-
## Builder
35+
Project Location: [deis/builder](https://github.com/deis/builder)
1936

20-
The builder component uses a [Git][] server to process
21-
[Application][] builds. The builder:
37+
38+
The builder component is responsible for accepting code pushes via [Git][] and
39+
managing the build process of your [Application][]. The builder process is:
2240

2341
1. Receives incoming `git push` requests over SSH
2442
2. Authenticates the user via SSH key fingerprint
25-
3. Authorizes the user's access to write to the Git repository
26-
4. Builds a new `Docker` image from the updated git repository
27-
5. Adds the latest [Config][] to the resulting Docker image
28-
6. Pushes the new Docker image to the platform's [Registry][]
29-
7. Triggers a new [Release][] through the [Controller][]
43+
3. Authorizes the user's access to push code to the Application
44+
4. Starts the Application Build phase (see below)
45+
5. Triggers a new [Release][] via the Controller
46+
47+
Builder currently supports both buildpack and Dockerfile based builds.
48+
49+
Project Location: [deis/slugbuilder](https://github.com/deis/slugbuilder)
50+
51+
For Buildpack-based deploys, the builder component will launch a one-shot Pod
52+
in the `deis` namespace. This pod runs `slugbuilder` component which handles
53+
default and custom buildpacks (specified by `BUILDPACK_URL`). The "compiled"
54+
application results in a slug, consisting of your application code and all of
55+
its depdencies as determined by the buildpack. The slug is pushed to the
56+
cluster-configured object storage for later execution. For more information
57+
about buildpacks see [using buildpacks][using-buildpacks].
58+
59+
Project Location: [deis/dockerbuilder](https://github.com/deis/dockerbuilder)
60+
61+
For Applications which contain a `Dockerfile` in the root of the repository,
62+
`builder` will instead launch the `dockerbuilder` to package your application.
63+
Instead of generating a slug, `dockerbuilder` generates a Docker image (using
64+
the underlying Docker engine). The completed image is pushed to the managed
65+
Docker registry on cluster. For more information see [using Dockerfiles][using-dockerfiles].
66+
67+
## Slugrunner
68+
69+
Project Location: [deis/slugrunner](https://github.com/deis/slugrunner)
70+
71+
Slugrunner is the component responsible for executing buildpack-based
72+
Applications. Slugrunner receives slug information from the controller and
73+
downloads the application slug just before launching your application
74+
processes.
3075

31-
!!! note
32-
The builder component does not incorporate [Config][] directly into the images it produces. A [Release][] is a pairing of an application image with application configuration maintained separately in the Deis [Database][]. Once a new [Release][] is generated, a new set of containers is deployed across the platform automatically.
76+
## Object Storage
77+
78+
Project Location: [deis/minio](https://github.com/deis/mino)
79+
80+
All of the Workflow components ship their persistent data to cluster configured
81+
S3 compatibile Object Storage. For example, database ships its WAL files,
82+
registry stores Docker images, and slugbuilder stores slugs.
83+
84+
Workflow supports either on or off-cluster storage. For production deployments
85+
we highly recommend that you configure [off-cluster object storage][configure-objectstorage].
86+
87+
To facilitate experimentation, development and test environments, the default charts for
88+
Workflow include on-cluster object storage via [minio](https://github.com/minio/minio).
89+
90+
If you also feel comforatable using Kubernetes persistent volumes you may
91+
configure minio to use persistent storage available in your environment.
3392

3493
## Registry
3594

36-
The registry component hosts [Docker][] images on behalf of the platform.
37-
Image data is stored by [Store][].
95+
Project Location: [deis/registry](https://github.com/deis/registry)
96+
97+
The registry component is a managed docker registry which holds application
98+
images generated from the builder component. Registry persists the Docker image
99+
iamges to either local storage (in development mode) or to object storage
100+
configured for the cluster.
38101

39102
## Router
40103

41-
The router component uses [Nginx][] to route traffic to application containers.
104+
Project Location: [deis/router](https://github.com/deis/router)
105+
106+
The router component is based on [Nginx][] and is responsible for routing
107+
inbound HTTP(S) traffic to your applications. The default workflow charts
108+
provision a Kubernetes service in the `deis` namespace with a service type of
109+
`LoadBalancer`. Depending on your Kubernetes configuration, this may provision
110+
a cloud-based loadbalancer automatically.
42111

43-
## Store
112+
The router component uses Kubernetes annotations for both Application discovery
113+
as well as router configuration. For more detailed documentation and possible
114+
configuration view the router [project documentation][router-documentation].
44115

45-
The Store component uses [Minio][] by default to store data for Deis components which need to store
46-
state, including the [Registry][] and the [Database][].
116+
## Logger: fluentd, logger
47117

48-
If you are using Minio as the Store, it is highly recommended that the Store's data is backed by a
49-
persistent volume in the event of complete failure. See
50-
[Backing up and Restoring Data](../managing-deis/backing-up-and-restoring-data.md) for more
51-
information.
118+
The logging subystem consists of two compoents. Fluentd handles log shipping
119+
and logger maintains a ring-buffer of application logs.
120+
121+
Project Location: [deis/fluentd](https://github.com/deis/fluentd)
122+
123+
Fluentd is deployed to your Kubernetes cluster via Daemon Sets. Fluentd
124+
subscribes to all container logs, decorates the output with Kubernetes metadata
125+
and can be configured to drain logs to multiple destinations. By default,
126+
fluentd ships logs to the logger component, which powers `deis logs`.
127+
128+
Project Location: [deis/logger](https://github.com/deis/logger)
129+
130+
The `logger` compoent receives log streams from `fluentd`, collating by
131+
Application name. Logger does not persist logs to disk, instead maintaining an
132+
in-memory ring buffer. For more information on logger see the [project
133+
documentation][logger-documentation].
52134

53-
[Amazon S3]: http://aws.amazon.com/s3/
54135
[Application]: ../reference-guide/terms.md#application
55-
[Celery]: http://www.celeryproject.org/
56136
[Config]: ../reference-guide/terms.md#config
57-
[controller]: #controller
58-
[database]: #database
59-
[Docker]: http://docker.io/
60137
[Git]: http://git-scm.com/
61-
[Minio]: https://www.minio.io/
62138
[Nginx]: http://nginx.org/
63-
[OpenStack Storage]: http://www.openstack.org/software/openstack-storage/
64139
[PostgreSQL]: http://www.postgresql.org/
65-
[Redis]: http://redis.io/
66-
[registry]: #registry
140+
[WAL-E]: https://github.com/wal-e/wal-e
141+
[architecture]: architecture.md
142+
[backupandrestore]: ../managing-deis/backing-up-and-restoring-data.md
143+
[configure-objectstorage]: ../installing-deis/configuring-object-storage.md
144+
[logger-documentation]: https://github.com/deis/logger
67145
[release]: ../reference-guide/terms.md#release
146+
[router-documentation]: https://github.com/deis/router
68147
[router]: #router
69-
[store]: #store
70-
[WAL-E]: https://github.com/wal-e/wal-e
148+
[using-buildpacks]: ../using-deis/using-buildpacks.md
149+
[using-dockerfiles]: ../using-deis/using-dockerfiles.md

0 commit comments

Comments
 (0)