docker swarm: docker native clustering
Post on 16-Apr-2017
2.088 Views
Preview:
TRANSCRIPT
Swarm:DockerNativeClustering
MikeGoelzermgoelzer@docker.comGH:@mgoelzerFreenode/Twitter:@mikegoelzer
Swarm:Simplicity,Flexibility,EaseofSetup
• WhatisSwarm?• SetupaSwarmcluster• Samplemicroservice applicationonSwarmwithdemo
SwarmturnsmultipleDockerhostsintoasingle,virtualDockerhost.
dockerdaemon(node-1)
Container
Container
>_Docker CLI
dockerDockerComposeKitematicJenkinsplugin
dockerdaemon(node-1)
Container
Container
>_Docker CLI
SwarmmanagerdockerDockerComposeKitematicJenkinsplugin
dockerdaemon(node-0)
Container
Container
dockerdaemon(node-2)
Container
Container
SwarmFeatures
• Scheduling• Reschedulingonfailure• HA(multiplemasters)• Labels,affinitiesandconstraintstocontrolschedulingdecisions• DNS-basedservicediscovery
SwarmCluster
Threestepstocreateacluster
1. CreateaKV(Consul,etcd,zk)2. RunSwarmManagercontainer3. RestartyourDockerdaemonswithclusterarguments
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
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/
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/
ExampleRepo:MicroserviceApponSwarm
https://github.com/mgoelzer/swarm-demo-voting-app(thenfollowHOWTO.txt)
Demonstratesamicroservice apponSwarmincluding:• Vagrantfile +AWSCloudFormationtemplatetodeploythecluster• Loadbalancedwebfrontend• DNS-basedservicediscovery
Interlock(nginxorha_proxy)
web01
redis01
web02
redis02
web03
redis03
web04
redis04
web05
redis05
pg results-app
ClusteredVotingApp
Repo:https://github.com/mgoelzer/swarm-demo-voting-app
ClusteredVotingApp
Repo:https://github.com/mgoelzer/swarm-demo-voting-app
Interlock(nginxorha_proxy)
web01
redis01
web02
redis02
web03
redis03
web04
redis04
web05
redis05
pg results-app
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
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
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
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)
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)
MikeGoelzer|mgoelzer@docker.com | GH:@mgoelzer |@mikegoelzer
top related