Kubernetes SF Meetup January 2016

Kubernetes SF Meetup January 2016

Slides for my talk "Building a PaaS on Kubernetes" for the January 2016 Kubernetes SF meetup #K8Ssf.

Db60ccd5a0d573877760f059202d06ed?s=128

Jason Hansen

January 12, 2016
Tweet

Transcript

  1. 2.

    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
  2. 3.

    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
  3. 4.

    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
  4. 6.

    • Deis v1 Success brought lessons at scale • Fleet

    scheduler manageable but not ideal • V1 Scheduler Evaluation: Swarm, Mesos, Kubernetes
  5. 7.

    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
  6. 10.

    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 }
  7. 11.

    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
  8. 12.

    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
  9. 13.
  10. 15.

    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
  11. 16.

    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
  12. 18.
  13. 21.
  14. 23.

    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
  15. 24.

    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
  16. 25.

    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
  17. 26.

    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
  18. 27.

    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
  19. 28.

    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
  20. 29.

    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
  21. 30.

    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
  22. 31.

    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
  23. 32.

    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
  24. 33.

    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