Skip to content

Commit 7db71d1

Browse files
author
Jason Hansen
committed
Merge pull request #38 from slack/update-concepts
Rework concepts section
2 parents d96331a + 8233497 commit 7db71d1

1 file changed

Lines changed: 88 additions & 32 deletions

File tree

src/understanding-deis/concepts.md

Lines changed: 88 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Concepts
22

3-
Deis is a lightweight application platform that deploys and scales Twelve-Factor apps as Docker containers across a cluster of Kubernetes minions.
3+
Deis Workflow is a lightweight application platform that deploys and scales
4+
Twelve-Factor apps as containers across a Kubernetes cluster.
45

5-
## Twelve-Factor
6+
## Twelve-Factor Applications
67

78
The [Twelve-Factor App][] is a methodology for building modern
89
applications that can be scaled across a distributed system.
@@ -11,75 +12,130 @@ We consider it an invaluable synthesis of much experience with
1112
software-as-a-service apps in the wild, especially on the
1213
Heroku platform.
1314

14-
Deis is designed to run applications that adhere to [Twelve-Factor App][]
15+
Workflow is designed to run applications that adhere to the [Twelve-Factor App][]
1516
methodology and best practices.
1617

18+
## Kubernetes
19+
20+
[Kubernetes][] is an open-source cluster manager developed by Google and
21+
donated to the [Cloud Native Compute Foundation][cncf]. Kubernetes manages all
22+
the activity on your cluster, including: desired state convergence, stable
23+
service addresses, health monitoring, service discovery, and DNS resolution.
24+
25+
Workflow builds upon Kubernetes abstractions like Services, Replication
26+
Controllers and Pods to provide a developer-friendly UX, source to image, log
27+
aggregation, etc.
28+
29+
Workflow is shipped as a Kubernetes-native application, installable via
30+
[Helm][helm], so operators familiar with Kubernetes will feel right at home
31+
running Workflow.
32+
33+
For a detailed overview of Workflow components, see our [component][components] break down.
34+
1735
## Docker
1836

19-
[Docker][] is an open source project to pack, ship and run any
37+
[Docker][] is an open source project to build, ship and run any
2038
application as a lightweight, portable, self-sufficient container.
2139

22-
Deis curates your applications as Docker images, which are then
23-
distributed across your cluster as Docker containers.
40+
If you have not yet converted your application to containers, Workflow provides
41+
a simple and straightforward "source to Docker image" capability. Supporting
42+
multiple language runtimes via community [buildpacks][], building your application
43+
in a container can be as easy as `git push deis master`.
2444

25-
(Deis itself is also a set of coordinated Docker containers.)
45+
Applications which are packaged via a buildpack are run in Docker containers as
46+
part of the `slugrunner` process. View the [slugrunner component][slugrunner]
47+
for more information.
48+
49+
Applications which use either a Dockerfile or reference an external Docker
50+
Image are launched unmodified.
2651

2752
## Applications
2853

29-
Deis is designed around the concept of an [application][], or app.
30-
Applications live on a cluster where they use [Containers][]
31-
to service requests.
54+
Workflow is designed around the concept of an [application][], or app.
55+
56+
Applications can come in three forms:
3257

33-
Developers use applications to push code, change configuration, scale processes,
34-
view logs, run admin commands and much more.
58+
1. as collection of source files stored in a Git repository
59+
2. as a Dockerfile, which describes how to build your app
60+
3. a reference to an already built Docker Image, hosted on a remote Docker repository
61+
62+
Applications identified by a unique name for easy reference. If you do not
63+
specify a name when creating your application Workflow generates one for you.
64+
Workflow also tracks other related information for your application including
65+
any domain names, SSL Certificates and developer provided configuration.
3566

3667
## Build, Release, Run
3768

3869
![Git Push Workflow](../diagrams/Git_Push_Flow.png)
3970

4071
### Build Stage
4172

