62
Kubernetes: a platform for automating deployment, scaling, and operations Brian Grant

WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Embed Size (px)

Citation preview

Page 1: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Kubernetes: a platform for automating deployment, scaling, and operations

Brian Grant

Page 2: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Kubernetes: a platform for automating deployment, scaling, and operationsWSO2Con 2015

Brian Grant@bgrant0607

Page 3: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

What is Kubernetes?

Page 4: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Old way: install applications on host

kernel

libs

app

app app

Application and OS share filesystem

Use OS distribution package manager

Entangled with each other and with host• Executables• Configuration• Shared libraries• Process and lifecycle management

Immutable VM images provide predictable rollouts and rollbacks• but are not portable and heavyweight

app

Page 5: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

New way: deploy containers

libs

app

kernel

libs

app

libs

app

libs

app

OS-level virtualization

Isolated, from each other and from the host• filesystems• processes• resources

Small and fast ⇒ enables 1:1 app to image• Unlocks benefits of microservices • Decouple build (Dev) from deployment (Ops)• Consistency from development to production• Portable across OS distros and clouds• Application-centric management

Page 6: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Need container-centric infrastructure

Scheduling: Decide where my containers should run

Lifecycle and health: Keep my containers running despite failures

Scaling: Make sets of containers bigger or smaller

Naming and discovery: Find where my containers are now

Load balancing: Distribute traffic across a set of containers

Storage volumes: Provide data to containers

Logging and monitoring: Track what’s happening with my containers

Debugging and introspection: Enter or attach to containers

Identity and authorization: Control who can do things to my containers

Page 7: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Want to automate orchestration for velocity & scale

Diverse workloads and use cases demand still more functionality

• Rolling updates and blue/green deployments• Application secret and configuration distribution• Continuous integration and deployment• Workflows• Batch processing• Scheduled execution• Application-specific orchestration

A composable, extensible Platform is needed

Page 8: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Kubernetes

Greek for “Helmsman”; also the root of the words “governor” and “cybernetic”

• Infrastructure for containers

• Schedules, runs, and manages containers on virtual and physical machines

• Platform for automating deployment, scaling, and operations

• Inspired and informed by Google’s experiences and internal systems

• 100% Open source, written in Go

Page 9: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Deployment

$ kubectl run my-nginx --image=nginx

replicationcontroller "my-nginx" created

$ kubectl get po

NAME READY STATUS RESTARTS AGE

my-nginx-wepbv 1/1 Running 0 1m

Page 10: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Scaling

$ kubectl scale rc my-nginx --replicas=2

replicationcontroller "my-nginx" scaled

$ kubectl get po

NAME READY STATUS RESTARTS AGE

my-nginx-wepbv 1/1 Running 0 1m

my-nginx-yrf3u 1/1 Running 0 20s

Page 11: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Shutdown

$ kubectl delete rc my-nginx

replicationcontroller "my-nginx" deleted

$ kubectl get po

NAME READY STATUS RESTARTS AGE

my-nginx-wepbv 0/1 Terminating 0 4m

my-nginx-yrf3u 0/1 Terminating 0 3m

$ kubectl get po

$

Page 12: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Kubernetes architecture

Page 13: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

users control plane nodes

Kubernetes architecture

CLI

API

UI

kubelet

kubelet

kubelet

apiserver

scheduler

controllers

Page 14: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Post desired state (aka spec) via API

kubelet

kubelet

kubelet

Run nginxReplicas = 2CPU = 2.5Memory = 1Gi

apiserver

scheduler

controllers

Page 15: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Placement (aka scheduling)

kubelet

kubelet

kubelet

apiserver

scheduler

controllers

Which nodes for nginx ?

Page 16: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Assignment (aka binding)

kubelet

kubelet

kubelet

Run

nginx

apiserver

scheduler

controllers

Run nginx

Page 17: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Fetch container image

kubelet

kubelet

kubelet

Registry

Pull nginx

Pull nginx

apiserver

scheduler

controllers

Page 18: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Execution and lifecycle management

kubelet

kubelet

kubelet

Status

nginx

nginx

nginx

apiserver

scheduler

controllers

Status nginx

Page 19: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Get current status via API

kubelet

kubelet

kubelet

GET nginx

apiserver

scheduler

controllers

nginx

nginx

Page 20: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

kubelet

kubelet

kubelet

Status nginx

apiserver

scheduler

controllers

nginx

nginx

Get current status via API

Page 21: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Kubernetes uses the same APIs as users

kubelet

kubelet

kubelet

apiserver

scheduler

controllers

Page 22: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Modularity

Modularity facilitates• composability• extensibility

APIs - no shortcuts or back doors• ensures extensions are on equal footing

Example: SchedulerExample: Controllers

Page 23: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Control loops

Drive current state → desired state

Observed state is truth

Act independently• choreography rather than

orchestration

Recurring pattern in the system

Example: SchedulerExample: Controllers

observe

diff

act

Page 24: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Core primitives

Page 25: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Pods

Page 26: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Pods

Small group of containers & volumes

Tightly coupled• the atom of replication & placement

“Logical” host for containers• each pod gets an IP address• share data: localhost, volumes, IPC, etc.

Facilitates composite applications• mix and match components, languages, etc.• preserves 1:1 app to image

Example: data puller & web server

ConsumersContent Manager

File Puller

Web Server

Volume

Pod

Page 27: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Volumes

Storage automatically attached to pod• Local scratch directories created on demand• Cloud block storage

• GCE Persistent Disk• AWS Elastic Block Storage

