Slides

Clocker How to Train Your Docker Cloud QCon London 2015; Docker Track Andrew Kennedy @grkvlt Introduc/on •  Andrew Kennedy –  Clocker Project Founder and Lead Engineer –  Open Source and Distributed Systems –  github.com/grkvlt •  CloudsoG Corpora/on –  Open Source Applica/on Management Specialists –  We’re Hiring… @grkvlt Agenda •  Clocker Introduc/on •  What is a Docker Cloud? •  Training a Docker Cloud •  Demonstra/on •  Roadmap @grkvlt Clocker IntroducBon What does it do? 1.  Spins up and Manages Docker Clouds 2.  Serves up Containers on Demand 3.  Manages Composite Applica/on Deployments on Docker @grkvlt What does it provide? •  Mul/ Host and Mul/ Container Applica/ons •  Seamless Networking –  Communica/on Between Services •  Orchestra/on and Clustering –  Control of Containers –  Container Management @grkvlt Who is using it? •  Tes/ng and Proof of Concept Stage –  Financial Services –  Insurance •  Produc/on –  Mul/-­‐tenant Applica/on Trial –  Container per service –  Via IBM BlueMix @grkvlt Where can I find it? •  Open Source •  Apache 2.0 Licensed •  h[p://clocker.io •  Status •  0.7.0 Beta Release •  0.8.0-­‐SNAPSHOT Development @grkvlt What is a Docker Cloud? Clocker and Brooklyn •  What is it? –  Brooklyn Applica/on –  Brooklyn Loca/on •  What does it provide? –  First Class Docker Support in Brooklyn –  Op/mized Brooklyn Blueprints for Docker @grkvlt Apache Brooklyn •  Apache Brooklyn –  Open Source –  Java –  Donated to the Apache SoGware Founda/on –  ASF Incubator Status Apache Brooklyn • 
• 
• 
• 
Applica/on Management Pla_orm Deploy, Manage and Monitor Blueprints Provisioning, Installa/on and Customiza/on Management –  AutoScaling, Resilience, Performance, Security @grkvlt Apache jclouds •  Java Cloud Library •  API Agnos/c –  CloudStack, OpenStack, AWS EC2, GCE… •  Create Virtual Machines –  Return SSH Endpoint –  Manage Proper/es Apache jclouds •  Drivers for REST APIs •  Docker Driver –  Wri[en by @turlinux •  Virtual Container –  Using SSH Daemon –  Same Endpoint Type as VM –  Composi/on on any Image or Dockerfile @grkvlt Docker •  Popular –  Large Ecosystem –  Growing –  Complex •  Containers –  Isola/on –  Performance –  Composable @grkvlt Docker @grkvlt Brooklyn Blueprints • 
• 
• 
• 
• 
Describe Applica/ons OASIS CAMP Standard List of Services Tree Structure Sensors, Effectors and Policies @grkvlt Blueprint Example name: appserver-­‐w-­‐policy services: -­‐ type: brooklyn.entity.webapp.ControlledDynamicWebAppCluster initialSize: 1 memberSpec: $brooklyn:entitySpec: type: brooklyn.entity.webapp.jboss.JBoss7Server brooklyn.config: wars.root: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-­‐example-­‐hello-­‐world-­‐sql-­‐webapp/0.6.0/brooklyn-­‐example-­‐hello-­‐world-­‐sql-­‐
webapp-­‐0.6.0.war http.port: 8080+ java.sysprops: brooklyn.example.db.url: $brooklyn:formatString("jdbc:%s%s?user=%s\\&password=%s", component("db").attributeWhenReady("datastore.url"), "visitors", "brooklyn", "br00k11n") brooklyn.policies: -­‐ policyType: brooklyn.policy.autoscaling.AutoScalerPolicy brooklyn.config: metric: $brooklyn:sensor("brooklyn.entity.webapp.DynamicWebAppCluster", "webapp.reqs.perSec.windowed.perNode") metricLowerBound: 10 metricUpperBound: 100 minPoolSize: 1 maxPoolSize: 5 -­‐ type: brooklyn.entity.database.mysql.MySqlNode id: db name: DB HelloWorld Visitors brooklyn.config: datastore.creation.script.url: https://github.com/apache/incubator-­‐brooklyn/raw/master/usage/launcher/src/test/resources/visitors-­‐creation-­‐script.sql @grkvlt Applica/on Management •  Policies •  Sensor Data Driven •  Auto Scaling •  Cluster Management •  Resilience and Failover •  Follow the Sun @grkvlt Docker Cloud •  Brooklyn Blueprint for Docker Cluster •  Docker Engine on Cloud VM –  Configura/on for TLS Cer/ficates –  Setup Volumes (Logging?) –  Install Agents (Security? SDN?) @grkvlt Docker Cloud 1. 
2. 
3. 
4. 
@grkvlt On-­‐demand Mul/-­‐Tenant Hardware Independent Applica/on Level Architecture @grkvlt Clocker Features •  Applica/on Deployment –  Oasis CAMP YAML Blueprint –  TOSCA in Development –  Same as Core Brooklyn •  Mixed Des/na/ons –  Some Virtual Machines –  Some Bare Metal –  Some Containers @grkvlt Clocker Features •  Docker Extensions to Brooklyn –  Dockerfile or Image Specifica/on for Installa/on –  Placement Strategies for Containers –  Create Docker Images and Networks •  Manages Docker Engine –  Deployment and Management –  Installa/on and Configura/on –  SoGware-­‐Defined Networking @grkvlt Clocker Orchestra/on Clocker @grkvlt Cloud Virtual Machine Docker Engine Container SDN Network Segment Training a Docker Cloud Training…? •  Container Management •  Placement and Provisioning •  Autonomics –  Policies and Scaling •  Headroom •  Networks @grkvlt Container Management •  Sources –  Docker Image Defini/on –  Docker Hub –  Dockerfile –  Brooklyn En/ty Defini/on •  Create Image Automa/cally –  Commit or Push for Reuse @grkvlt Container Management •  Installa/on of Services –  Defined by Brooklyn or Dockerfile –  Common to all En/ty Instances •  Commit Image –  Available for next En/ty •  Push Image –  Available for all Hosts @grkvlt Container Management id: dockerfile-­‐mysql name: "Docker Hub MySQL Database" origin: "https://registry.hub.docker.com/_/mysql/" locations: -­‐ my-­‐docker-­‐cloud services: -­‐ type: brooklyn.entity.container.docker.application.DockerfileApplication id: mysql name: "MySQL" brooklyn.config: docker.dockerfile.url: "https://s3-­‐eu-­‐west-­‐1.amazonaws.com/brooklyn-­‐clocker/mysql-­‐5.6.tgz" docker.container.environment: MYSQL_ROOT_PASSWORD: "s3cr3t” @grkvlt Container Management id: dockerfile-­‐mysql name: "Docker Hub LAMP Stack" locations: -­‐ my-­‐docker-­‐cloud services: -­‐ type: docker:mysql:5.7.5 id: mysql env: MYSQL_ROOT_PASSWORD: "s3cr3t" -­‐ type: docker:grkvlt/myapp:latest id: application env: MYSQL_HOST: component(”mysql").attributeWhenReady("host.hostname") @grkvlt Container Placement •  Demand –  Adding an Applica/on –  Scaling exis/ng Applica/on •  Requirements –  Host Loca/on –  Service Resources –  CPU, Memory @grkvlt Container Placement •  Supply –  Choose a Host from available –  Create new Host •  Start Container –  Set CPU and Memory –  A[ach to Network @grkvlt Container Placement •  Placement Strategies –  Filter Hosts –  Sort Hosts •  Informa/on from – 
– 
– 
– 
@grkvlt Docker Underlying Machine Cloud Environment En/ty or Service Container Placement •  Placement Strategies –  Random, Depth or Breadth First –  CPU or Memory Usage –  Memory, CPU or Container Limits –  Geographic Constraints •  User Defined –  Java Predicate @grkvlt Placement Strategy •  Determinis/c •  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 @grkvlt Container Provisioning •  Provisioning Strategy –  New Docker Host Loca/on •  Constraints –  Docker Infrastructure Constraints –  En/ty or Applica/on Constraints •  User Defined Strategies •  Intelligent Container Orchestra/on @grkvlt Autonomics •  Brooklyn Policies •  A[ached to En//es in Applica/on –  Nothing Docker Specific •  Elas/c Scaling –  Cluster Resizing –  Sensor Driven @grkvlt Applica/on Resilience •  Service Resilience and Replacement –  Restart Service and Container –  Applica/on Level, Not Infrastructure –  Same as Cloud •  Could be Integrated Further –  Snapshot Running Container for Restart @grkvlt Headroom •  Ensure resources available •  Based on MaxContainers strategy limit –  Or Percentage U/lisa/on –  Or CPU and RAM alloca/on •  Scale Docker Host Cluster Automa/cally –  Add new Docker hosts –  Remove empty Docker hosts @grkvlt SoGware-­‐Defined Networking •  Needed for Seamless Provisioning •  Host to Host Communica/on –  Same LAN Segment –  No Port Forwarding –  Natural Applica/on Configura/on •  Ini/al Driver was EPMD Applica/ons @grkvlt Networking Providers •  Standardized Interfaces •  Pluggable Providers –  Weave –  Metaswitch Calico –  IBM OpenDOVE –  Others? @grkvlt Networking Providers •  Implementa/on Agnos/c –  L2 over L3 etc. –  Similar to Hypervisor in Clouds •  Generic Interfaces –  Host Component –  Service Component (or Endpoint) @grkvlt Networking Capabili/es •  Provide Mul/ple Networks –  Single Applica/on or Shared –  Private Addresses –  Segmented by CIDR •  Docker Port Forwarding Access –  Debug Mechanism @grkvlt Clocker Networking SDN Gateway Internet Host @grkvlt SDN Bridge Container Container Networking Capabili/es •  IP Pool Controlled by Clocker •  Clocker Controls Subnet Alloca/on –  Applica/ons Segmented by CIDR •  Delegate to SDN or Cloud –  Bring your own IP •  Docker Port Forwarding Access @grkvlt Future Capabili/es •  Adding More SDN Providers •  Name Resolu/on –  BIND and DNSmasq or Weave DNS –  Needed for JMX et al –  Enables Many More En//es •  Adding More Supported Blueprints @grkvlt Virtual Network En/ty •  New Clocker En/ty •  Provisions a Virtual Network •  Looks for NetworkProvisioningExtension –  Registered in DockerLoca/on by SDN Provider –  Could also add to JcloudsLoca/on for Clouds •  Part of Applica/on Blueprint @grkvlt Network Provisioning •  Create Named Virtual Networks •  Uses Available Provider –  Currently Weave, Calico and IBM Supported -­‐ type: brooklyn.networking.VirtualNetwork networkId: my-­‐application cidr: 192.168.12.0/24 gateway: 192.168.12.1 dnsServers: -­‐ 8.8.8.8 brooklyn.config: sdn.example.securityGroup: "my-­‐security-­‐group" @grkvlt Network Provisioning •  Allow Minimal (Zero!) Configura/on •  Use Sensible Defaults –  Also SDN Specific Configura/on •  Allocate Address Space on Demand -­‐ type: brooklyn.networking.VirtualNetwork networkId: database-­‐net cidr: 192.168.34.0/24 -­‐ type: brooklyn.networking.VirtualNetwork networkId: couchbase-­‐net @grkvlt Network Provisioning •  A[ach Containers to Networks brooklyn.config: network.list: -­‐ couchbase-­‐net -­‐ management-­‐net •  Create Networks as Required •  Also A[ach to VMs and Metal –  Where Supported @grkvlt DemonstraBon Features •  Orchestrated Docker 1.5.0 deployment with Weave SDN integra/on •  Automated a[achment of containers to mul/ple dynamic networks •  Brooklyn applica/on blueprints with network topology @grkvlt Clocker Roadmap Roadmap •  Latest Docker 1.5.0 Feature Support –  Stats command, Read-­‐only containers, Named Dockerfiles and more •  Swarm –  Add Clocker as an extension to Swarm itself? –  Or add features to exis/ng jclouds driver? •  Compose –  Support as alterna/ve blueprin/ng language @grkvlt Roadmap •  Networking –  DNS and DNSmasq Integra/on –  Rancher Integra/on –  Open vSwitch Integra/on •  Gemng Started –  Clocker Dockerfile @grkvlt Roadmap •  Repositories –  Docker Enterprise Hub –  Bintray, Ar/factory, Quay.io –  Private Repositories •  Applica/on Defini/on –  TOSCA –  Docker Compose @grkvlt Roadmap •  Plugin API will be helpful •  Also projects like Powerstrip •  Provide services to Docker this way •  Orchestra/on •  Policies •  Consume wider range of services •  Networking and Storage @grkvlt Summary •  Clocker –  Brooklyn + jclouds + Docker + Weave + … –  @clockercentral •  Solves –  Composite Applica/on Management –  Docker Cloud Networking –  Container Placement and Provisioning @grkvlt QuesBons? Web Resources http://clocker.io/ http://brooklyn.io/ http://docker.io/ http://github.com/zettio/weave/ http://abstractvisitorpattern.co.uk/ @clockercentral @brooklyncentral @cloudsoft @grkvlt