cloud foundry diego: the new cloud runtime
TRANSCRIPT
Cloud Foundry Diego: The New Cloud Runtime
Heterogeneous Container Scheduling, Docker & More
How many people here are already running containers?
Open source and 6 commercial distros Global 2000 focus
Launched 2011
Cloud Native Application Platform
A single API for managing applications on 4 infrastructures
32,000 meetup members 2,100 committers
50+ foundation companies
Major enterprise adoption: Huawei running 5,000+ apps
GE next-gen Internet of Things platform Baidu has 700+ CF devs
$ cf scale
David Soul Platform Technical Marketing, Pivotal
@davidsoul
1. Designed for openness and extensibility
2. Flexible cloud primitives and processes
3. A platform that can keep promises
What Makes This Runtime Interesting?
An Extensible Cloud Platform
New Workloads New Environments
Develop and administer thousands of cloud native applications with heterogeneous
workloads and architectures
The Problem
1. Design!
2. Build!
3. Configure!
4. Deploy!
5. Run!1. Provision!
2. Authorize!
3. Integrate!
4. Monitor!5. Audit!
6. Scale!
7. Recover!
8. Upgrade! Dev Loop
Ops Loop
• Role-based to resource access
• Run code on demand
• Coordinate cross-service configuration
• Route public requests
• Read and write persistent data
• Record internal and external events
• Isolate resources and failures
• Measure performance/health
• Detect and determine failure
• Failure recovery
• Work tomorrow
• Add and remove resources
Runtime Capabilities
The Diego Runtime
A distributed system that orchestrates containerized workloads
Core Runtime Concepts
Cells Container Execution
Brain Container Scheduler & Health Monitor
BBS Shared Runtime State
Container Scheduler & Health Monitor
Container Execution
Shared Runtime State
Auctions
Rep
Auctioneer
Desired Tasks
Desired Processes
Executor
Cell
Garden Containers
Bids
Rep
Executor
Cell
Garden Containers
Platform Abstractions
NSync
Layers of Abstraction
NSync
Generic Specific
Garden Windows Garden Linux
Garden API
Garden Container Abstraction A platform-neutral API for containerization
Run Dockerized applications
Run .NET applications
Run workers and tasks
Develop Cloud Foundry applications locally
Extending the Cloud Foundry Runtime
How can I run Dockerized applications?
Extend the deployment API to run a Docker image on our native Garden-Linux container backend.
cf push APP DOCKER-REPO
POST /containers { "bind_mounts": [], "grace_time": 1200, "handle": 'user-supplied-handle', "network": 'network', "rootfs": 'rootfs', "properties": [], "env": [] } 200 Ok { handle: 'handle-of-created-container' }
Deploy the container image root filesystem.
Attempt to parse container image metadata for memory, disk, user,
launch command and port.
Run Docker Images on Linux Cells
Garden Linux Cells
Docker Linux Cells
How can I run .NET applications?
Container Scheduler & Health Monitor
Windows Cells Container Execution Nodes
Shared Runtime State
Service Discovery & Monitoring
Windows Cells
Garden Linux Cells
.NET Windows Cells
How can I run workers and tasks?
New Workload Types
Tasks
A single unit of work
Runs at most once
N long running instances
Distributed across cells for HA
Monitored and restarted
Long Running Processes
RunAction: run process in container
DownloadAction: fetches and extract archive
UploadAction: POST file from container to URL
ParallelAction: run multiple actions in parallel
SerialAction: runs multiple actions in order
EmitProgressAction: wraps action and logs progress
TimeoutAction: wrap action and fail if timed out
TryAction: wrap action and ignore errors
Workload Primitives
Desired Task
{ ... "rootfs": "docker:///docker-org/docker-image", "env": [ {"name": "ENV_NAME_A", "value": "ENV_VALUE_A"}, {"name": "ENV_NAME_B", "value": "ENV_VALUE_B"} ], "cpu_weight": 57, "disk_mb": 1024, "memory_mb": 128, "privileged": true, "action": ACTION(s) TO RUN, ... }
Desired LRP
{ ... "instances": 17, "rootfs": "VALID-ROOTFS", "env": [ {"name": "ENV_NAME_A", "value": "ENV_VALUE_A"}, {"name": "ENV_NAME_B", "value": "ENV_VALUE_B"} ], "cpu_weight": 57, "disk_mb": 1024, "memory_mb": 128, "privileged": true, "setup": ACTION, "action": ACTION, "monitor": ACTION, "start_timeout": N seconds, "ports": [8080, 5050], ... }
How can I develop Cloud Foundry applications on my local machine?
• Single-tenant • Everyone is ‘cluster root’ • Wide-open networking • Not all components are HA • Red-black upgrades • No data services
• Multi-tenancy with resource quotas • Role-based access control • Application security groups • Highly-available components • Zero-downtime, rolling upgrades • Backing data service orchestration
Repackaging the Runtime
Production usage with 20+ VMs
Local development on a single host
10,000 “real app” container instances (100 per cell)
4,000 concurrent tasks
4,000-instance LRPs
Scalability
Runtime testing with tens of thousands of containers:
Garden Windows Garden Linux
Garden API
Multiple Workloads
Multiple Environments
Garden Linux Cells
Docker Linux Cells
.NET Windows Cells
The Extensible Cloud Platform
Tasks Docker Windows Lattice
cloudfoundry.org
Try the New Runtime Today
> LATTICE !
lattice.cf
Discussion? #cloudopen @davidsoul
Diego > LATTICE !