deploying complex applications on docker using apache brooklyn

47
Clocker Deploying Complex Applica3ons on Docker using Apache Brooklyn

Upload: andrew-kennedy

Post on 03-Jul-2015

408 views

Category:

Documents


5 download

DESCRIPTION

Talk given at ApacheCon, Budapest, November 2014

TRANSCRIPT

Page 1: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Deploying  Complex  Applica3ons  on  Docker  using  Apache  Brooklyn  

Page 2: Deploying Complex Applications on Docker using Apache Brooklyn

Deploying  Complex  Applica1ons  on  Docker  using  Apache  Brooklyn  

Andrew  Kennedy  @grkvlt  ApacheCon,  November  2014  

Budapest,  Hungary  

Page 3: Deploying Complex Applications on Docker using Apache Brooklyn

Introduc1on  •  Andrew  Kennedy  –  SoHware  Engineer  – Open  Source  –  github.com/grkvlt  

•  CloudsoH  Corpora1on  –  ScoMsh  (Bri1sh?  European!)  Company  – We’re  Hiring…  

Page 4: Deploying Complex Applications on Docker using Apache Brooklyn

Introduc1on  •  Clocker  – Docker  – Apache  Brooklyn  – Apache  Jclouds  – Weave  

•  Demonstra1on  •  Roadmap  

Page 5: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Project  •  What  does  it  do?  – Manages  Docker  Infrastructure  – Deploys  Blueprints  to  Docker  

•  What  is  it?  – Brooklyn  Applica1on  – Brooklyn  Loca1on  

Page 6: Deploying Complex Applications on Docker using Apache Brooklyn

Docker  •  Popular  – Huge  Ecosystem  – Growing  – Complex  

•  Containers  –  Isola1on  – Performance  – Composable  

Page 7: Deploying Complex Applications on Docker using Apache Brooklyn

Docker  

Page 8: Deploying Complex Applications on Docker using Apache Brooklyn

Limita3ons…  Docker  Limita3ons  

Page 9: Deploying Complex Applications on Docker using Apache Brooklyn

Docker  Limita1ons  •  Mul1ple  Hosts  •  Networking  –  Same  Issue  –  Communica1on  Between  Services  

•  Orchestra1on  and  Clustering  –  Control  of  Containers  –  Container  Management  

Page 10: Deploying Complex Applications on Docker using Apache Brooklyn

Docker  Limita1ons  •  Plugin  API  will  Help  •  Not  standardized  yet  •  Working  on  it…  

•  Need  to  avoid  lock-­‐in  •  One  size  fits  all  is  never  good  enough  

Page 11: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Project  •  GitHub  •  Open  Source  •  Java  •  Recently  Developed  •  S1ll  Beta  Status  –  0.7.0-­‐SNAPSHOT  –  Release  0.7.0  Tomorrow  

Page 12: Deploying Complex Applications on Docker using Apache Brooklyn

Why  Clocker  •  Docker  Popularity  – Solve  Some  Limita1ons  

•  Best  of  Breed  Components  •  Brooklyn  Integra1on  – Virtual  Machines  too  Coarse  – Container  to  En1ty  Mapping  

Page 13: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Components  •  Apache  Brooklyn  – CloudsoH  Product  – Open  Source  Java  – Donated  to  the  ASF  –  Incubator  Status  

Page 14: Deploying Complex Applications on Docker using Apache Brooklyn

Apache  Brooklyn  •  Applica1on  Management  Pladorm  •  Autonomic  Compu1ng  Principles  •  Deploy,  Manage  and  Monitor  Blueprints  – Services  (En11es)  – State  (Sensors)  – Ac1ons  (Effectors)  

Page 15: Deploying Complex Applications on Docker using Apache Brooklyn

Brooklyn  Blueprint  id:  nodejs-­‐hello-­‐world-­‐application  name:  "Node.JS  Hello  World  Application"  origin:  "https://github.com/grkvlt/node-­‐hello-­‐world.git/"  locations:  -­‐  jclouds:softlayer:ams01  services:  -­‐  serviceType:  brooklyn.entity.webapp.nodejs.NodeJsWebAppService      id:  nodejs      name:  "Node.JS"      brooklyn.config:          gitRepoUrl:              "https://github.com/grkvlt/node-­‐hello-­‐world.git"          appFileName:  app.js          appName:  node-­‐hello-­‐world  

