Slide 1

Slide 1 text

@saturnism #springio15 #kubernetes Kubernetes With Spring Boot Microservices

Slide 2

Slide 2 text

@saturnism #springio15 #kubernetes Ray Tsang Developer Advocate twitter: @saturnism github: saturnism © 2015 Ray Tsang

Slide 3

Slide 3 text

@saturnism #springio15 #kubernetes Ray Tsang Enterprise Architect Open Source Traveler flickr: saturnism © 2015 Ray Tsang

Slide 4

Slide 4 text

@saturnism © 2015 Ray Tsang

Slide 5

Slide 5 text

@saturnism © 2015 Ray Tsang

Slide 6

Slide 6 text

@saturnism #springio15 #kubernetes Spring Boot + Groovy + Microservices? Remember Josh’s Tweet? https://twitter.com/starbuxman/status/580517687006216193

Slide 7

Slide 7 text

@saturnism #springio15 #kubernetes Demo Application Hello World UI Hello World Service Redis session replication greeting

Slide 8

Slide 8 text

@saturnism #springio15 #kubernetes Old way: Shared machines kernel libs app app app No isolation No namespacing Common libs Highly coupled apps and OS app

Slide 9

Slide 9 text

@saturnism #springio15 #kubernetes App Server libs app app app app Old way: Java No isolation No namespacing Common libs - shouldn’t really happen in Java apps...

Slide 10

Slide 10 text

@saturnism #springio15 #kubernetes Spring Boot + Containers A good match!

Slide 11

Slide 11 text

@saturnism #springio15 #kubernetes Old way: Virtual machines Good isolation Expensive and inefficient Still highly coupled to the guest OS Hard to manage app libs kernel libs app app kernel app libs libs kernel kernel

Slide 12

Slide 12 text

@saturnism #springio15 #kubernetes New way: Containers libs app kernel libs app libs app libs app

Slide 13

Slide 13 text

@saturnism #springio15 #kubernetes Lightweight

Slide 14

Slide 14 text

@saturnism #springio15 #kubernetes Process isolation CPU, Memory, Network, Filesystem, ...

Slide 15

Slide 15 text

@saturnism #springio15 #kubernetes Static binaries no library dependencies

Slide 16

Slide 16 text

@saturnism #springio15 #kubernetes Runs on any machine physical, virtual, cloud - OS agnostic

Slide 17

Slide 17 text

@saturnism #springio15 #kubernetes Write once - run everywhere! Development, Test, Staging, Production...

Slide 18

Slide 18 text

@saturnism #springio15 #kubernetes Containerize Dockerfile

Slide 19

Slide 19 text

@saturnism #springio15 #kubernetes Containerize mvn docker:build

Slide 20

Slide 20 text

@saturnism #springio15 #kubernetes Let’s run the container! docker run -ti -p 8080:8080 spring-boot-demo

Slide 21

Slide 21 text

@saturnism #springio15 #kubernetes Redis container docker run --rm -ti --name redis redis

Slide 22

Slide 22 text

@saturnism #springio15 #kubernetes Microservice container docker run --rm -ti --name helloworldservice helloworld-service-demo

Slide 23

Slide 23 text

@saturnism #springio15 #kubernetes Link containers docker run -ti --rm --link redis:redis --link helloworldservice:helloworldservice, -p 8080:8080 helloworld-ui-demo:latest

Slide 24

Slide 24 text

@saturnism #springio15 #kubernetes Docker Compose docker-compose up

Slide 25

Slide 25 text

@saturnism #springio15 #kubernetes Everything at Google runs in containers Launch over 2 billion containers per week.

Slide 26

Slide 26 text

@saturnism #springio15 #kubernetes More than one... libs app kernel libs app libs app libs app libs app kernel libs app libs app libs app libs app kernel libs app libs app libs app

Slide 27

Slide 27 text

@saturnism #springio15 #kubernetes Enter Kubernetes Greek for “Helmsman”; also the root of the word “Governor” • Container orchestrator • Runs Docker 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

Slide 28

Slide 28 text

@saturnism #springio15 #kubernetes Kubernetes cluster libs app kernel libs app libs app libs app libs app kernel libs app libs app libs app libs app kernel libs app libs app libs app Kubernetes Master

Slide 29

Slide 29 text

@saturnism #springio15 #kubernetes Distributed process scheduler cluster of machines as one!

Slide 30

Slide 30 text

@saturnism #springio15 #kubernetes Open source community Version 0.16 Hosted on GitHub 327+ contributors 10,000+ commits 7,000+ GitHub stars CoreOS HP IBM Mesosphere Microsoft Project Partners Pivotal Red Hat SaltStack VMWare kubernetes.io

Slide 31

Slide 31 text

