106
Containing Container Chaos with Kubernetes Bret McGowen Google @bretmcg Carter Morgan Google @_askcarter Workshop setup: http://github.com/bretmcg/kubernetes-workshop

Kubernetes 101 Workshop

Embed Size (px)

Citation preview

Page 1: Kubernetes 101 Workshop

Containing Container Chaos with Kubernetes

Bret McGowenGoogle@bretmcg

Carter MorganGoogle@_askcarter

Workshop setup: http://github.com/bretmcg/kubernetes-workshop

Page 2: Kubernetes 101 Workshop

2@kubernetesio @bretmcg @_askcarter

Agenda09:00 - 10:30 Containers and Kubernetes overview

10:30 - 10 :45 - BREAK

10:45 - 12:00 - Kubernetes 101

12:00 - 01:00 - Lunch!

01:00 - 02:30 - Kubernetes in Production

02:30 - 02:45 - BREAK

02:45 - 04:00 - Kubernetes in Production, cont’d

Page 3: Kubernetes 101 Workshop

33

What’s in this for you...

Page 4: Kubernetes 101 Workshop

44

Let's go back in time...

Page 5: Kubernetes 101 Workshop

5

Shared machines Chroots, ulimits, and nice

Noisy neighbors: a real problemLimited our ability to share

The fleet got largerInefficiency hurts more at scale

Share harder!

ca. 2002 App-specific machine poolsInefficient and painful to manage

Good fences make good neighbors

Page 6: Kubernetes 101 Workshop

6

Everything we do is about isolation

Namespacing is secondaryc.f. github.com/google/lmctfy

We evolved our system, made mistakes, learned lessons

Docker

The time is right to share our experiences, and to learn from yours

ca. 2006 Google developed cgroupsInescapable resource isolationEnables better sharing

Page 7: Kubernetes 101 Workshop

7

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

Borg - Developer View

Page 8: Kubernetes 101 Workshop

8

web browsers

BorgMaster

link shard

UI shardBorgMaster

link shard

UI shardBorgMaster

link shard

UI shardBorgMaster

link shard

UI shard

Scheduler

borgcfg web browsers

scheduler

Borglet Borglet Borglet Borglet

Config file

BorgMaster

link shard

UI shard

persistent store (Paxos)

Binary

Borg

What justhappened?

Page 9: Kubernetes 101 Workshop

9

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!

Page 10: Kubernetes 101 Workshop

10

Developer View

Page 11: Kubernetes 101 Workshop

11

Data center as one machineMachines are just resource boundaries

Page 12: Kubernetes 101 Workshop

12@kubernetesio @bretmcg @_askcarter

The App (Monolith)

nginx

monolith

Page 13: Kubernetes 101 Workshop

13@kubernetesio @bretmcg @_askcarter

The App (Microservices)

nginx

helloauth

Page 14: Kubernetes 101 Workshop

1414

Containers

Page 15: Kubernetes 101 Workshop

15@kubernetesio @bretmcg @_askcarter

Old Way: Shared Machines

No isolation

No namespacing

Common libs

Highly coupled apps and OS

kernel

libs

app

app app

app

Page 16: Kubernetes 101 Workshop

16@kubernetesio @bretmcg @_askcarter

Old Way: Virtual Machines

Some isolation

Inefficient

Still highly coupled to the guest OS

Hard to manage app

libskernel

libs

app app

kernel

app

libs

libskernel

kernel

Page 17: Kubernetes 101 Workshop

17@kubernetesio @bretmcg @_askcarter

New Way: Containers

libs

app

kernel

libs

app

libs

app

libs

app

Page 18: Kubernetes 101 Workshop

18@kubernetesio @bretmcg @_askcarter

But what ARE they?

Containers share the same operating system kernel

Container images are stateless and contain all dependencies▪ static, portable binaries▪ constructed from layered filesystems

Containers provide isolation (from each other and from the host) Resources (CPU, RAM, Disk, etc.) Users Filesystem Network

Page 19: Kubernetes 101 Workshop

19

Why containers?

• Performance• Repeatability• Isolation• Quality of service• Accounting• Portability

A fundamentally different way of managing applications

late binding vs. early binding

Images by Connie Zhou

Page 20: Kubernetes 101 Workshop

2020

Packaging and Distributing Apps demo

