Slide 1

Slide 1 text

@saturnism @googlecloud #kubernetes Cloud-native CI/CD pipeline for Kubernetes

Slide 2

Slide 2 text

@saturnism @googlecloud #kubernetes Ray Tsang Developer Advocate Google Cloud Platform @saturnism | +RayTsang 請參加 http://gcpug.tw/

Slide 3

Slide 3 text

@saturnism @googlecloud #kubernetes Ray Tsang Developer Architect Traveler Photographer flickr.com/saturnism

Slide 4

Slide 4 text

@saturnism @googlecloud #kubernetes

Slide 5

Slide 5 text

@saturnism @googlecloud #kubernetes F is for Features! Developer

Slide 6

Slide 6 text

@saturnism @googlecloud #kubernetes U is for Uptime! Operations

Slide 7

Slide 7 text

@saturnism @googlecloud #kubernetes New Features Uptime / Reliability

Slide 8

Slide 8 text

@saturnism @googlecloud #kubernetes New Features Uptime / Reliability Operations

Slide 9

Slide 9 text

@saturnism @googlecloud #kubernetes New Features Uptime / Reliability Operations Developers

Slide 10

Slide 10 text

@saturnism @googlecloud #kubernetes

Slide 11

Slide 11 text

@saturnism @googlecloud #kubernetes Site Reliability Engineering

Slide 12

Slide 12 text

@saturnism @googlecloud #kubernetes “ ” SRE is what happens when you ask a software engineer to design and run operations. Ben Treynor Sloss 24x7 VP, Google

Slide 13

Slide 13 text

@saturnism @googlecloud #kubernetes

Slide 14

Slide 14 text

@saturnism @googlecloud #kubernetes 50% on Engineering Work Automation! Create tools for developers

Slide 15

Slide 15 text

@saturnism @googlecloud #kubernetes Package & Deployment application.ear app.war helloworld-service.jar guestbook-service.jar apache-xyz.jar application.war /... helloworld-service.jar guestbook-service.jar apache-xyz.jar

Slide 16

Slide 16 text

@saturnism @googlecloud #kubernetes Machine app.war / app.ear Application Server Kernel Shell / CLI / Tools

Slide 17

Slide 17 text

@saturnism @googlecloud #kubernetes Machine app.war / app.ear Application Server Kernel Shell / CLI / Tools Machine app.war / app.ear Application Server Kernel Shell / CLI / Tools Machine app.war / app.ear Application Server Kernel Shell / CLI / Tools

Slide 18

Slide 18 text

@saturnism @googlecloud #kubernetes Everything at Google runs in containers

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

@saturnism @googlecloud #kubernetes Everything at Google runs in containers 每週啟動二十億個 Container

Slide 21

Slide 21 text

@saturnism @googlecloud #kubernetes 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 Developer View

Slide 22

Slide 22 text

@saturnism @googlecloud #kubernetes web browsers BorgMaster link shard UI shard BorgMaster link shard UI shard BorgMaster link shard UI shard BorgMaster link shard UI shard Scheduler borgcfg web browsers scheduler Borglet Borglet Borglet Borglet Config file BorgMaster link shard UI shard persistent store (Paxos) Binary Developer View What just happened?

Slide 23

Slide 23 text

@saturnism @googlecloud #kubernetes 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!

Slide 24

Slide 24 text

@saturnism @googlecloud #kubernetes Developer View

Slide 25

Slide 25 text

@saturnism @googlecloud #kubernetes 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

Slide 26

Slide 26 text

@saturnism @googlecloud #kubernetes web browsers Scheduler kubectl web browsers scheduler Kubelet Kubelet Kubelet Kubelet Config file Kubernetes Master Container Image Developer View What just happened?

Slide 27

Slide 27 text

@saturnism @googlecloud #kubernetes

Slide 28

Slide 28 text

@saturnism @googlecloud #kubernetes Hello World Service - Greet Guestbook Service - Create Guestbook Service - Retrieve

Slide 29

Slide 29 text

@saturnism @googlecloud #kubernetes Guestbook UI Hello World Service Redis session replication greeting MySQL Guestbook Service CRUD

Slide 30

Slide 30 text

@saturnism @googlecloud #kubernetes Let's see it

Slide 31

Slide 31 text

@saturnism @googlecloud #kubernetes GitHub plugin Kuberntes plugin Pipeline plugin ...

Slide 32

Slide 32 text

@saturnism @googlecloud #kubernetes JBoss Fabric8

Slide 33

Slide 33 text

Confidential & Proprietary Google Cloud Platform 33 jfrog.com/artifactory/free-trial-google-cloud-platform/ Learn more on GCP: cloud.google.com/free-trial

Slide 34

Slide 34 text

@saturnism @googlecloud #kubernetes Challenges Which host machine(s) should each service run on? Avoid port conflicts? How does the application code find the Guest Book service? How do we keep all of these service running? What happens if a host machine has trouble? Are the services healthy? How do we scale when load changes? Run this in another environment? QA, dev, another cloud, your servers?

Slide 35

Slide 35 text

@saturnism @googlecloud #kubernetes Developer View spec: containers: - name: myservice image: myservice resources: limits: memory: "128Mi" cpu: "0.1" ports: - containerPort: 3306 protocol: TCP replicas: 1 10000

Slide 36

Slide 36 text

@saturnism @googlecloud #kubernetes Cluster of Machines as One

Slide 37

Slide 37 text

@saturnism @googlecloud #kubernetes Group of containers Live and die together Shared network interface Shared volumes Unique Routable IP Pod App Log Collector Pods ...

Slide 38

Slide 38 text

@saturnism @googlecloud #kubernetes 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 Inter-Pods Networking

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

@saturnism @googlecloud #kubernetes Replication Controller Replicas → 2 Pod frontend Pod App Log Collector ... type = Frontend version = 1.0 Pod App Log Collector ... type = Frontend version = 1.0 Replication Controllers

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

@saturnism @googlecloud #kubernetes Pod frontend Pod type = Frontend version = 1.0 Pod type = Frontend version = 1.0 Services Service Label selectors: version = 1.0 type = Frontend Pod type = Frontend version = 2.0

Slide 48

Slide 48 text

@saturnism @googlecloud #kubernetes Pod frontend Pod type = Frontend version = 1.0 Pod type = Frontend version = 1.0 Services Service Label selectors: type = Frontend Pod type = Frontend version = 2.0

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

@saturnism @googlecloud #kubernetes Service discovery Kubernetes API or… DNS Lookups! ping redis

Slide 51

Slide 51 text

@saturnism @googlecloud #kubernetes Live Demo

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

@saturnism @googlecloud #kubernetes Try Kubernetes Today!

Slide 54

Slide 54 text

@saturnism @googlecloud #kubernetes Thanks! Images by Connie Zhou http://kubernetes.io http://bit.ly/1QLg5E1