@saturnism #springio15 #kubernetes Pod Group of containers Live and die together Shared network interface Pod App Log Collector ...

Slide 32

Slide 32 text

@saturnism #springio15 #kubernetes Pod networking Pod IPs are routable • Docker default is private IP Pods can reach each other without NAT • even across nodes No brokering of port numbers This is a fundamental requirement • several SDN solutions

Slide 33

Slide 33 text

@saturnism #springio15 #kubernetes Pod networking 10.1.1.0/24 10.1.1.93 10.1.1.113 10.1.2.0/24 10.1.2.118 10.1.3.0/24 10.1.3.129

Slide 34

Slide 34 text

@saturnism #springio15 #kubernetes Labels Label anything Name-value pair Make your own Pod App Log Collector ... type = Frontend version = 1.0

Slide 35

Slide 35 text

@saturnism #springio15 #kubernetes Replication controllers Replication Controller Replicas → 2 Pod App Log Collector ... type = Frontend version = 1.0 Pod App Log Collector ... type = Frontend version = 1.0

Slide 36

Slide 36 text

@saturnism #springio15 #kubernetes Replication controllers Replication Controller Replicas → 1 Pod App Log Collector ... type = Frontend version = 1.0 Pod App Log Collector ... type = Frontend version = 1.0

Slide 37

Slide 37 text

@saturnism #springio15 #kubernetes Replication controllers node 1 f0118 node 3 node 4 node 2 d9376 b0111 a1209 Replication Controller - Desired = 4 - Current = 4

Slide 38

Slide 38 text

@saturnism #springio15 #kubernetes Replication controllers node 1 f0118 node 3 node 4 node 2 d9376 b0111 a1209 Replication Controller - Desired = 4 - Current = 4

Slide 39

Slide 39 text

@saturnism #springio15 #kubernetes Replication controllers node 1 f0118 node 3 node 4 b0111 a1209 Replication Controller - Desired = 4 - Current = 3

Slide 40

Slide 40 text

@saturnism #springio15 #kubernetes Replication controllers node 1 f0118 node 3 node 4 a1209 Replication Controller - Desired = 4 - Current = 4 b0111 c9bad

Slide 41

Slide 41 text

@saturnism #springio15 #kubernetes Services Replication Controller Replicas → 2 Pod frontend Pod type = Frontend version = 1.0 Pod type = Frontend version = 1.0 Service Label selectors: version = 1.0 type = Frontend

Slide 42

Slide 42 text

@saturnism #springio15 #kubernetes Let’s deploy the microservices! Demo effect time

Slide 43

Slide 43 text

@saturnism #springio15 #kubernetes Docker Repository DockerHub or … Private Repository (e.g., gcr.io)

Slide 44

Slide 44 text

@saturnism #springio15 #kubernetes DevOps with Kubernetes

Slide 45

Slide 45 text

@saturnism #springio15 #kubernetes Versioning container image docker tag spring-boot-demo spring-boot-demo:1.0

Slide 46

Slide 46 text

@saturnism #springio15 #kubernetes Staging vs. production Use labels - deploy in the same infrastructure

Slide 47

Slide 47 text

@saturnism #springio15 #kubernetes Canary Use service, and replication controllers to canary new versions

Slide 48

Slide 48 text

@saturnism #springio15 #kubernetes Rolling upgrade Similar to canary, but slowly let the new version take over

Slide 49

Slide 49 text

@saturnism #springio15 #kubernetes Rollback Super simple with versioned containers

Slide 50

Slide 50 text

@saturnism #springio15 #kubernetes Vagrant export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash Google Container Engine - Alpha http://cloud.google.com/container-engine http://kubernetes.io/gettingstarted/

Slide 51

Slide 51 text

@saturnism #springio15 #kubernetes Tips and Tricks

Slide 52

Slide 52 text

@saturnism #springio15 #kubernetes Service discovery Read service IP addresses via environmental variables

Slide 53

Slide 53 text

@saturnism #springio15 #kubernetes Test locally! Set environmental variables REDIS_PORT=tcp://localhost:6379 spring run .

Slide 54

Slide 54 text

@saturnism #springio15 #kubernetes SecureRandom - slow =( Use a different source -Djava.security.egd=file:/dev/urandom

Slide 55

Slide 55 text

@saturnism #springio15 #kubernetes Clean up disk spaces Every image, layer, and, even containers litters docker rm $(docker ps -a -q) docker rmi $(docker images -q --filter dangling=true)

Slide 56

Slide 56 text

@saturnism #springio15 #kubernetes Try out Google Container Engine https://cloud.google.com/container-engine/

Slide 57

Slide 57 text

@saturnism #springio15 #kubernetes Thanks! kubernetes.io http://bit.ly/1QLg5E1