Page 21: Kubernetes 101 Workshop

2121

LabWorkshop setupandContainerizing your applicationhttp://github.com/bretmcg/kubernetes-workshop

Page 22: Kubernetes 101 Workshop

2222

But that's just one machine!

Discovery

ScalingSecurity

Monitoring Configuration

SchedulingHealth

Page 23: Kubernetes 101 Workshop

23

https://www.flickr.com/photos/greeblie/2224507899

We’ve been there...

23

Page 24: Kubernetes 101 Workshop

Now that we have containers...Isolation: Keep jobs from interfering with each other

Scheduling: Where should my job be run?

Lifecycle: Keep my job running

Discovery: Where is my job now?

Constituency: Who is part of my job?

Scale-up: Making my jobs bigger or smaller

Auth{n,z}: Who can do things to my job?

Monitoring: What’s happening with my job?

Health: How is my job feeling?

Page 25: Kubernetes 101 Workshop

25@kubernetesio @bretmcg @_askcarter

Kubernetes

Manage applications, not machines

Open source, container orchestrator

Supports multiple cloud and bare-metal environments

Inspired and informed by Google’s experiences and internal systems

Page 26: Kubernetes 101 Workshop

Design principles

Declarative > imperative: State your desired results, let the system actuate

Control loops: Observe, rectify, repeat

Simple > Complex: Try to do as little as possible

Modularity: Components, interfaces, & plugins

Legacy compatible: Requiring apps to change is a non-starter

Network-centric: IP addresses are cheap

No grouping: Labels are the only groups

Bulk > hand-crafted: Manage your workload in bulk

Open > Closed: Open Source, standards, REST, JSON, etc.

Page 27: Kubernetes 101 Workshop

2727

Kubernetes Made Easy demo

Page 28: Kubernetes 101 Workshop

2828

Pods

Page 29: Kubernetes 101 Workshop

29@kubernetesio @bretmcg @_askcarter

PodsLogical Application

Pod

Page 30: Kubernetes 101 Workshop

30@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

Pod

Page 31: Kubernetes 101 Workshop

31@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

Pod

nginx

monolith

Page 32: Kubernetes 101 Workshop

32@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes

Pod

nginx

monolith

Page 33: Kubernetes 101 Workshop

33@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes

Pod

nginx

monolith

NFSiSCSIGCE

Page 34: Kubernetes 101 Workshop

34@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes• Shared namespaces

Pod

nginx

monolith

NFSiSCSIGCE

Page 35: Kubernetes 101 Workshop

35@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes• Shared namespaces• One IP per pod

Pod

nginx

monolith

NFSiSCSIGCE

10.10.1.100

Page 36: Kubernetes 101 Workshop

36@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes• Shared namespaces• One IP per pod

Pod

nginx

monolith

NFSiSCSIGCE

10.10.1.100

Page 37: Kubernetes 101 Workshop

3737

LabCreating and managing podshttp://github.com/bretmcg/kubernetes-workshop

Page 38: Kubernetes 101 Workshop

3838

Health checks

Page 39: Kubernetes 101 Workshop

39@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet PodPodapp v1

Page 40: Kubernetes 101 Workshop

40@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Hey, app v1... You alive?

Node

Kubelet Podapp v1app v1

Page 41: Kubernetes 101 Workshop

41@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet Nope!Pod

app v1app v1

Page 42: Kubernetes 101 Workshop

42@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

OK, then I’m going to restart you...

Node

Kubelet Podapp v1app v1

Page 43: Kubernetes 101 Workshop

43@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet Pod

Page 44: Kubernetes 101 Workshop

44@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet Podapp v1

Page 45: Kubernetes 101 Workshop

45@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet

Hey, app v1... You alive?

Podapp v1

Page 46: Kubernetes 101 Workshop

46@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet Yes!Pod

app v1

Page 47: Kubernetes 101 Workshop

47@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Node

Kubelet Podapp v1

Page 48: Kubernetes 101 Workshop

4848

LabMonitoring and health checkshttp://github.com/bretmcg/kubernetes-workshop

Page 49: Kubernetes 101 Workshop

4949

Secrets

Page 50: Kubernetes 101 Workshop

50@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

Kubeletsecret

$ kubectl create secret generic tls-certs --from-file=tls/

Page 51: Kubernetes 101 Workshop

51@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

