Slide 1

Slide 1 text

Jason Hansen
 [email protected] / @slackX

Slide 2

Slide 2 text

Virtual Infrastructure Layer 2 Physical Infrastructure Layer 1 Operating System Layer 3 Container Engine Layer 4 Scheduling Layer 5 Orchestration Layer 6 Workflow Layer 7 Deis, OpenShift Kubernetes, Marathon Mesos, Omega (k8s) Docker, Rocket, OSv Ubuntu, RHEL, CoreOS, … vSphere, EC2, GCE, Azure, … Raw compute, network, storage

Slide 3

Slide 3 text

400,000 800,000 1,200,000 1,600,000 Feb 2015 Mar 2015 Apr 2015 May 2015 Jun 2015 Jul 2015 Aug 2015 Sep 2015 Oct 2015 Nov 2015 Dec 2015 1,600,000 Downloads! December 2015

Slide 4

Slide 4 text

Project Growth 1,500 3,000 4,500 6,000 Jan 2015 Feb 2015 Mar 2015 Apr 2015 May 2015 Jun 2015 Jul 2015 Aug 2015 Sep 2015 Oct 2015 Nov 2015 Dec 2015 Project Stars Pull Requests Forks 2,031 Pull Requests 823 Forks 5,158 Stars December 2015

Slide 5

Slide 5 text

53 Known Customers 30 in Production December 2015

Slide 6

Slide 6 text

• Deis v1 Success brought lessons at scale • Fleet scheduler manageable but not ideal • V1 Scheduler Evaluation: Swarm, Mesos, Kubernetes

Slide 7

Slide 7 text

Fleet Swarm Mesos K8S Resource
 Aware No Yes Yes Yes Maturity 1.0 1.0 Very 1.1 Scale 3-25 (etcd2) 1000* 1000+ 100+ Resource
 Reqs. Small Small Large Small / Medium Community Medium Small / Growing Large Large / Growing Complexity Low Low High Medium

Slide 8

Slide 8 text

Kubernetes Container Cluster Manager Properties: Dynamic container placement Loose coupling via labels Name Resolution / Service Discovery

Slide 9

Slide 9 text

Kubernetes Declarative API Simple Abstractions Vibrant Community Informed by Years of Experience Promotes Loose Coupling

Slide 10

Slide 10 text

Virtual Infrastructure Layer 2 Physical Infrastructure Layer 1 Operating System Layer 3 Container Engine Layer 4 Scheduling Layer 5 Orchestration Layer 6 Workflow Layer 7 }

Slide 11

Slide 11 text

Public / Private Cloud / Bare Metal Kubernetes Deis Workflow + Kubernetes: Overview Simple REST API Source to Image Builder Log Aggregation Application Release & Rollback Authn / Authz Edge Routing Deis Workflow Developers deis CLI git push deis master Operators deisctl CLI Helm kubectl

Slide 12

Slide 12 text

Public / Private Cloud / Bare Metal Deis Managed App C Deis Managed App D Deis Managed App B Kubernetes Workload A Kubernetes Workload B Kubernetes Workload C Kubernetes Workload D Deis Workflow + Kubernetes: Detail Package Management HELM Deis Workflow & Managed Apps Simple REST API Source to Image Builder Log Aggregation Application Release & Rollback Authn / Authz Edge Routing Kubernetes Cluster Operators deisctl CLI Helm kubectl Developers deis CLI git push deis master

Slide 13

Slide 13 text

deis scale web=5 git push deis master WORKFLOW deis ps deis config:set key THING=foo

Slide 14

Slide 14 text

WORKFLOW Log aggregation Source to Image via Builder Release and Rollback Edge Routing

Slide 15

Slide 15 text

namespace=deis deis-router LoadBalancer: AWS ELB: 80, 443, 2222 namespace=app-a SVC: app-a Pod: app-a-v1-b Pod: app-a-v1-a RC: app-a-v1 deis-database deis-workflow deis-minio deis-registry deis-builder deis-etcd Kubernetes Cluster

Slide 16

Slide 16 text

Compute: Cloud / Bare Metal Provisioning Compute OS Scheduling Orchestration Workflow Software Defined Networking Software Defined Storage } Container Image Registry Customer App CI Container Runtime Containers Image Simple REST API Authn / Authz Edge Routing Release and Rollback Log Aggregation Source to Image Alerting Monitoring Containers Image App Definition Service Binding

Slide 17

Slide 17 text

HTTPS://HELM.SH

Slide 18

Slide 18 text

Demo!

Slide 19

Slide 19 text

Questions?

Slide 20

Slide 20 text

Alpha @ https://github.com/deis/workflow Thanks!

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Name: my-app-xaj712 Labels: version=1 app=my-app Pod

Slide 23

Slide 23 text

ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod

Slide 24

Slide 24 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod

Slide 25

Slide 25 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod Name: my-app-123hfa Labels: version=canary app=my-app Pod

Slide 26

Slide 26 text

Kubernetes Service Development Timeline Replication Controller: v1 App Pod App Pod Release 1 Re Deis Workflow Edge Routing + SSL Termination Deis Workflow: Deploying to Kubernetes Customers Application Requests Developers git push deis master

Slide 27

Slide 27 text

Kubernetes Service Development Timeline Replication Controller: v1 App Pod App Pod Release 1 Replication Controller: v2 App Pod App Pod Release 2 Re Deis Workflow Edge Routing + SSL Termination Deploying to Kubernetes

Slide 28

Slide 28 text

Kubernetes Service Replication Controller: v1 App Pod App Pod Release 1 Replication Controller: v2 App Pod App Pod Release 2 Replication Controller: v3 App Pod App Pod Release3 w nation bernetes

Slide 29

Slide 29 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod

Slide 30

Slide 30 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 1 Label Selectors: version=2 app=my-app ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod

Slide 31

Slide 31 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 1 Label Selectors: version=2 app=my-app ReplicationController Replicas: 2 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-lka2ja Labels: version=1 app=my-app Pod Name: my-app-19sdfd Labels: version=2 app=my-app Pod

Slide 32

Slide 32 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 2 Label Selectors: version=2 app=my-app ReplicationController Replicas: 1 Label Selectors: version=1 app=my-app Name: my-app-xaj712 Labels: version=1 app=my-app Pod Name: my-app-19sdfd Labels: version=2 app=my-app Pod Name: my-app-xaj712 Labels: version=2 app=my-app Pod

Slide 33

Slide 33 text

Service: My App Name: my-app Label Selectors: app=my-app ReplicationController Replicas: 2 Label Selectors: version=2 app=my-app ReplicationController Replicas: 0 Label Selectors: version=1 app=my-app Name: my-app-19sdfd Labels: version=2 app=my-app Pod Name: my-app-0q2a87 Labels: version=2 app=my-app Pod