Page 16: Deploying Complex Applications on Docker using Apache Brooklyn

Apache  Brooklyn  •  Deployment  –  Provisioning  –  Loca1ons  –  Installa1on  and  Customiza1on  

•  Packages,  Scripts,  Chef,  SaltStack  •  Management  –  Policies  

•  AutoScaling,  Resilience,  Performance,  Access  

Page 17: Deploying Complex Applications on Docker using Apache Brooklyn

Apache  Jclouds  •  Java  Cloud  Library  •  API  Agnos1c  – CloudStack,  OpenStack,  AWS  EC2,  GCE…  

•  Create  Virtual  Machines  – Return  SSH  Endpoint  – Manage  Proper1es  

Page 18: Deploying Complex Applications on Docker using Apache Brooklyn

Apache  Jclouds  •  Drivers  for  REST  APIs  •  Docker  Driver  – Wrifen  by  @turlinux  

•  Virtual  Container  – Using  SSH  Daemon  –  Same  Endpoint  Type  as  VM  –  Composi1on  on  any  Image  or  Dockerfile  

Page 19: Deploying Complex Applications on Docker using Apache Brooklyn

Weave  •  SoHware  Defined  Networking  – Ethernet  Switch  – User  Space  – Docker  Container  

•  Sniffs  Traffic  on  Host  •  Forwards  over  TCP  

Page 20: Deploying Complex Applications on Docker using Apache Brooklyn

Weave  

Page 21: Deploying Complex Applications on Docker using Apache Brooklyn

What  is  Clocker?  

Page 22: Deploying Complex Applications on Docker using Apache Brooklyn

What  is  Clocker?  •  Brooklyn  Applica1on  – Docker  Infrastructure  

•  Docker  Engine  •  Docker  Containers  

– Weave  Infrastructure  • Weave  Container  

Page 23: Deploying Complex Applications on Docker using Apache Brooklyn

What  is  Clocker?  •  Brooklyn  Loca1on  – Des1na1on  for  Blueprints  

•  Added  Features  –  Create  Containers  –  Provision  Docker  Hosts  – Afach  to  Weave  Network  – Manage  Applica1on  

Page 24: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Architecture  

Page 25: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Architecture  

Page 26: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Features  •  Applica1on  Deployment  – Oasis  CAMP  Blueprint  –  Same  as  Core  Brooklyn  

•  Mixed  Des1na1ons  –  Some  Virtual  Machines  –  Some  Bare  Metal  –  Some  Containers  

Page 27: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Features  •  Applica1on  Deployment  – Oasis  CAMP  Blueprint  –  Same  as  Core  Brooklyn  

•  Docker  Extensions  –  Container  or  Image  –  Placement  Strategy  – Dockerfile  URL  

Page 28: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Placement  •  Demand  Side  – New  Container  

•  Supply  Side  – Where?  – Placement  Strategy  – Provisioning  Strategy  

Page 29: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Placement  •  Placement  Strategies  – Depth  First  – Breadth  First  – CPU  Usage  – Affinity  or  An1  Affinity  – Memory  or  CPU  Core  Availability  

Page 30: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Placement  •  Provisioning  Strategy  – New  Docker  Host  Loca1on  

•  Constraints  – Docker  Infrastructure  Constraints  –  En1ty  or  Applica1on  Constraints  

•  User  Defined  Strategies  •  Intelligent  Container  Orchestra1on  

Page 31: Deploying Complex Applications on Docker using Apache Brooklyn

Clocker  Placement  •  Determinis1c  •  Simple  – Predicate  and  Comparator  

docker.container.strategies:      -­‐  $brooklyn:object:              type:  "brooklyn.location.docker.strategy.MaxContainersPlacementStrategy”              brooklyn.config:                  maxContainers:  16      -­‐  $brooklyn:object:              type:  "brooklyn.location.docker.strategy.CpuUsagePlacementStrategy”              brooklyn.config:                  maxCpu:  0.75  

