59
Code Faster on Kubernetes (Service Oriented Development) Rafael Schloming - @rschloming Philip Lombardi - @TheBigLombowski

Webinar: Code Faster on Kubernetes

Embed Size (px)

Citation preview

Page 1: Webinar: Code Faster on Kubernetes

Code Faster on Kubernetes(Service Oriented Development)

Rafael Schloming - @rschlomingPhilip Lombardi - @TheBigLombowski

Page 2: Webinar: Code Faster on Kubernetes

datawire.io

How do I break up my monolith?

How do I architect my app with microservices?

What infrastructure do I need in place before I can benefit from microservices?

2

Page 3: Webinar: Code Faster on Kubernetes

datawire.io

● Building a cloud application using microservices in 2015

● Distributed systems engineers● Deeply studied microservices

Architectures & Technology

3

Microservices at Datawire ...

Page 4: Webinar: Code Faster on Kubernetes

datawire.io

Control Plane and Data Plane

4

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Control Plane

Discovery

AuthN/AuthZ

Routing policy

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Page 5: Webinar: Code Faster on Kubernetes

datawire.io

Debugging Velocity (or lack thereof)

5

Page 6: Webinar: Code Faster on Kubernetes

datawire.io

ToolingArchitecture

Process!!!

6

Page 7: Webinar: Code Faster on Kubernetes

datawire.io

Debugging our Pipeline

7

Page 8: Webinar: Code Faster on Kubernetes

datawire.io

Velocity comes from Process, not Architecture

8

Page 9: Webinar: Code Faster on Kubernetes

datawire.io

Service Oriented ArchitectureService Oriented Development

9

Page 10: Webinar: Code Faster on Kubernetes

datawire.io 10

Stability/Maturity

Velocity

Prototype Production Mission critical

Page 11: Webinar: Code Faster on Kubernetes

datawire.io 11

Stability/Maturity

Velocity

Prototype Production Mission critical

Page 12: Webinar: Code Faster on Kubernetes

datawire.io

A single process is inefficient(Forces a single Stability vs Velocity Tradeoff)

12

Page 13: Webinar: Code Faster on Kubernetes

datawire.io 13

Define

Code

Test

Release

Prod

Page 14: Webinar: Code Faster on Kubernetes

datawire.io 14

Define

Code

Test

Release

Prod

Centralized process

● Specialized teams● Fixed policies (e.g.,

release criteria)

Page 15: Webinar: Code Faster on Kubernetes

datawire.io

A single process doesn’t scale

15

Page 16: Webinar: Code Faster on Kubernetes

datawire.io

How do I break up my monolith?How do I break up my process?

16

Page 17: Webinar: Code Faster on Kubernetes

datawire.io 17

Microservices lets you run multiple processes!

Page 18: Webinar: Code Faster on Kubernetes

datawire.io

Microservices is a distributed development architecture

workflow.

18

Page 19: Webinar: Code Faster on Kubernetes

datawire.io 19

Stability/Maturity

Velocity

Prototype Production Mission critical

● How do I get to Continuous Deployment incrementally?● How do I limit the scope of PCI (audit process)?● How do I ship feature X as fast as possible?

Page 20: Webinar: Code Faster on Kubernetes

datawire.io

Microservices is ...

● Multiple processes○ Including your existing process!○ Processes designed for different stability/velocity

tradeoffs● Simultaneous processes

20

Page 21: Webinar: Code Faster on Kubernetes

datawire.io

Doing things this way shifts how people operate!

● Requires both organizational and technical changes

21

Page 22: Webinar: Code Faster on Kubernetes

datawire.io

Organizational Implementation

22

Page 23: Webinar: Code Faster on Kubernetes

datawire.io

Education

● Everyone exposed to full dev cycle

Communication

● Nobody speaks the same language

Delegation

● Small teams own big important parts

You gotta give in order to get

23

Page 24: Webinar: Code Faster on Kubernetes

