Simulating Production with Clocker
-
Upload
andrew-kennedy -
Category
Documents
-
view
3.071 -
download
1
Transcript of Simulating Production with Clocker
![Page 1: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/1.jpg)
Using Apache Brooklyn and Docker to Simulate your
Production Environments in the Cloud
Andrew [email protected]
![Page 2: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/2.jpg)
ApacheCon Austin, TX; April 2015Andrew Kennedy @grkvlt
Simulating ProductionUsing Apache Brooklyn and Clocker to Simulate
Production Environments in the Cloud
![Page 3: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/3.jpg)
@grkvlt
Introduction• Andrew Kennedy– Clocker Project Founder and Lead Engineer– Open Source and Distributed Systems– Apache Committer for Brooklyn and Qpid– github.com/grkvlt
• Cloudsoft Corporation– Open Source Application Management Specialists
![Page 4: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/4.jpg)
@grkvlt
Agenda1. Clocker Introduction2. What is a Docker Cloud?3. Demonstration4. Clocker Applications5. Simulating Production?6. Questions
![Page 5: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/5.jpg)
Clocker Introduction
![Page 6: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/6.jpg)
![Page 7: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/7.jpg)
@grkvlt
What does it do?
1. Spins up and Manages Docker Clouds
2. Serves up Containers on Demand3. Manages Composite Application
Deployments on Docker
![Page 8: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/8.jpg)
@grkvlt
What does it provide?• Multi Host and Multi Container Applications• Seamless Networking– Communication Between Services
• Orchestration and Clustering– Control of Containers– Container Management
![Page 9: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/9.jpg)
@grkvlt
Who is using it?• Testing and Proof of Concept Stage– Financial Services– Insurance
• Production– Multi-‐tenant Application Trial– Container per service– Ideally suited to the Clocker model
![Page 10: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/10.jpg)
@grkvlt
Where can I find it?• Open Source on GitHub• Apache 2.0 Licensed• http://clocker.io
• Status• 0.8.0 Developer Preview available now• 0.8.0 Release at Docker Meetup this week!
![Page 11: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/11.jpg)
What is a Docker Cloud?
![Page 12: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/12.jpg)
@grkvlt
Docker Cloud
1. On-‐demand2. Multi-‐Tenant3. Hardware Independent4. Application Driven
![Page 13: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/13.jpg)
@grkvlt
Clocker and Brooklyn• What is it?– Brooklyn Application and Location– Uses jclouds for Docker access
• What does it provide?– First Class Docker Support in Brooklyn– Optimized Brooklyn Blueprints for Docker
![Page 14: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/14.jpg)
@grkvlt
Apache Brooklyn• Application Management Platform• Deploy, Manage and Monitor Blueprints• Provisioning, Installation and Customization• Management– AutoScaling, Resilience, Performance, Security
![Page 15: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/15.jpg)
@grkvlt
Apache jclouds• Java Cloud Library• API Agnostic• Create Virtual Machines• Docker Driver by @turlinux• Virtual Container
![Page 16: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/16.jpg)
@grkvlt
Docker• Popular• Containers– Isolation– Performance– Composable– Complex– The Future...
![Page 17: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/17.jpg)
@grkvlt
Software-‐defined Networking• Pluggable providers• Weave• Project Calico• New in 0.8.0
• DOVE• Write your own!
![Page 18: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/18.jpg)
@grkvlt
Clocker Orchestration
Docker Engine
Virtual Machine
ContainerClocker
Network SegmentSDN
Cloud
![Page 19: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/19.jpg)
Demonstration
![Page 20: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/20.jpg)
![Page 21: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/21.jpg)
@grkvlt
Features• Orchestrated Docker 1.5.0 deployment with SDN integration
• Automated attachment of containers to multiple dynamic networks
• Brooklyn application blueprints with network topology
• Docker images as Brooklyn entity source
![Page 22: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/22.jpg)
Clocker Applications
![Page 23: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/23.jpg)
@grkvlt
Clocker Features• Application Deployment– Oasis CAMP YAML Blueprint– TOSCA in Development– Docker Compose– Core Brooklyn
• Mixed Destinations– Some Virtual Machines– Some Bare Metal– Some Containers
![Page 24: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/24.jpg)
@grkvlt
Clocker Features• Docker Extensions to Brooklyn– Dockerfile or Image Specification for Installation– Placement Strategies for Containers– Create Docker Images and Networks
• Manages Docker Engine– Deployment and Management– Installation and Configuration– Software-‐Defined Networking
![Page 25: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/25.jpg)
@grkvlt
Brooklyn Blueprints• Describe Applications• OASIS CAMP Standard• List of Services• Tree Structure• Sensors, Effectors and Policies
![Page 26: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/26.jpg)
@grkvlt
Blueprint Examplename: appserver-‐w-‐policyservices:-‐ type: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
initialSize: 1memberSpec:
$brooklyn:entitySpec:type: brooklyn.entity.webapp.jboss.JBoss7Serverbrooklyn.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.warhttp.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: 10metricUpperBound: 100minPoolSize: 1maxPoolSize: 5
-‐ type: brooklyn.entity.database.mysql.MySqlNodeid: dbname: DB HelloWorld Visitorsbrooklyn.config:
datastore.creation.script.url:https://github.com/apache/incubator-‐brooklyn/raw/master/usage/launcher/src/test/resources/visitors-‐creation-‐script.sql
![Page 27: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/27.jpg)
@grkvlt
Application Components• Services• Catalog Entries• Defined by Brooklyn Code
• Policies• Sensors• Enrichers
![Page 28: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/28.jpg)
@grkvlt
Services• Brooklyn Entities• Installed by running SSH commands• Add packages or extract archive files• Run arbitrary commands
• Clocker commits image after installation
![Page 29: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/29.jpg)
@grkvlt
Container Definition• Sources– Brooklyn Entity Definition– Chef Recipe– Docker Image Definition– Dockerfile
• Create Image Automatically– Commit or Push for Reuse
![Page 30: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/30.jpg)
@grkvlt
Container Definitionid: docker-‐haproxyname: "Docker Hub HAProxy Load Balancer"origin: "https://registry.hub.docker.com/_/haproxy/"locations:-‐ my-‐docker-‐cloudservices:-‐ type: brooklyn.entity.proxy.haproxy.HAProxyController
id: haproxybrooklyn.config:
docker.image.name: haproxydocker.image.tag: 1.5.9install.dir: /usr/local/sbin/run.dir: /usr/local/etc/haproxy/network.list:-‐ dmz
![Page 31: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/31.jpg)
@grkvlt
Container Definitionid: dockerfile-‐mysqlname: "Docker Hub MySQL Database"origin: "https://registry.hub.docker.com/_/mysql/"locations:-‐ my-‐docker-‐cloudservices:-‐ type: brooklyn.entity.container.docker.application.DockerfileApplication
id: mysqlname: "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"
![Page 32: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/32.jpg)
@grkvlt
Container Definitionid: dockerfile-‐mysqlname: "Docker Hub LAMP Stack"locations:-‐ my-‐docker-‐cloudservices:-‐ type: docker:mysql:5.7.5
id: mysqlenv:
MYSQL_ROOT_PASSWORD: "s3cr3t"-‐ type: docker:grkvlt/myapp:latest
id: applicationenv:
MYSQL_HOST:$brooklyn:component("mysql").attributeWhenReady("host.hostname")
![Page 33: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/33.jpg)
@grkvlt
Container Placement• Where do we want the service to run?• Supply and Demand– Here's the locations you can use...– I want a very specific location...
• Docker Swarm– Possible future integration point...
![Page 34: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/34.jpg)
@grkvlt
Container Placement• Demand– Adding an Application– Scaling existing Application
• Requirements– Host Location– Service Resources– CPU, Memory
![Page 35: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/35.jpg)
@grkvlt
Container Placement• Supply– Choose a Host from available– Create new Host if required
• Start Container there– Set CPU and Memory– Attach to Network
![Page 36: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/36.jpg)
@grkvlt
Container Placement• Placement Strategies– Random, Depth or Breadth First– CPU or Memory Usage– Memory, CPU or Container Limits– Geographic Constraints
• User Defined– Java Predicate
![Page 37: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/37.jpg)
@grkvlt
Placement Strategy• Deterministic• 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 38: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/38.jpg)
@grkvlt
Autonomics• Brooklyn Policies• Attached to Entities in Application– Nothing Docker Specific
• Elastic Scaling– Cluster Resizing– Sensor Driven
![Page 39: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/39.jpg)
@grkvlt
Application Resilience• Service Resilience and Replacement–Restart Service and Container–Application Level, Not Infrastructure– Same as Cloud
• Snapshot Running Container for Restart
![Page 40: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/40.jpg)
@grkvlt
Headroom• Ensure resources available• Based on MaxContainers strategy limit– Or Percentage Utilization– Or CPU and RAM allocation
• Scale Docker Host Cluster Automatically – Add new Docker hosts– Remove empty Docker hosts
![Page 41: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/41.jpg)
@grkvlt
Software-‐Defined Networking• Needed for Seamless Provisioning• Host to Host Communication– Same LAN Segment– No Port Forwarding– Natural Application Configuration
• Initial Driver was EPMD Applications
![Page 42: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/42.jpg)
@grkvlt
Networking Providers• Implementation Agnostic– L2 over L3 etc.– Similar to Hypervisor in Clouds
• Generic Interfaces– Host Component– Service Component (or Endpoint)
![Page 43: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/43.jpg)
@grkvlt
Clocker Networking
ContainerHost
SDN Bridge
Container
Internet
SDN Gateway
![Page 44: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/44.jpg)
@grkvlt
Networking Capabilities• Provide Multiple Networks– Single Application or Shared– Private Addresses– Segmented by CIDR
• Docker Port Forwarding Access– Debug Mechanism
![Page 45: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/45.jpg)
Simulating Production?
![Page 46: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/46.jpg)
@grkvlt
Application Development Cycle1. Development2. Continuous Integration3. UAT or Testing4. Staging5. Production
![Page 47: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/47.jpg)
@grkvlt
Dev Cycle Reality• My Laptop• Jenkins Server• Bob's Laptop• Some spare VMs we found...• The best we can afford– until next year's budget...?
![Page 48: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/48.jpg)
@grkvlt
Application Development• Same Application• Different Infrastructures– Very Different
• So ends up...– Different Application
![Page 49: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/49.jpg)
@grkvlt
Application Development• Which means–We aren't testing the right things– Production is probably broken under load or scale– Ops are unhappy ;(
![Page 50: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/50.jpg)
@grkvlt
Different Application• Very Different!– No resilient pairs– No failover– No load balancer– No Clustering– Single network, namespace, domain, etc.
![Page 51: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/51.jpg)
@grkvlt
How can we fix this?• Perfect worlds• All environments identical• Staging is an exact copy of production– Ready for App and Infra cut-‐over
• UAT is Staging, with anonymized data• And so on, rolling through environments
![Page 52: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/52.jpg)
@grkvlt
How can we fix this?• CI becomes CD– Dedicated production-‐level environment for builds– Successful builds promoted to UAT
• Test and Dev...?– You have to make some sacrifices ;)– But will try and test the HA mechanism and so on in isolation
– But alt least Ops are happy
![Page 53: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/53.jpg)
@grkvlt
How can we fix this?• Imperfect world• Or, the DevOps way
– We don't have enough money for six copies of our architecture– Particularly at scale or with large data sets– So we fake it!
• The important thing is our architecture– It defines the application completely– We describe this once in a blueprint– And then deploy to our various environments
![Page 54: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/54.jpg)
@grkvlt
Clocker and DevOps• Application blueprint• Describes– Services
• Configuration– Policies– Networks– Hierarchy
• Connections• Can be deployed to any Brooklyn Location
![Page 55: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/55.jpg)
@grkvlt
Clocker and DevOps• Locations include– Vagrant or other VMs on my laptop– Apache jclouds supported providers
• On premise OpenStack CI cloud• Public SoftLayer environment• ... choose your favourite
– Docker Clouds using Clocker• Containers instead of VMs• Automatically• No input from developer required
![Page 56: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/56.jpg)
@grkvlt
There's More Than One Way...• Could use Clocker and Docker everywhere– Generate Docker image during build process– Size underlying VMs appropriately– Allocate different CPU/memory to containers– Deploy images to Clocker everywhere
• Many enterprises not yet ready for this...
![Page 57: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/57.jpg)
Thank You!Questions?
![Page 58: Simulating Production with Clocker](https://reader030.fdocuments.us/reader030/viewer/2022012908/55a5ab741a28abaf238b4575/html5/thumbnails/58.jpg)
@grkvlt
Web Resourceshttp://clocker.io/
http://brooklyn.io/
http://docker.io/
http://weave.works/
http://projectcalico.org/
http://abstractvisitorpattern.co.uk/