42-
The [builder][] processes incoming `git push` requests and builds applications
43-
inside ephemeral Docker containers, resulting in a new Docker image.
73+
The [builder][] component processes incoming `git push deis master` requests
74+
and manages your application packaging.
75+
76+
If your application is using a [buildpack][] builder will launch an ephemeral
77+
job to extract and execute the packaging instructions. The resulting
78+
application artifact is stored by the platform for execution during the run
79+
stage.
80+
81+
If instead, you provide a [Dockerfile][dockerfile] builder will use the
82+
instructions you have provided to build a Docker Image. The resulting artifact is
83+
stored in a Deis-managed registry which will be referenced during the run
84+
stage.
85+
86+
If you already have an external system building your application container you
87+
can simply reference that artifact. When using [external Docker
88+
images][dockerimage] the builder component doesn't attempt to repackage your
89+
app.
4490

4591
### Release Stage
4692

47-
During the release stage, a [build][] is combined with [config][] to create a new numbered
48-
[release][]. This release is then pushed to a Docker registry for later execution.
49-
The release stage is triggered any time a new build is created or config is
50-
changed, making it easy to rollback code and configuration changes.
93+
During the release stage, a [build][] is combined with [application configuration][config]
94+
to create a new numbered [release][]. New releases are created any time a new
95+
build is created or application configuration is changed. Tracking releases
96+
makes it easy to rollback to any previous release.
5197

5298
### Run Stage
5399

54-
The run stage dispatches containers to a scheduler and updates the router accordingly.
55-
The scheduler is in control of placing containers on hosts and balancing them evenly across the cluster.
56-
Containers are published to the router once they are healthy. Old containers are only collected
57-
after the new containers are live and serving traffic -- providing zero-downtime deploys.
100+
The run stage is responsible for deploying the new release to the underlying
101+
Kubernetes cluster. The run stage launches a new Replication Controller which
102+
references the new release. By managing the desired replica count, Workflow
103+
orchestrates a zero-downtime, rolling update of your application. Once
104+
successfully updated, Workflow removes the last reference to the old release.
105+
Note that during the deploy, your application will be running in a mixed mode.
58106

59107
## Backing Services
60108

61-
Deis treats databases, caches, storage, messaging systems, and other
62-
[backing services][] as attached resources, in keeping with Twelve-Factor
109+
Workflow treats all persistent services such as databases, caches, storage,
110+
messaging systems, and other [backing services][] as resources managed
111+
separtely from your application. This philosophy aligns with Twelve-Factor
63112
best practices.
64113

65114
Applications are attached to backing services using [environment variables][].
66-
Because applications are decoupled from backing services, apps are free to scale up independently,
67-
to swap services provided by other apps, or to switch to external or third-party vendor services.
115+
Because applications are decoupled from backing services, apps are free to
116+
scale up independently, to use services provided by other apps, or to switch
117+
to external or third-party vendor services.
68118

69119
## See Also
70120

71121
* [Architecture](architecture.md)
72122
* [Twelve-Factor App][]
73123

74-
124+
[Build and Run]: http://12factor.net/build-release-run
125+
[Docker]: https://www.docker.com/
126+
[Kubernetes]: https://kubernetes.io
127+
[Twelve-Factor App]: http://12factor.net/
75128
[application]: ../reference-guide/terms.md#application
129+
[backing services]: http://12factor.net/backing-services
76130
[build]: ../reference-guide/terms.md#build
77131
[builder]: components.md#builder
132+
[buildpacks]: ../using-deis/using-buildpacks.md
133+
[cncf]: https://cncf.io/
134+
[components]: components.md
78135
[config]: ../reference-guide/terms.md#config
79-
[containers]: ../reference-guide/terms.md#container
80-
[Docker]: http://docker.io/
81-
[Build and Run]: http://12factor.net/build-release-run
82-
[backing services]: http://12factor.net/backing-services
136+
[dockerfile]: ../using-deis/using-dockerfiles.md
137+
[dockerimage]: ../using-deis/using-docker-images.md
83138
[environment variables]: http://12factor.net/config
139+
[helm]: https://helm.sh
84140
[release]: ../reference-guide/terms.md#release
85-
[Twelve-Factor App]: http://12factor.net/
141+
[slugrunner]: concepts.md#slugrunner

0 commit comments

Comments
 (0)