Kubeletpod

$ kubectl create -f pods/secure-monolith.yaml

Page 52: Kubernetes 101 Workshop

52@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

KubeletAPI

Server

Node

Kubelet Pod

Pod

Page 53: Kubernetes 101 Workshop

53@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

KubeletAPI

Server

Node

Kubelet Pod

Podsecret

Page 54: Kubernetes 101 Workshop

54@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

KubeletAPI

Server

Node

Kubelet Pod

Pod

/etc/tls

secret

Page 55: Kubernetes 101 Workshop

55@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

Kubelet

Node

Kubelet Pod

Pod

/etc/tls/etc/tls

10.10.1.100

secret

API Server

Page 56: Kubernetes 101 Workshop

56@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

KubeletAPI

Server

Node

Kubelet Pod

Pod

/etc/tls

nginx

10.10.1.100

secret

Page 57: Kubernetes 101 Workshop

5757

LabManaging application configurations and secretshttp://github.com/bretmcg/kubernetes-workshop

Page 58: Kubernetes 101 Workshop

5858

Services

Page 59: Kubernetes 101 Workshop

59@kubernetesio @bretmcg @_askcarter

Services

Node1 Node3Node2

Podhello

Service

Podhello

Podhello

Page 60: Kubernetes 101 Workshop

60@kubernetesio @bretmcg @_askcarter

ServicesPersistent Endpoint for Pods

Node1 Node3Node2

Podhello

Service

Podhello

Podhello

Page 61: Kubernetes 101 Workshop

61@kubernetesio @bretmcg @_askcarter

Services

Node1 Node3Node2

Podhello

Service

Podhello

Podhello

Persistent Endpoint for Pods• Use Labels to

Select Pods

Page 62: Kubernetes 101 Workshop

62@kubernetesio @bretmcg @_askcarter

LabelsArbitrary meta-data attached to Kubernetes object

Pod

hello

Pod

hello

labels: version: v1 track: stable

labels: version: v1 track: test

Page 63: Kubernetes 101 Workshop

63@kubernetesio @bretmcg @_askcarter

Labelsselector: “version=v1”

Pod

hello

Pod

hello

labels: version: v1 track: stable

labels: version: v1 track: test

Page 64: Kubernetes 101 Workshop

64@kubernetesio @bretmcg @_askcarter

Labelsselector: “track=stable”

Pod

hello

Pod

hello

labels: version: v1 track: stable

labels: version: v1 track: test

Page 65: Kubernetes 101 Workshop

65@kubernetesio @bretmcg @_askcarter

ServicesPersistent Endpoint for Pods• Use Labels to

Select Pods• Internal or

External IPsNode1 Node3Node2

Podhello

Service

Podhello

Podhello

Page 66: Kubernetes 101 Workshop

6666

LabCreating and managing serviceshttp://github.com/bretmcg/kubernetes-workshop

Page 67: Kubernetes 101 Workshop

6767

Recap

Page 68: Kubernetes 101 Workshop

68@kubernetesio @bretmcg @_askcarter

Kubernetes

Manage applications, not machines

Open source, container orchestrator Supports multiple cloud and bare-metal

environments

Inspired and informed by Google’s experiences and internal systems

Page 69: Kubernetes 101 Workshop

69@kubernetesio @bretmcg @_askcarter

machine-1

machine-2

machine-3

frontend middleware backend

Physical Infrastructure

Page 70: Kubernetes 101 Workshop

70@kubernetesio @bretmcg @_askcarter

frontend

middleware

backend

Kubernetes API: Unified Compute Substrate

Logical Infrastructure

Page 71: Kubernetes 101 Workshop

71@kubernetesio @bretmcg @_askcarter

Goal: Write once, run anywhere*

Don’t force apps to know about concepts that are cloud-provider-specific

Examples of this:● Network model● Ingress● Service load-balancers● PersistentVolumes

* approximately

Workload Portability

Page 72: Kubernetes 101 Workshop

72@kubernetesio @bretmcg @_askcarter

Top 0.01% of all GitHub projects

1200+ externalprojects based on

k8s

Companies Contributing

Companies Using

690+unique contributors

Community

Page 73: Kubernetes 101 Workshop

73@kubernetesio @bretmcg @_askcarter

PodsLogical Application• One or more containers

and volumes• Shared namespaces• One IP per pod

