Cloud Foundry Diego: The New Cloud Runtime Foundry Diego... · Cloud Foundry Diego: The New Cloud...

39
Cloud Foundry Diego: The New Cloud Runtime Heterogeneous Container Scheduling, Docker & More

Transcript of Cloud Foundry Diego: The New Cloud Runtime Foundry Diego... · Cloud Foundry Diego: The New Cloud...

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 !