@saturnism @googlecloud #kubernetes
From Laptop to the World
With Kubernetes
From Laptop to the World With Kubernetes @saturnism @googlecloud - - PowerPoint PPT Presentation
From Laptop to the World With Kubernetes @saturnism @googlecloud #kubernetes Ray Tsang Developer Advocate Google Cloud Platform @saturnism | +RayTsang @saturnism @googlecloud #kubernetes Ray Tsang Developer Architect Traveler
@saturnism @googlecloud #kubernetes
With Kubernetes
@saturnism @googlecloud #kubernetes
Developer Advocate Google Cloud Platform @saturnism | +RayTsang
@saturnism @googlecloud #kubernetes
Developer Architect Traveler Photographer flickr.com/saturnism
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
6 months later…? Maybe?
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
Runtime + Application Like a static binary!
@saturnism @googlecloud #kubernetes
libs app kernel libs app libs app libs app
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
Greek for “Helmsman”; also the root of the word “Governor”
bare-metal environments
experiences and internal systems
Manage applications, not machines
@saturnism @googlecloud #kubernetes web browsers Scheduler kubectl web browsers scheduler Kubelet Kubelet Kubelet Kubelet Config file Kubernetes Master Container Image
@saturnism @googlecloud #kubernetes
spec:
containers:
image: myservice resources: limits: memory: "128Mi" cpu: "0.1" ports:
protocol: TCP replicas: 1 10000
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes web browsers Scheduler kubectl web browsers scheduler Kubelet Kubelet Kubelet Kubelet Config file Kubernetes Master Container Image
@saturnism @googlecloud #kubernetes
spec:
containers:
image: myservice resources: limits: memory: "128Mi" cpu: "0.1" ports:
protocol: TCP replicas: 1 10000
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
Hello World Service - Greet Guestbook Service - Create Guestbook Service - Retrieve
@saturnism @googlecloud #kubernetes
session replication greeting
CRUD
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
Pod App Log Collector
...
@saturnism @googlecloud #kubernetes
Pod IPs are routable
Pods can reach each other without NAT
No brokering of port numbers This is a fundamental requirement
@saturnism @googlecloud #kubernetes
Pod App Log Collector
... type = Frontend version = 1.0
@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
@saturnism @googlecloud #kubernetes
Replication Controller Replicas → 1 Pod App Log Collector ... type = Frontend version = 1.0
@saturnism @googlecloud #kubernetes
node 1
f0118
node 3 node 4 node 2
d9376 b0111 a1209
Replication Controller
@saturnism @googlecloud #kubernetes
node 1
f0118
node 3 node 4 node 2 Replication Controller
d9376 b0111 a1209
@saturnism @googlecloud #kubernetes
node 1
f0118
node 3 node 4 Replication Controller
b0111 a1209
@saturnism @googlecloud #kubernetes
node 1
f0118
node 3 node 4 Replication Controller
b0111 a1209 c9bad
@saturnism @googlecloud #kubernetes
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
@saturnism @googlecloud #kubernetes
Pod frontend Pod type = Frontend version = 1.0 Pod type = Frontend version = 1.0
Service Label selectors: version = 1.0 type = Frontend Pod type = Frontend version = 2.0
@saturnism @googlecloud #kubernetes
Pod frontend Pod type = Frontend version = 1.0 Pod type = Frontend version = 1.0
Service Label selectors: type = Frontend Pod type = Frontend version = 2.0
@saturnism @googlecloud #kubernetes
Read service IP addresses via environmental variables
@saturnism @googlecloud #kubernetes
Kubernetes API
DNS Lookups! ping redis
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud @kubernetesio
UI CLI API
Control Plane Servers Admin
containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers
Cluster / Data Center / Availability Zone
@saturnism @googlecloud @kubernetesio
UI CLI API
Control Plane Clusters
API
Admin
Kubernetes on Kubernetes on Another Web Service Cloud Kubernetes on Premise
Federation
@saturnism @googlecloud @kubernetesio
UI CLI API
Federation Control Plane Federated Clusters API Admin Kubernetes on Kubernetes on Another Web Service Cloud Kubernetes on Premise
Federation
containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers containers
Cluster Control Plane Servers
@saturnism @googlecloud @kubernetesio
Cluster 2 us-central1-b Cluster 1 us-east1-b Cluster 3 europe-west1-b Cluster 4 asia-east1-b API API API API Cluster 2 - us-central1-b Federation API Server Federation Controller Federation Key/value store (etcd) Federation API
contexts:
cluster: federation-cluster user: federation-cluster
kubefed init my-federation --host-cluster-context=cluster-2 ...
@saturnism @googlecloud @kubernetesio
Cluster 4 (asia-east1-b) Federation Control Plane kubefed join cluster-4 --host-cluster-context=cluster2 ...
apiVersion: federation/v1beta1 kind: Cluster metadata: name: gce-asia-east1 spec: serverAddressByClientCIDRs:
serverAddress: "https://..." secretRef: name: gce-asia-east1
API kubeconfig
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-service.yaml
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-service.yaml svc
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-service.yaml svc svc
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-service.yaml svc svc svc
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-service.yaml svc svc svc DNS
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-deployment.yaml svc svc svc
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-deployment.yaml svc svc svc app
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-deployment.yaml svc svc svc app app
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-deployment.yaml svc svc svc app app app
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-deployment.yaml svc svc svc DNS app app app
@saturnism @googlecloud @kubernetesio
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) svc app Clusters 1 and 3 DNS
nslookup app.default.federation.svc.federation.com
svc app
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-ingress.yaml svc svc svc app app app
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-ingress.yaml svc svc svc app app app Global L7 Load Balancer
@saturnism @googlecloud @kubernetesio
Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) Federation Control Plane kubectl create -f app-ingress.yaml svc svc svc app app app Global L7 Load Balancer Kubernetes Cluster 1 (Google Cloud) Kubernetes Cluster 2 (On-Prem) Kubernetes Cluster 3 (Another Cloud) svc svc svc app app app
Node Port Node Port Node Port
@saturnism @googlecloud @kubernetesio
Higher Availability Easy Application Migration Avoid Vendor Lock-in Capacity Overflow
Cross-cluster Load Balancer
Your users
Cluster 1 Cluster 2 Cluster 3
@saturnism @googlecloud @kubernetesio
Provider 1
Zone A Zone B
Provider 2
Zone C
Provider 1
Zone D
@saturnism @googlecloud @kubernetesio
Geographically aware DNS gets clients to the "closest" healthy cluster. Standard Kubernetes service load balancing within each cluster. Can be extended to divert traffic away from "healthy-but-saturated" clusters.
@saturnism @googlecloud @kubernetesio
Strictly coupled pods/applications
Loosely coupled
clusters Preferentially coupled
migrated piecemeal.
@saturnism @googlecloud @kubernetesio
Negative Affinity
failure domain (host/rack/zone) Topology
Absolute affinity
@saturnism @googlecloud @kubernetesio
Google Container Engine: https://cloud.google.com/container-engine/ Minikube: https://github.com/kubernetes/minikube Spring Boot Example: https://github.com/saturnism/spring-boot-docker Federation Example: https://github.com/saturnism/buttonmasher Visualizer: https://github.com/saturnism/gcp-live-k8s-visualizer Code Lab: bit.ly/k8s-lab
@saturnism @googlecloud #kubernetes
@saturnism @googlecloud #kubernetes
Images by Connie Zhou