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. Jason Hansen
 jhansen@deis.com / @slackX

  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
  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
  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
  5. 53 Known Customers 30 in Production December 2015

  6. • Deis v1 Success brought lessons at scale • Fleet

    scheduler manageable but not ideal • V1 Scheduler Evaluation: Swarm, Mesos, Kubernetes
  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
  8. Kubernetes Container Cluster Manager Properties: Dynamic container placement Loose coupling

    via labels Name Resolution / Service Discovery
  9. Kubernetes Declarative API Simple Abstractions Vibrant Community Informed by Years

    of Experience Promotes Loose Coupling
  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 }
  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
  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
  13. deis scale web=5 git push deis master WORKFLOW deis ps

    deis config:set key THING=foo
  14. WORKFLOW Log aggregation Source to Image via Builder Release and

    Rollback Edge Routing
  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
  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
  17. HTTPS://HELM.SH

  18. Demo!

  19. Questions?

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

  21. None
  22. Name: my-app-xaj712 Labels: version=1 app=my-app Pod

  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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