From eb864d6719ff5e284077cc9921c4dcf156b1adff Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Mon, 28 Sep 2015 11:01:07 -0700 Subject: [PATCH] Fix typos and add some extra content --- www/htdocs/explosion.gif | Bin 27897 -> 0 bytes www/htdocs/index.html | 115 +++++++++++++++++++++++++++++++++------ 2 files changed, 98 insertions(+), 17 deletions(-) delete mode 100644 www/htdocs/explosion.gif diff --git a/www/htdocs/explosion.gif b/www/htdocs/explosion.gif deleted file mode 100644 index 292c6d9c17e936f3248f5e57b35e148b9de68ba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27897 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 DQND$C diff --git a/www/htdocs/index.html b/www/htdocs/index.html index 414cd0cf..af3d3f19 100644 --- a/www/htdocs/index.html +++ b/www/htdocs/index.html @@ -980,6 +980,14 @@ If you get errors about port 8001, make sure that - But we want every stack to use the same Redis
(in other words: Redis is our only *stateful* service here) +-- + +- And remember: we're not allowed to change the code! + + - the code connects to host `redis` + - `redis` must resolve to the address of our Redis service + - the Redis service must listen on the default port (6379) + --- ## The plan @@ -1110,8 +1118,28 @@ Shortcut: `docker-compose.yml-extra-hosts` (Replace `A.B.C.D` with the IP address noted earlier) -Note: we also commented out the `volumes` section since -those files are only present locally, not on the remote nodes. +.icon[![Warning](warning.png)] Don't forget to comment out the `volumes` section! + +--- + +## Why did we comment out the `volumes` section? + +- Volumes have multiple uses: + + - storing persistent stuff (database files...) + + - sharing files between containers (logs, configuration...) + + - sharing files between host and containers (source...) + +- The `volumes` directive expands to an host path +
.small[(e.g. `/home/docker/orchestration-workshop/dockercoins/webui/files`)] + +- This host path exists on the local machine +
(not on the others) + +- This specific volume is used in development +
(not in production) --- @@ -1127,7 +1155,7 @@ those files are only present locally, not on the remote nodes. ] -- Check in the web browser that it's running correctly. +- Check in the web browser that it's running correctly --- @@ -1272,18 +1300,47 @@ Shortcut: `docker-compose.yml-ambassador` - Ambassadors actually *save* one hop
(they act as local load balancers) --- + - traditional load balancer: +
client ⇒ external LB ⇒ server (2 physical hops) -- However, they have a negative impact on load balancing fairness + - ambassadors: +
client → ambassador ⇒ server (1 physical hop) -- -- Ambassadors are not the only solution -
(see also: overlay networks) +- Ambassadors are more reliable than traditional LBs +
(they are colocated with their clients) --- +--- -- There are multiple ways to deploy ambassadors +## Inconvenients of ambassadors + +- Generic issues +
(shared with any kind of load balancing / HA setup) + + - extra logical hop (not transparent to the client) + + - must assess backend health + + - one more thing to worry about (!) + +- Specific issues + + - load balancing fairness + +High-end load balancing solutions will rely on back pressure +from the backends. This addresses the fairness issue. + +--- + +## There are many ways to deploy ambassadors + +"Ambassador" is a design pattern. + +There are many ways to implement it. + +We will present three increasingly complex (but also powerful) +ways to deploy ambassadors. --- @@ -1353,6 +1410,26 @@ Shortcut: `docker-compose.yml-ambassador` --- +## Other multi-host communication mechanisms + +- Overlay networks + + - weave, flannel, pipework ... + +- Network plugins + + - check out Docker Experimental Engine +
(should land in stable releases soon) + +- Allow a flat network for your containers + +- Often requires an extra service to deal with BUM packets +
(broadcast/unknown/multicast) + +- Load balancers and/or failover mechanisms still needed + +--- + class: title # Interlude
@@ -2113,7 +2190,7 @@ This can be any of your five nodes. - Swarm has partial support for builds -- .icon[![Explosion](explosion.gif)] Older versions of Compose would crash on builds +- .icon[![Warning](warning.png)] Older versions of Compose would crash on builds - Try it! @@ -2192,7 +2269,7 @@ Let's try! .exercise[ - Switch back to the Swarm cluster: -
`eval $(docker-machine env node1 --swarm) +
`eval $(docker-machine env node1 --swarm)` - Bring up the application:
`docker-compose -f docker-compose.yml-XXX up` @@ -2470,7 +2547,7 @@ It will gather: - the list of app backends, - the list of ambassadors. -Then it will configure all ambassadors will all found backends. +Then it configures all ambassadors with all found backends. .exercise[ @@ -2500,7 +2577,7 @@ Then it will configure all ambassadors will all found backends. # Going further -Scaling the application (easy) +Scaling the application (difficulty: easy) - Run `docker-compose scale` @@ -2514,7 +2591,7 @@ Scaling the application (easy) ## Going further -Deploying a new version (easy) +Deploying a new version (difficulty: easy) - Just re-run all the steps! @@ -2532,7 +2609,7 @@ Deploying a new version (easy) ## Going further -Zero-downtime deployment (medium) +Zero-downtime deployment (difficulty: medium) - Isolate stateful services
(like we did earlier for Redis) @@ -2553,9 +2630,13 @@ Zero-downtime deployment (medium) ## Going further -Try two-tier or three-tier ambassador deployments. +Harder projects: -Try overlay networking instead of ambassadors. +- Try two-tier or three-tier ambassador deployments + +- Try overlay networking instead of ambassadors + +- Try to deploy Mesos or Kubernetes ---