Pod

nginx

monolith

NFSiSCSIGCE

10.10.1.100

Page 74: Kubernetes 101 Workshop

74@kubernetesio @bretmcg @_askcarter

Monitoring and Health Checks

Hey, app v1... You alive?

Node

Kubelet Podapp v1app v1

Page 75: Kubernetes 101 Workshop

75@kubernetesio @bretmcg @_askcarter

Secrets and Configmaps

Kubernetes Master

etcdAPI

Server

Node

Kubeletsecret

$ kubectl create secret generic tls-certs --from-file=tls/

Page 76: Kubernetes 101 Workshop

76@kubernetesio @bretmcg @_askcarter

ServicesPersistent Endpoint for Pods• Use Labels to

Select Pods• Internal or

External IPsNode1 Node3Node2

Podhello

Service

Podhello

Podhello

Page 77: Kubernetes 101 Workshop

77@kubernetesio @bretmcg @_askcarter

LabelsArbitrary meta-data attached to Kubernetes object

Pod

hello

Pod

hello

labels: version: v1 track: stable

labels: version: v1 track: test

Page 78: Kubernetes 101 Workshop

Kubernetes in Production

Page 79: Kubernetes 101 Workshop

7979

Deployments

Page 80: Kubernetes 101 Workshop

80@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 1

Page 81: Kubernetes 101 Workshop

81@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Page 82: Kubernetes 101 Workshop

82@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Podhello

Podhello

Page 83: Kubernetes 101 Workshop

83@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Podhello

Page 84: Kubernetes 101 Workshop

84@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Podhello

Podhello

Page 85: Kubernetes 101 Workshop

85@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Podhello

Podhello

Podhello

Page 86: Kubernetes 101 Workshop

86@kubernetesio @bretmcg @_askcarter

Drive current state towards desired stateDeployments

Node1 Node2 Node3

Podhello

app: helloreplicas: 3

Podhello

Podhello

Page 87: Kubernetes 101 Workshop

8787

LabCreating and managing deploymentshttp://github.com/bretmcg/kubernetes-workshop

Page 88: Kubernetes 101 Workshop

8888

Rolling Updates

Page 89: Kubernetes 101 Workshop

89@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

ghostPod

app v1

Service

ghost

Podapp v1

Podapp v1

Page 90: Kubernetes 101 Workshop

90@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

ghostPod

app v1

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Page 91: Kubernetes 101 Workshop

91@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

ghostPod

app v1

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Page 92: Kubernetes 101 Workshop

92@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

ghostPod

app v1

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Page 93: Kubernetes 101 Workshop

93@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Page 94: Kubernetes 101 Workshop

94@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Podapp v2

Page 95: Kubernetes 101 Workshop

95@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Podapp v2

Page 96: Kubernetes 101 Workshop

96@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

ghost

Podapp v1

Podapp v1

Podapp v2

Podapp v2

Page 97: Kubernetes 101 Workshop

97@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

Podapp v1

Podapp v2

Podapp v2

Page 98: Kubernetes 101 Workshop

98@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

Podapp v1

Podapp v2

Podapp v2

Podapp v2

Page 99: Kubernetes 101 Workshop

99@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

Podapp v1

Podapp v2

Podapp v2

Podapp v2

Page 100: Kubernetes 101 Workshop

100@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

Podapp v1

Podapp v2

Podapp v2

Podapp v2

Page 101: Kubernetes 101 Workshop

101@kubernetesio @bretmcg @_askcarter

Rolling Update

Node1 Node3Node2

Service

Podapp v2

Podapp v2

Podapp v2

Page 102: Kubernetes 101 Workshop

102102

LabRolling out updateshttp://github.com/bretmcg/kubernetes-workshop

Page 103: Kubernetes 101 Workshop

103103

Implementing a CI/CD Pipeline on K8s

Page 104: Kubernetes 101 Workshop

104@kubernetesio @bretmcg @_askcarter

1. Check in code

2. Build an Image

3. Test Image

4. Push Image to registry

5. Apply change to manifest files

Automating Deployments

Page 105: Kubernetes 101 Workshop

105105

LabImplementing a CI/CD Pipeline on Kuberneteshttps://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes

Page 106: Kubernetes 101 Workshop

Thank you!

kubernetes.io

@bretmcg @_askcarter