Building and Deploying Scalable Microservices With Kubernetes @ ITHome Modern Web Conference

01dc8e954957a10b428aa60b28c89d52?s=47 Ian Lewis
August 24, 2016

Building and Deploying Scalable Microservices With Kubernetes @ ITHome Modern Web Conference

As systems grow, using configuration management to pin applications to a specific host and use the host as the application unit doesn’t scale. Applications need to be broken up into smaller services. One application per host becomes increasingly inefficient.

Containers have opened up many new possibilities in how we can deploy our applications. Containers enable us to run a services on any host at any time and we can deploy many containers onto a single host.

Managing the containers is easy with a system like Kubernetes. This talk will help attendees wrap their minds around complex topics like distributed configuration management, service discovery, application scheduling, and resource management at scale. I will cover many concepts in Kubernetes, such as Deployments, ReplicaSets, and ConfigMaps and illustrate how developers can use these tools to deploy their services.

01dc8e954957a10b428aa60b28c89d52?s=128

Ian Lewis

August 24, 2016
Tweet

Transcript

  1. Ian Lewis Developer Advocate, Google Cloud Platform Building and Deploying

    Scalable Microservices With Kubernetes Modern WEb Conference
  2. Confidential & Proprietary Google Cloud Platform 2 Ian Lewis Developer

    Advocate - Google Cloud Platform Tokyo, Japan +Ian Lewis @IanMLewis
  3. Agenda • Monolithic Apps • Containers & Microservices • Kubernetes

    • Wrap Up
  4. Confidential & Proprietary Google Cloud Platform 4 Current Practice

  5. Confidential & Proprietary Google Cloud Platform 5 Database Batch processing

    Cache Webservers Webservers Webservers Webservers
  6. Confidential & Proprietary Google Cloud Platform 6 App

  7. 7 Requires large resources per instance Hard to scale properly

    Hard for teams to have ownership of code Hard to set up SLOs around performance and availability. Monolithic Apps 7 App
  8. Confidential & Proprietary Google Cloud Platform 8 Microservices

  9. Confidential & Proprietary Google Cloud Platform 9 App A App

    B App C App D
  10. Confidential & Proprietary Google Cloud Platform 10 App B App

    D App D App D App C App B App B App B App A App A App A App B App C App D
  11. 11 No isolation No namespacing Common libs Highly coupled apps

    and OS Shared Machines 11 kernel libs app app app app
  12. 12 Some isolation Inefficient Still highly coupled to the guest

    OS Hard to manage Virtual Machines 12 app libs kernel libs app app kernel app libs libs kernel kernel
  13. Confidential & Proprietary Google Cloud Platform 13 Containers

  14. For the last 15 years Google has been building the

    world’s fastest, most powerful infrastructure.
  15. None
  16. Cloud Technology Innovations 2012 2013 MapReduce Spanner/F1 2003 2006 2007

    2010 2011 GFS Omega Colossus Cloud Storage Dremel BigQuery Big Table Cloud Datastore Paxos impl. 2004 Cloud Bigtable
  17. Copyright 2015 Google Inc Google has been running all our

    services in Containers for over 10 years. We start over 2 billion containers every week. Images by Connie Zhou
  18. 18 Containers 18 libs app kernel libs app libs app

    libs app
  19. Fast Simple and Fast compared to VMs. Can be started

    in just a few milliseconds. Portable Can be run in a many environments. Efficiency Low overhead. Resources use by containers can be limited. Why Containers?
  20. Container Management Node Node Cluster Node ??? • How to

    deploy to multiple nodes? • How to deal with node failures? • How to deal with container failures? • How do you update your applications? • How can your containers discover and communicate with each other?
  21. http://research.google.com/pubs/pub43438.html

  22. Image by Connie Zhou

  23. job hello_world = { runtime = { cell = 'ic'

    } // Cell (cluster) to run in binary = '.../hello_world_webserver' // Program to run args = { port = '%port%' } // Command line parameters requirements = { // Resource requirements ram = 100M disk = 100M cpu = 0.1 } replicas = 5 // Number of tasks } 10000 Developer View
  24. web browsers BorgMaster link shard UI shard BorgMaster link shard

    UI shard BorgMaster link shard UI shard BorgMaster link shard UI shard Scheduler borgcfg web browsers scheduler Borglet Borglet Borglet Borglet Config file BorgMaster link shard UI shard persistent store (Paxos) Binary Developer View
  25. Hello world! Hello world! Hello world! Hello world! Hello world!

    Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Image by Connie Zhou Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world! Hello world!
  26. Confidential & Proprietary Google Cloud Platform 26 Kubernetes

  27. Enter Kubernetes Greek for “Helmsman”; also the root of the

    word “Governor” • Container orchestrator • Runs containers • Supports multiple cloud and bare-metal environments • Inspired and informed by Google’s experiences and internal systems • Open source, written in Go Manage applications, not machines
  28. CNCF(Cloud Native Computing Foundation)

  29. Confidential & Proprietary Google Cloud Platform 29 Community • Current

    stable version: 1.3 • 860+ contributors • over 16,000 github stars Project Partners
  30. Google Cloud Platform UI CLI API users master nodes etcd

    scheduler controllers master The 10000 Foot View kubelet kubelet kubelet kubelet kubelet kubelet kubelet kubelet kubelet
  31. Google Cloud Platform The 10000 Foot View etcd scheduler controller-manager

    apiserver kubelet docker kube-proxy iptables 1. User creates Deployment 2. API server saves info to etcd 3. CM finds Deployment and creates ReplicaSet, which creates Pods (unscheduled) 4. Scheduler schedules pods. 5. Kubelet sees pod scheduled to it and tells docker to run the container. 6. Docker pulls and runs the container. 1 2 6 3 5 4 Docker Hub / GCR
  32. web browsers BorgMaster link shard UI shard BorgMaster link shard

    UI shard BorgMaster link shard UI shard BorgMaster link shard UI shard Scheduler borgcfg web browsers scheduler Borglet Borglet Borglet Borg Kubernetes Borglet Config file BorgMaster link shard UI shard persistent store (Paxos) manifest.yaml Master Kubelet etcd Kubelet Kubelet Binary Docker Image Docker Hub/Private Repo Kubelet kubernetes-dashboard
  33. Google Cloud Platform observe diff act Deployments & ReplicaSets

  34. Google Cloud Platform Deployments ReplicaSet - replicas: 3 - selector:

    - app: MyApp - version: v1 Deployment - name: MyApp kubectl create ...
  35. Google Cloud Platform Deployments ReplicaSet - replicas: 4 - selector:

    - app: MyApp - version: v1 Deployment - name: MyApp kubectl create ...
  36. Google Cloud Platform Deployments ReplicaSet - replicas: 3 - selector:

    - app: MyApp - version: v1 Deployment - name: MyApp kubectl create ...
  37. Google Cloud Platform Deployments ReplicaSet - replicas: 3 - selector:

    - app: MyApp - version: v1 Deployment - name: MyApp kubectl create ...
  38. Google Cloud Platform Rolling Updates ReplicaSet - replicas: 3 -

    selector: - app: MyApp - version: v1 Deployment - name: MyApp kubectl apply ...
  39. Google Cloud Platform ReplicaSet - replicas: 3 - selector: -

    app: MyApp - version: v1 Rolling Updates ReplicaSet - replicas: 0 - selector: - app: MyApp - version: v2 Deployment - name: MyApp
  40. Google Cloud Platform ReplicaSet - replicas: 3 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 1 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  41. Google Cloud Platform ReplicaSet - replicas: 2 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 1 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  42. Google Cloud Platform ReplicaSet - replicas: 2 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 2 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  43. Google Cloud Platform ReplicaSet - replicas: 1 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 2 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  44. Google Cloud Platform ReplicaSet - replicas: 1 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  45. Google Cloud Platform ReplicaSet - replicas: 0 - selector: -

    app: MyApp - version: v1 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v2 Rolling Updates Deployment - name: MyApp
  46. Google confidential │ Do not distribute Services A group of

    pods that work together • grouped by a selector Defines access policy • “load balanced” or “headless” Gets a stable virtual IP and port • sometimes called the service portal • also a DNS name VIP is managed by kube-proxy • watches all services • updates iptables when backends change Hides complexity - ideal for non-native apps Virtual IP Client
  47. Confidential & Proprietary Google Cloud Platform 47 App B App

    D App D App D App C App B App B App B App A App A App A App B App C App D
  48. Confidential & Proprietary Google Cloud Platform 48 Demo

  49. Confidential & Proprietary Google Cloud Platform 49 Web guestbook NGWord

    Redis Guestbook
  50. Confidential & Proprietary Google Cloud Platform 50 The Right Architecture

  51. Kubernetes Schedules workloads to resources and helps you manage them.

    Microservices Build a large complex system as many small simple parts. Containers Easier dependency management & resource isolation. Why Containers?
  52. $ hello-world Photo by Connie Zhou

  53. Google Container Engine New service for cluster-based compute • Provisioned

    cluster in seconds. Fully configured. • Fine-grained control over cluster. • Designed for multi-cloud. Runs Kubernetes. Releases • Now GA!! • No additional cost for up to 5 nodes Resources • Google Container Engine: http://cloud.google.com/container-engine • Kubernetes: http://kubernetes.io
  54. Thank You