docker swarm: docker native clustering

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

Upload: docker-inc

Post on 16-Apr-2017

2.100 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Docker Swarm: Docker Native Clustering

Swarm:DockerNativeClustering

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

Page 2: Docker Swarm: Docker Native Clustering

Swarm:Simplicity,Flexibility,EaseofSetup

• WhatisSwarm?• SetupaSwarmcluster• Samplemicroservice applicationonSwarmwithdemo

Page 3: Docker Swarm: Docker Native Clustering

SwarmturnsmultipleDockerhostsintoasingle,virtualDockerhost.

Page 4: Docker Swarm: Docker Native Clustering

dockerdaemon(node-1)

Container

Container

>_Docker CLI

dockerDockerComposeKitematicJenkinsplugin

Page 5: Docker Swarm: Docker Native Clustering

dockerdaemon(node-1)

Container

Container

>_Docker CLI

SwarmmanagerdockerDockerComposeKitematicJenkinsplugin

dockerdaemon(node-0)

Container

Container

dockerdaemon(node-2)

Container

Container

Page 6: Docker Swarm: Docker Native Clustering

SwarmFeatures

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

Page 7: Docker Swarm: Docker Native Clustering

SwarmCluster

Page 8: Docker Swarm: Docker Native Clustering

Threestepstocreateacluster

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

Page 9: Docker Swarm: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

ExampleRepo:MicroserviceApponSwarm

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

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

Page 13: Docker Swarm: Docker Native Clustering

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

Page 14: Docker Swarm: Docker Native Clustering

ClusteredVotingApp

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

Page 15: Docker Swarm: Docker Native Clustering

ClusteredVotingApp

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

Page 16: Docker Swarm: Docker Native Clustering

Interlock(nginxorha_proxy)

web01

redis01

web02

redis02

web03

redis03

web04

redis04

web05

redis05

pg results-app

Page 17: Docker Swarm: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

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: Docker Native Clustering

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