Page 32: Deploying Complex Applications on Docker using Apache Brooklyn

Container  Management  •  Sources  – Docker  Image  Defini1on  – Docker  Hub  – Dockerfile  – Brooklyn  En1ty  Defini1on  

•  Create  Image  Automa1cally  

Page 33: Deploying Complex Applications on Docker using Apache Brooklyn

Container  Management  id:  dockerfile-­‐mysql  name:  "Docker  Hub  MySQL  Application"  origin:  "https://registry.hub.docker.com/_/mysql/"  locations:  -­‐  my-­‐docker-­‐cloud  services:  -­‐  serviceType:          brooklyn.entity.container.docker.application.DockerfileApplication      id:  mysql      name:  "MySQL"      brooklyn.config:          docker.dockerfile.url:              file://Users/grkvlt/Git/docker-­‐library/mysql/5.6/          env:              MYSQL_ROOT_PASSWORD:  "s3cr3t"      

Page 34: Deploying Complex Applications on Docker using Apache Brooklyn

Container  Management  •  Installa1on  of  Services  – Defined  by  Brooklyn  or  Dockerfile  –  Common  to  all  En1ty  Instances  

•  Commit  Image  – Available  for  next  En1ty  

•  Push  Image  – Available  for  all  Hosts  

Page 35: Deploying Complex Applications on Docker using Apache Brooklyn

Networking  •  Shared  Weave  LAN  – Common  to  All  Containers  – Private  (Link  Local)  Addresses  

•  Clocker  Controls  IP  Alloca1on  – Applica1ons  Segmented  by  CIDR  

•  Docker  Port  Forwarding  Access  

Page 36: Deploying Complex Applications on Docker using Apache Brooklyn

Networking  •  S1ll  First  Steps…  •  Name  Resolu1on  – BIND  and  DNSmasq  – Needed  for  JMX  et  al  

•  Enables  Many  More  En11es  •  But  Needs  Tested!  

Page 37: Deploying Complex Applications on Docker using Apache Brooklyn

Demonstra3on  

Page 38: Deploying Complex Applications on Docker using Apache Brooklyn
Page 39: Deploying Complex Applications on Docker using Apache Brooklyn
Page 40: Deploying Complex Applications on Docker using Apache Brooklyn
Page 41: Deploying Complex Applications on Docker using Apache Brooklyn

Roadmap  Now  •  Improvements  To  Networking  – DNS  and  DNSmasq  Integra1on  – Work  in  Progress  

•  Befer  GeMng  Started  – Self  Hos1ng  on  Localhost  – Brooklyn  Dockerfile  

Page 42: Deploying Complex Applications on Docker using Apache Brooklyn

Roadmap  Soon  •  Befer  Integra1on  with  Repositories  – Docker  Hub,  Ar1factory,  Quay.io  – Private  Repositories  

•  Easier  Applica1on  Defini1on  – Open  Standard?  – Kubernetes  Pods?  

Page 43: Deploying Complex Applications on Docker using Apache Brooklyn

Roadmap  Next  •  Integra1on  – Google  Kubernetes  – ClusterHQ  Flocker  – Ar1factory  

•  Improvements  – Bootstrapping  

Page 44: Deploying Complex Applications on Docker using Apache Brooklyn

Summary  •  Clocker  – Brooklyn  +  Docker  +  Jclouds  +  Weave  

•  Solves  – Docker  Networking  – Container  Placement  – Applica1on  Defini1on  

Page 45: Deploying Complex Applications on Docker using Apache Brooklyn

Audience  Ques1ons?  

1.  Where  do  you  see  Docker  networking  going?  

2.  What  about  orchestra1on?  3.  What  features  would  be  most  useful  

to  enhance  Docker  usability?  

Page 46: Deploying Complex Applications on Docker using Apache Brooklyn

Thanks!  Ques1ons?  

Page 47: Deploying Complex Applications on Docker using Apache Brooklyn

Web  Resources  

http://clocker.io/  

http://brooklyn.io/  

http://docker.io/  

http://github.com/zettio/weave/  

http://abstractvisitorpattern.co.uk/