• Cluster storage• File: NFS, Gluster, Ceph• Block: iSCSI, Cinder, Ceph

• Special volumes• Git repository• Secret

Critical building block for higher-level automation

Page 28: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Secrets

How to grant a pod access to a secured something?

• secrets: credentials, tokens, passwords, ...• don’t put them in the container image!

12-factor says should come from the environment

Inject them as “virtual volumes” into Pods• not baked into images nor pod configs• kept in memory - never touches disk• not coupled to non-portable metadata API

Manage secrets via the Kubernetes API

Node

Pod Secret

API

Page 29: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

User-provided key-value attributes

Attached to any API object

Generally represent identity

Queryable by selectors• think SQL ‘select ... where ...’

The only grouping mechanism

Labels

Page 30: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Selectors

Page 31: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

app = my-app

Selectors

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Page 32: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

app = my-app, tier = FE

Selectors

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Page 33: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

app = my-app, tier = BE

Selectors

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Page 34: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Selectors

app = my-app, track = stable

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Page 35: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

app = my-app, track = canary

Selectors

app: my-app

track: stable

tier: FE

app: my-app

track: canary

tier: FE

app: my-app

track: stable

tier: BE

app: my-app

track: canary

tier: BE

Page 36: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Running Microservices

Page 37: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

ReplicationControllers

Ensures N copies of a Pod• if too few, start new ones• if too many, kill some• grouped by a label selector

Explicit specification of desired scale• client doesn’t just create N copies• enables self-healing• facilitates auto-scaling

An example of a controller• calls public APIs

ReplicationController- selector = {“app”: “my-app”}- template = { ... }- replicas = 4

API Server

How many?

3

Start 1 more

OK

How many?

4

Page 38: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Services

A group of pods that work together• grouped by a label selector

Publishes how to access the service• DNS name• DNS SRV records for ports (well known ports work, too)• Kubernetes Endpoints API

Defines access policy• Load-balanced: name maps to stable virtual IP• “Headless”: name maps to set of pod IPs

Hides complexity - ideal for non-native apps

Decoupled from Pods and ReplicationControllers

Virtual IP

Client

Page 39: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 3- selector:

- app: my-app- version: v1

Service- app: my-app

$ kubectl rolling-update \my-app-v1 my-app-v2 \--image=image:v2

Live-update an application

Page 40: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 3- selector:

- app: my-app- version: v1

ReplicationController- replicas: 0- selector:

- app: my-app- version: v2

Service- app: my-app

Page 41: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 3- selector:

- app: my-app- version: v1

ReplicationController- replicas: 1- selector:

- app: my-app- version: v2

Service- app: my-app

Page 42: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 2- selector:

- app: my-app- version: v1

ReplicationController- replicas: 1- selector:

- app: my-app- version: v2

Service- app: my-app

Page 43: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 2- selector:

- app: my-app- version: v1

ReplicationController- replicas: 2- selector:

- app: my-app- version: v2

Service- app: my-app

Page 44: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 1- selector:

- app: my-app- version: v1

ReplicationController- replicas: 2- selector:

- app: my-app- version: v2

Service- app: my-app

Page 45: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 1- selector:

- app: my-app- version: v1

ReplicationController- replicas: 3- selector:

- app: my-app- version: v2

Service- app: my-app

Page 46: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Rolling Updates

ReplicationController- replicas: 0- selector:

- app: my-app- version: v1

ReplicationController- replicas: 3- selector:

- app: my-app- version: v2

Service- app: my-app

Page 47: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

New controllers in v1.1

Page 48: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 49: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 50: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 51: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 52: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 53: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 54: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 55: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Jobs

Manages pods that run to completion• differentiates number running at any one

time from the total number of completed runs

Similar to ReplicationController, but for pods that don’t always restart

• workflow: restart on failure• build/test: don’t restart on app. failure

Principle: do one thing, don’t overload

Status: BETA in Kubernetes v1.1

Job- parallelism: 3- completions: 6- selector:

- job: my-work

Page 56: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

DaemonSets

Runs a Pod on every node• or a selected subset of nodes

Not a fixed number of replicas• created and deleted as nodes come and go

Useful for running cluster-wide services • logging agents• storage systems

DaemonSet manager is both a controller and scheduler

Status: ALPHA in Kubernetes v1.1

Page 57: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Deployment

Rollouts as a service• updates to pod template will be

rolled out by controller• can choose between rolling update

and recreate

Enables declarative updates• manipulates replication controllers

and pods so clients don’t have to

Status: ALPHA in Kubernetes v1.1

Deployment- strategy: {type: RollingUpdate}- replicas: 3- selector:

- app: my-app

...

Page 58: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Conclusion

Page 59: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Take away

• Decoupling applications from infrastructure creates new opportunities• Kubernetes

• is container-centric infrastructure• which includes a lot more than just running containers

• facilitates management of containers in production• provides a foundation for building a workload-management ecosystem

• This has enabled Platform as a Service systems to be built on Kubernetes• Apache Stratos• Openshift 3: co-designed and co-developed with Kubernetes• Deis: Heroku-inspired Docker-based PaaS• Gondor: Python-aaS

Page 60: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Kubernetes is Open- open community- open design- open source- open to ideas

http://kubernetes.iohttps://github.com/kubernetes/kubernetes

slack: kubernetestwitter: @kubernetesio

Page 61: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Thank You

Page 62: WSO2Con USA 2015: Keynote - Kubernetes – A Platform for Automating Deployment, Scaling, and Operations

Google confidential │ Do not distribute

Design principle summary

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

Cattle > Pets: Manage your workload in bulk

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