Share
Embed
Transcript
65 slides
-
@saturnism @googlecloud #kubernetes Ray Tsang Developer Advocate Google Cloud Platform
@saturnism | +RayTsang -
@saturnism @googlecloud #kubernetes When will the production environment be ready?
6 months later…? Maybe? -
@saturnism @googlecloud #kubernetes Enter Kubernetes Greek for “Helmsman”; also the
root of the word “Governor” • Container orchestrator • Runs 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 -
@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? -
@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 -
@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? -
@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 -
@saturnism @googlecloud #kubernetes Hello World Service - Greet Guestbook Service
- Create Guestbook Service - Retrieve -
@saturnism @googlecloud #kubernetes Guestbook UI Hello World Service Redis session
replication greeting MySQL Guestbook Service CRUD -
@saturnism @googlecloud #kubernetes Group of containers Live and die together
Shared network interface Shared volumes Unique Routable IP Pod App Log Collector Pods ... -
@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 -
@saturnism @googlecloud #kubernetes Label anything Name-value pair Make your own
Pod App Log Collector Labels ... 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 Replication Controllers -
@saturnism @googlecloud #kubernetes Replication Controller Replicas → 1 Pod App
Log Collector ... type = Frontend version = 1.0 Replication Controllers -
@saturnism @googlecloud #kubernetes Replication Controllers node 1 f0118 node 3
node 4 node 2 d9376 b0111 a1209 Replication Controller - Desired = 4 - Current = 4 -
@saturnism @googlecloud #kubernetes Replication Controllers node 1 f0118 node 3
node 4 node 2 Replication Controller - Desired = 4 - Current = 4 d9376 b0111 a1209 -
@saturnism @googlecloud #kubernetes Replication Controllers node 1 f0118 node 3
node 4 Replication Controller - Desired = 4 - Current = 3 b0111 a1209 -
@saturnism @googlecloud #kubernetes Replication Controllers node 1 f0118 node 3
node 4 Replication Controller - Desired = 4 - Current = 4 b0111 a1209 c9bad -
@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 -
@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 -
@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 -
@saturnism @googlecloud #kubernetes Service discovery Read service IP addresses via
environmental variables -
@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: - context: cluster: federation-cluster user: federation-cluster Initialize Federation Control Plane kubefed init my-federation --host-cluster-context=cluster-2 ... -
@saturnism @googlecloud @kubernetesio Adding a Cluster 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: - clientCIDR: "0.0.0.0/0" serverAddress: "https://..." secretRef: name: gce-asia-east1 API kubeconfig -
@saturnism @googlecloud @kubernetesio Federated Service 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 Federated Service 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 Federated Service 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 Federated Service 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 Federated Service 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 Federated Deployment 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 Federated ReplicaSet 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 Federated Deployment 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 Federated Deployment 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 Federated Deployment 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 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 Federated Ingress 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 Federated Ingress 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 Federated Ingress 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 Use Cases -
@saturnism @googlecloud @kubernetesio Provider 1 Zone A Zone B Provider
2 Zone C Provider 1 Zone D Challenges -
@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. Cross-cluster Load Balancing -
@saturnism @googlecloud @kubernetesio Location affinity Strictly coupled pods/applications • High
bandwidth requirements • Low latency requirements • High fidelity requirements • Cannot easily span clusters Loosely coupled • Opposite of above • Relatively easily distributed across clusters Preferentially coupled • Strongly coupled but can be migrated piecemeal. -
@saturnism @googlecloud @kubernetesio Location affinity continued... Negative Affinity • Don't
run my replicas in the same failure domain (host/rack/zone) Topology • Same host • Same rack • Same zone • Same metro region • Same sub-continent Absolute affinity -
@saturnism @googlecloud @kubernetesio Links 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