managed containers, open source, and google - riccardo carlesso - codemotion milan 2014

34
Kubernetes: Managing Containers the Google way CodeMotion Milan, 28 Nov 2014 Riccardo Carlesso Technical Solution Engineer [email protected] http://goo.gl/3LpbZW

Upload: codemotion

Post on 05-Jul-2015

865 views

Category:

Technology


2 download

DESCRIPTION

Everything at Google (from Search to Gmail) runs in Linux Application Containers. Google is working with the Open Source community to bring over a decade of experience managing containers at scale to developers. Riccardo will talk through Kubernetes, a new Open Source container manager developed by Google with the help of the community. He will cover the core management patterns it supports, the problems it solves, and where things are going both with the project, and with the Google Cloud Platform service analogs. Kubernetes design: https://github.com/GoogleCloudPlatform/kubernetes/

TRANSCRIPT

Page 1: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Kubernetes: Managing Containers the Google way

CodeMotion Milan, 28 Nov 2014

Riccardo Carlesso Technical Solution Engineer

[email protected]

http://goo.gl/3LpbZW

Page 2: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Why Containers*?

1. Packaging

2. Efficiency and Speed

3. Security (?)

(*) Container = Docker flavor container

Page 3: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Static application environment

No stress deployment and update

Repeatable portable artifact

Develop here, run therePick your cloud solely on its merits

Loosely coupled = easier to build and manage

Easier to build and manageCompose applications from micro-services

Packaging

Page 4: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Everything at Google runs in a container.

• Resource isolation

• Predictability

• Quality of service

• Efficient overcommit

• Resource accounting

Google starts over 2 billion containers per week.

Images by Connie Zhou

Efficiency

Page 5: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Docker

● 15000+ GitHub stars● 600+ contributors● 100's of projects built on top of Docker

○ UIs, mini-PaaS, …○ github.com/google/cadvisor○ github.com/GoogleCloudPlatform/heapster

● Very popular GitHub project○ Most popular Go project of all time○ $ docker run -i -t ubuntu /bin/bash -p 80:80

Page 6: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Kubernetes κυβερνήτης: Greek for “pilot” or “helmsman of a ship”

the open source cluster manager from Google

Page 7: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

KubernetesInspired by Google's systems and experience:

Manage Containers, not Machines

Efficient & Robust: • optimized packing• active monitoring => self healing

Organizationally Scalable:• Hassle-free maintanance =>

Enables micro-services

Modern Open Source:• Written in Go• Hosted on github• Apache 2.0 licensed

Page 8: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Node Container Manager

Scheduled Containers

Managed Base OSManaged Base OS

Node Container Manager

Scheduled Containers

Cluster Scheduler

Simplified Cluster Management Stack

Scheduled Containers

Page 9: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Managed Base OS

kubelet

Scheduled Containers

Managed Base OS

kubelet + Docker

Kubernetes Masteretcd

Kubernetes Container Stack

Scheduled Containers

Scheduled Containers

Page 10: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

KubernetesMaster/Scheduler

Kubernetes

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

MINIONS

Page 11: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Log Roller

Web Server

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

KubernetesMaster/Scheduler

Pods

Page 12: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

FE

FE

FE

FE

FE

FE

BE

BE

BE BEBE

BE

BEBE

BE

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Too Many Pods

Page 13: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

labels: role: frontend

FE

FE

FE

FE

FE

FE

BE

BE

BE BEBE

BE

BEBE

BE

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Labels

Page 14: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

labels: role: frontend stage: production

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

FE

FE

FE

FE

FE

FE

BE

BE

BE BEBE

BE

BEBE

BE

Labels

Page 15: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

FE FE FE FE

replicas: 4template: ...labels: role: frontend stage: production

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Replication Controller

Page 16: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

FE

replicas: 1template: ...labels: role: frontend stage: production

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Replication Controller

Page 17: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

FE FE FE

replicas: 3template: ...labels: role: frontend stage: production

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Replication Controller

Page 18: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Declarative Over ImperativeImperative:

"for pod in pod{001..100} ; start $podDeclarative:

"Run 100 copies of this pod with a target of <= 2 tasks down at any time"

Pros:• Repeatable• "Set it and forget it"• Eventually consistent• Easily updatable

Con:• Tracing action/reaction can be difficult.

"I made a change, is it done?"Image: "Space Needle under construction, 1961" seattlemunicipalarchives CC-BY-2.0 http://www.flickr.

com/photos/seattlemunicipalarchives/6847114249

Page 19: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

id: backend-serviceport: 9000labels: role: backend stage: production

Backend Service

BE BE BE BE

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Service

FE

port: 9000

Load-Balancing

Pods are auto-placed: COOL!but: How to direct FE->BE traffic ?

Service proxyService proxyService proxy Service proxyService proxy Service proxy

Page 20: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Demo (Guestbook)

Redis Master

Finish

Master Service

Redis Slave

Redis Slave

Slave Service

PHPFrontend

PHPFrontend PHP

Frontend

Page 21: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

myDB Service [app=myDB]

myDBver=1

myDBver=1

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Managing LifeCycleReplication Controller[app=myDB; ver=1]

replicas=5

myDBver=1

myDBver=1

myDBver=1

Page 22: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

myDB Service [app=myDB]

myDBver=1

myDBver=1

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

MachineHost

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

ContainerAgent

Kubernetes - Master/Scheduler

Managing LifeCycle

myDBver=2

Replication Controller[app=myDB; ver=1]

replicas=3

Replication Controller[app=myDB; ver=2]

replicas=2

myDBver=2

myDBver=1

Page 23: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