datawire.io

But you get a lot

24

Education

● Specialists become generalists -> Better holistic systems● Learning, personal growth -> Job satisfaction

Communication

● Conflict -> Collaboration

Delegation

● Massive organizational scale

Page 25: Webinar: Code Faster on Kubernetes

datawire.io

Create self-sufficient, autonomous software teams.

25

Page 26: Webinar: Code Faster on Kubernetes

datawire.io

Why self-sufficiency and autonomy?

● Self-sufficient○ Team does not need to rely on other teams to achieve its goals

● Autonomy○ Team is able to independently make (process) decisions on how to achieve its goals

26

Page 27: Webinar: Code Faster on Kubernetes

datawire.io

Eliminate centralized specialist functions

27

Centralized architecture Centralized infrastructure / ops*(You might need a platform team)

Page 28: Webinar: Code Faster on Kubernetes

datawire.io

Think Spinoff

28

Page 29: Webinar: Code Faster on Kubernetes

datawire.io 29

Monolith

Page 30: Webinar: Code Faster on Kubernetes

datawire.io 30

Monolith

MicroserviceTeam

Page 31: Webinar: Code Faster on Kubernetes

datawire.io

Technical Implementation

31

Page 32: Webinar: Code Faster on Kubernetes

datawire.io

Control Plane and Data Plane

32

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Control Plane

Discovery

AuthN/AuthZ

Routing policy

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Page 33: Webinar: Code Faster on Kubernetes

datawire.io

People operate the control plane

33

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...Control Plane

Discovery

AuthN/AuthZ

Routing policy

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Sidecar Proxies

Health checks

Observability

L4/L7 routing

...

Control Plane UI

People

Page 34: Webinar: Code Faster on Kubernetes

datawire.io

Guiding goal: make our team productive

34

Tools for Generalists

● Generalist UX != Specialist UX● Specialist: All the things● Generalist: Simple, Complete, Discoverable

Tools for Education

● Build on familiar concepts● Safe defaults● Great feedback

Tools for Autonomous Developers

● Fit multiple processes

Page 35: Webinar: Code Faster on Kubernetes

datawire.io

The Datawire Story...

● We have been building cloud apps as microservices since 2015

● Way too small to have an actual dedicated ops / platform engineer

35

Page 36: Webinar: Code Faster on Kubernetes

datawire.io

The Datawire Story...

● But…! Good news I did that in a previous life.

● Problem…! I’m supposed to be writing product code.

36

Page 37: Webinar: Code Faster on Kubernetes

datawire.io

The Datawire Story...

I wanted to do self-service so any developer could scratch their own itch without bugging me.

37

Page 38: Webinar: Code Faster on Kubernetes

datawire.io

Some design considerations...

● Polyglot programming shop

● Lots of different toolchains

● Distributed-ish engineering organization

● Not everyone has a strong background in microservices and infrastructure

● Several mission critical services

38

Page 39: Webinar: Code Faster on Kubernetes

datawire.io

The Datawire Story...

Also I wanted to do it “right”... so I architected the shit out the problem with tools!

39

Page 40: Webinar: Code Faster on Kubernetes

datawire.io 40

Expected Reaction… :D

Page 41: Webinar: Code Faster on Kubernetes

datawire.io 41

… Actual Reaction D:

Page 42: Webinar: Code Faster on Kubernetes

datawire.io

Late 2015… 2016...

Change was slow and painful before adopting better starting principles...

42

Page 43: Webinar: Code Faster on Kubernetes

datawire.io

It’s about the people and process, dummy

● Turns out it is not a tooling problem…

● It is a people and process problem…

● Engineers hate adopting new tools when the reason is not compelling… especially if the new tools make their life harder.

● All the tooling in the world does not stop people from continuing their existing behaviors…

● Every tool has a cost because every tool can and will be used slightly differently by different people.

43

Page 44: Webinar: Code Faster on Kubernetes

