Top Banner
Swarm: Docker Native Clustering Mike Goelzer [email protected] GH: @mgoelzer Freenode/Twitter: @mikegoelzer
22

Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Jan 22, 2018

Download

Technology

Michelle Antebi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Swarm:DockerNativeClustering

[email protected]:@mgoelzerFreenode/Twitter:@mikegoelzer

Page 2: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Swarm:Simplicity,Flexibility,EaseofSetup

• WhatisSwarm?• SetupaSwarmcluster• Samplemicroservice applicationonSwarmwithdemo

Page 3: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

SwarmturnsmultipleDockerhostsintoasingle,virtualDockerhost.

Page 4: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

dockerdaemon(node-1)

Container

Container

>_Docker CLI

dockerDockerComposeKitematicJenkinsplugin

Page 5: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

dockerdaemon(node-1)

Container

Container

>_Docker CLI

SwarmmanagerdockerDockerComposeKitematicJenkinsplugin

dockerdaemon(node-0)

Container

Container

dockerdaemon(node-2)

Container

Container

Page 6: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

SwarmFeatures

• Scheduling• Reschedulingonfailure• HA(multiplemasters)• Labels,affinitiesandconstraintstocontrolschedulingdecisions• DNS-basedservicediscovery

Page 7: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

SwarmCluster

Page 8: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Threestepstocreateacluster

1. CreateaKV(Consul,etcd,zk)2. RunSwarmManagercontainer3. RestartyourDockerdaemonswithclusterarguments

Page 9: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Step1:CreateaKVKVisfornodediscoveryandlibnetwork IPallocation(Consul,etcd,orzk)

docker run

--restart=unless-stopped

-d

-p 8500:8500

--name consul

-h consul

progrium/consul -server -bootstrap

-ui-dir /ui

Refs:https://www.consul.io/docs/agent/options.html

WebUIon:http://192.168.33.11:8500/ui/

Single-node Consul cluster

HostnameContainernameMap Consul port to hostDaemonize container processRestart policy

Page 10: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Step2:StartSwarmmanager

docker run -d -p 3375:2375 swarm manage --discovery-opt="kv.path=docker/nodes"consul://192.168.33.10:8500/

Refs:https://docs.docker.com/swarmhttps://docs.docker.com/swarm/install-manual/

Page 11: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Step3:Addsomeargstoyourdaemons

RestartDockerdaemonswith:

DOCKER_OPTS=-H=tcp://0.0.0.0:2375--cluster-store=consul://192.168.33.10:8500--cluster-advertise=eth1:2375

Refs:https://docs.docker.com/swarmhttps://docs.docker.com/swarm/install-manual/

Page 12: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

ExampleRepo:MicroserviceApponSwarm

https://github.com/mgoelzer/swarm-demo-voting-app(thenfollowHOWTO.txt)

Demonstratesamicroservice apponSwarmincluding:• Vagrantfile +AWSCloudFormationtemplatetodeploythecluster• Loadbalancedwebfrontend• DNS-basedservicediscovery

Page 13: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

Page 14: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

ClusteredVotingApp

Repo:https://github.com/mgoelzer/swarm-demo-voting-app

Page 15: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

ClusteredVotingApp

Repo:https://github.com/mgoelzer/swarm-demo-voting-app

Page 16: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

Page 17: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

10.0.0.4

10.0.0.3

36.36.36.36

10.0.0.100

10.0.0.6

10.0.0.5

10.0.0.7

10.0.0.6

10.0.0.9

10.0.0.8

10.0.0.11

10.0.0.10

10.0.0.101

Page 18: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

10.0.0.4

10.0.0.3

36.36.36.36

10.0.0.100

10.0.0.6

10.0.0.5

10.0.0.7

10.0.0.6

10.0.0.9

10.0.0.8

10.0.0.11

10.0.0.10

10.0.0.101

192.168.33.11 192.168.33.12

.20 .21 .22 .23 .24

.200 .201

.251

Consul

Manager

Host

Container

10.0.0.4 ContainerIPs192.168.33.11 NodeIP

Page 19: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

for (int i = min; i <= max; i++) {

String hostname = String.format(“redis%02d.mynet”,i);

try {

InetAddress inetAddress = InetAddress.getByName(hostname);

String addr = inetAddress.getHostAddress();

queues.add(new RedisQueue(hostname, addr));

} catch (UnknownHostException e) {

// No such host

}

}

return queues;

“redis01.mynet””redis02.mynet”etc.

e.g.,“10.0.0.23”

WorkerdiscoversRedis’satruntimebyDNS

queuesredis01.mynet 10.0.0.23

redis02.mynet 10.0.0.24

redis03.mynet 10.0.0.25

Page 20: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

DemoTofollowalongathome:1. Clonehttps://github.com/mgoelzer/swarm-demo-voting-app2. FollowinstructionsinHOWTO.txt file(inrootofrepo).3. Screencastsofthedemo:

• Step1:VagrantUp(https://www.youtube.com/watch?v=gKiEveAjgU8)• Step2:CreateSwarmCluster(https://www.youtube.com/watch?v=IskSZC5wv7A)• Step3:Builddemoappimages(https://www.youtube.com/watch?v=ZRFtNQB-VY8)• Step4:Startdemoappcontainers(https://www.youtube.com/watch?v=jlrpWrsvB2Q)• Step5:Usethedemoapp(https://www.youtube.com/watch?v=_Pc07ThTbzs)

Page 21: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

Jérôme’sExample:CoinMiner

Slides:http://view.dckr.info/Repo:https://github.com/jpetazzo/orchestration-workshop

Demonstrates:• Chaos-monkeyproofcluster• HowtodobatchworkloadsonSwarm• ELKstackforlogging andmetrics• Otherloadbalancingpatternsbeyond Interlock

(anotherSwarmexampleapp)

Page 22: Docker swarm-mike-goelzer-mv-meetup-45min-workshop 02242016 (1)

MikeGoelzer|[email protected] | GH:@mgoelzer |@mikegoelzer