We’re taking lessons we’ve learned and open sourcing them

Kubernetes is evolving

We’re eager to hear from you!

1

2

3

Summing Up

Page 24: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

We are just getting started...

Clone Kubernetes at: github.com/GoogleCloudPlatform/kubernetes

IRC: #google-containers on Freenode

Google group: google-containers

Reach out:[email protected]

Kubernetes on GCE (new!): https://cloud.google.com/compute/docs/containers

Presentation: http://goo.gl/3LpbZW

Page 25: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Backup slidesFull screen QR code for feedback ⇒

Page 26: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 1: Create a redis master

jdk$ lsREADME.md index.php redis-slavefrontend-controller-jdk.json php-redis redis-slave-controller.jsonfrontend-controller.json redis-master-service.json redis-slave-service.json

jdk$ ../../cluster/kubecfg.sh -c redis-master.json create podsID Image(s) Host Labels Status---------- ---------- ---------- ---------- ----------redis-master-2 dockerfile/redis / name=redis-master Waiting

jdk-macbookpro2:guestbook jdk$ ../../cluster/kubecfg.sh list podsID Image(s) Host Labels Status---------- ---------- ---------- ---------- ----------redis-master-2 dockerfile/redis kubernetes-minion-2.c.pivotal-gearing-505.internal/ name=redis-master Waiting

jdk-macbookpro2:guestbook jdk$ ../../cluster/kubecfg.sh list podsID Image(s) Host Labels Status---------- ---------- ---------- ---------- ----------redis-master-2 dockerfile/redis kubernetes-minion-2.c.pivotal-gearing-505.internal/ name=redis-master Running

Page 27: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 1: master.json

{ "id": "redis-master-2", "kind": "Pod", "apiVersion": "v1beta1", "desiredState": { "manifest": { "version": "v1beta1", "id": "redis-master-2", "containers": [{ "name": "master", "image": "dockerfile/redis", "ports": [{ "containerPort": 6379, "hostPort": 6379 }] }] } }, "labels": { "name": "redis-master" }}

Page 28: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 2: Create a redis master service

jdk$ lsREADME.md index.php redis-slavefrontend-controller-jdk.json php-redis redis-slave-controller.jsonfrontend-controller.json redis-master-service.json redis-slave-service.json

jdk$ ../../cluster/kubecfg.sh -c redis-master-service.json create servicesID Labels Selector Port---------- ---------- ---------- ----------redismaster name=redis-master 10000

jdk$ … test redis somehow

Page 29: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 2: master.service

{ "id": "redismaster", "kind": "Service", "apiVersion": "v1beta1", "port": 10000, "containerPort": 6379, "selector": { "name": "redis-master" }}

Page 30: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 3: Create redis slaves & service

jdk$ ../../cluster/kubecfg.sh -c redis-slave-controller.json create replicationControllersID Image(s) Selector Replicas---------- ---------- ---------- ----------redisSlaveController brendanburns/redis-slave name=redisslave 2

jdk$ ../../cluster/kubecfg.sh -c redis-slave-controller.json list podsID Image(s) Host Labels Status---------- ---------- ---------- ---------- ----------redis-master-2 dockerfile/redis kubernetes-minion-2.c.pivotal-gearing-505.internal/ name=redis-master Running4df5661d-4e0b-11e4-957e-42010af01e53 brendanburns/redis-slave kubernetes-minion-2.c.pivotal-gearing-505.internal/ name=redisslave,replicationController=redisSlaveController Running4df6be88-4e0b-11e4-957e-42010af01e53 brendanburns/redis-slave kubernetes-minion-4.c.pivotal-gearing-505.internal/ name=redisslave,replicationController=redisSlaveController Running

jdk$ ../../cluster/kubecfg.sh -c redis-slave-service.json create servicesID Labels Selector Port---------- ---------- ---------- ----------redisslave name=redisslave name=redisslave 10001

jdk$ … test redis ...

Page 31: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 3: redis-slave-controller.service "id": "redisSlaveController", "kind": "ReplicationController", "apiVersion": "v1beta1", "desiredState": { "replicas": 2, "replicaSelector": {"name": "redisslave"}, "podTemplate": { "desiredState": { "manifest": { "version": "v1beta1", "id": "redisSlaveController", "containers": [{ "name": "slave", "image": "brendanburns/redis-slave", "ports": [{"containerPort": 6379, "hostPort": 6380}] }] } }, "labels": {"name": "redisslave"} }}, "labels": {"name": "redisslave"}}

Page 32: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 4: Create frontend servers

jdk$ ../../cluster/kubecfg.sh -c frontend-controller.json create replicationControllers

ID Image(s) Selector Replicas---------- ---------- ---------- ----------frontendController brendanburns/php-redis name=frontend 3

Page 33: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Step 5: Enjoy :-)

Page 34: Managed Containers, Open Source, and Google - Riccardo Carlesso - Codemotion Milan 2014

Docker demo

$ docker pull dockerfile/nginx...a7767ce9ec2c: Download complete….$ docker run -t -i dockerfile/nginx /bin/bash

[ root@055dbcc687d8]$ cd /usr/share/nginx/html [ root@055dbcc687d8]$ cp index.html jdk.html$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES055dbcc687d8 dockerfile/nginx:latest "/bin/bash" 21 minutes ago Up 21 minutes 443/tcp, 80/tcp kickass_wright

….$ docker commit … jdk1/nginx-modified$ docker push jdk1/nginx-modified

$ docker pull jdk1/nginx-modifieddocker run -p 80:80 jdk1/nginx-modified /usr/sbin/nginx