datawire.io

“Did you read the README?” ~ “No, but...”

44

● A README isn’t enough.

● Developers are bad at RTFM and WTFM.

● Lots of arguments over people doing things differently from how the README stated…

● Lots of arguments also over people not knowing how to do things because the README did not state anything about <X>.

Page 45: Webinar: Code Faster on Kubernetes

datawire.io

Back to the drawing board...

● We wanted a common build/deployment mechanism that would work for everyone and anything (including CI, multiple languages, etc.)

● Started with Docker as it gave a common way to package and ship code.

● Kubernetes had been on my radar since 2014 but seemed finally ready for mass adoption at this point so we picked that to run containers.

45

Page 46: Webinar: Code Faster on Kubernetes

datawire.io

Our Kubernetes Journey...

● We built tools based on two things:a. Painb. Common patterns we discovered across all our repositories

46

Page 47: Webinar: Code Faster on Kubernetes

datawire.io

1. Code a change on a branch (e.g. dev/awesome-feature)

2. Package the build toolchain into the Docker image itself!

3. Run a single command and a new Docker image is built… no need to setup tools on developers machines. Build process is codified into Dockerfile.

Step 1: Provide fast repeatable builds for everyone

47

Page 48: Webinar: Code Faster on Kubernetes

datawire.io

Step 1: I said everyone and I meant everyone...

48

Page 49: Webinar: Code Faster on Kubernetes

datawire.io

● Commit (or don’t commit) a change on a branch (e.g. dev/awesome-feature)

● Run command and presto…! Updated code is running on the cluster without disturbing any other deployment.

● Support any number of parallel deployments of the same codebase

Step 2: Provide fast self-service deploy

49

Page 50: Webinar: Code Faster on Kubernetes

datawire.io

Step 1 + 2 Recap

● Docker and Kubernetes provide the backbone of build and deployment.

● We found ourselves mostly doing the same thing (docker build ..., kubectl [apply|create] ...) so we codified it into tools that work fast and have a small learning surface area for devs.

● Nothing “magical” about what the tools do and they can be easily bypassed if necessary.

50

Page 51: Webinar: Code Faster on Kubernetes

datawire.io

● Add a little metadata to a Kubernetes service manifest

● Ambassador listens and picks up change and configures Envoy

● Makes it super easy to do stuff like expose a branch (dev/awesome-feature) as https://dev-awesome-feature.datawire.io

Step 3: Make it easy to reach the changed code

51

Page 52: Webinar: Code Faster on Kubernetes

datawire.io

Hell no.(But it’s soooooo much better than before)

Perfect?

52

Page 53: Webinar: Code Faster on Kubernetes

datawire.io

What’s left?

● Self-service bootstrapping

● Self-service stateful infrastructure

● Self-service external to Kubernetes infrastructure (e.g. Amazon RDS)

● Monitoring And Logging

53

Page 54: Webinar: Code Faster on Kubernetes

datawire.io

All the Things

54

Page 55: Webinar: Code Faster on Kubernetes

datawire.io

Capabilities aren’t Enough, UX Matters

55

Page 56: Webinar: Code Faster on Kubernetes

datawire.io

Process and People factors drive the UX

56

Page 57: Webinar: Code Faster on Kubernetes

datawire.io

Build the tools your teams need now

57

Tools for Generalists

● Generalist UX != Specialist UX● Generalist: Simple, Complete, Discoverable

Tools for Education

● Build on familiar concepts● Safe defaults● Great feedback

Tools for Autonomous Developers

● Fit multiple processes

Page 58: Webinar: Code Faster on Kubernetes

datawire.io

Demo

58

Page 59: Webinar: Code Faster on Kubernetes

datawire.io

Thank you!

59

Build your own dev workflow

https://www.datawire.io/faster

Tweet Us!

@datawireio@thebiglombowski@rschloming

Email Us!

[email protected]@datawire.io