Slide 1

Slide 1 text

Ian Lewis Developer Advocate, Google Cloud Platform The Kubernetes API & Next Generation Automation Tools DevOpsDays India #DevOpsDaysIN

Slide 2

Slide 2 text

Confidential & Proprietary Google Cloud Platform 2 Ian Lewis Developer Advocate - Google Cloud Platform Tokyo, Japan +Ian Lewis @IanMLewis

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Kubernetes is a platform for building distributed systems

Slide 5

Slide 5 text

Your App

Slide 6

Slide 6 text

Your Platform

Slide 7

Slide 7 text

Google Cloud Platform users SSH SSH SSH The Clusters of Old server server server

Slide 8

Slide 8 text

Google Cloud Platform users API Container Clusters Container Cluster

Slide 9

Slide 9 text

Google Cloud Platform UI CLI API users master nodes etcd scheduler controllers master The 10000 Foot View kubelet kubelet kubelet kubelet kubelet kubelet kubelet kubelet kubelet

Slide 10

Slide 10 text

Google Cloud Platform The 10000 Foot View etcd scheduler controller-manager apiserver kubelet docker kube-proxy iptables 1. User creates Deployment 2. API server saves info to etcd 3. CM finds Deployment and creates ReplicaSet, which creates Pods (unscheduled) 4. Scheduler schedules pods. 5. Kubelet sees pod scheduled to it and tells docker to run the container. 6. Docker pulls and runs the container. 1 2 6 3 5 4 Docker Hub / GCR 1. Deployment 2. ReplicaSet 3. etc.

Slide 11

Slide 11 text

Google Cloud Platform observe diff act Controllers

Slide 12

Slide 12 text

Google Cloud Platform controller-manager Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 13

Slide 13 text

Google Cloud Platform controller-manager Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 14

Slide 14 text

Google Cloud Platform controller-manager ReplicaSet metadata.name: nginx-xxxx Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 15

Slide 15 text

Google Cloud Platform controller-manager ReplicaSet metadata.name: nginx-xxxx Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 16

Slide 16 text

Google Cloud Platform controller-manager Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: ReplicaSet metadata.name: nginx-xxxx Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 17

Slide 17 text

Google Cloud Platform controller-manager Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: ReplicaSet metadata.name: nginx-xxxx spec.nodeName: Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 18

Slide 18 text

Google Cloud Platform controller-manager Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 ReplicaSet metadata.name: nginx-xxxx spec.nodeName: Deployment metadata.name: nginx Deployment Controller ReplicaSet Controller Scheduler

Slide 19

Slide 19 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: Pending node1 kubelet docker

Slide 20

Slide 20 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: ContainerCreating node1 kubelet docker

Slide 21

Slide 21 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: ContainerCreating node1 kubelet docker

Slide 22

Slide 22 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: ContainerCreating node1 kubelet docker Docker Hub / GCR

Slide 23

Slide 23 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: ContainerCreating node1 kubelet docker nginx-xxxx-x xxx

Slide 24

Slide 24 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: ContainerCreating node1 kubelet docker nginx-xxxx-x xxx

Slide 25

Slide 25 text

Google Cloud Platform Pod metadata.name: nginx-xxxx-xxxx spec.nodeName: node1 status: Running node1 kubelet docker nginx-xxxx-x xxx

Slide 26

Slide 26 text

for { resp := http.Get(secretsEndpoint) list := json.Unmarshal(resp.Body) for _, secret := range list.Items { data := base64Decode(secret[“data”]) if len(data[“password”]) < 10 { log.Printf(“Insecure secret: %s”, secret.Metadata.Name) http.Delete(secretsEndpoint + secret.Metadata.Name) } } }

Slide 27

Slide 27 text

for { resp := http.Get(crontabEndpoint) list := json.Unmarshal(resp.Body) for _, crontab := range list.Items { addIfNew(crontab) updateIfChanged(crontab) deleteIfOld(crontab) } }

Slide 28

Slide 28 text

Thank You