Beruflich Dokumente
Kultur Dokumente
Workshop
2015/11/11
Amy Unruh, Jeff Mendoza, Brian Dorsey, Ian Lewis, Sarah Novotny,
Eli Bixby
All code in this presentation is licensed under Apache License Version 2.0.
https://goo.gl/YcUVaJ
You can add comments to this doc. Please feel free to do that if you find something that’s
wrong or confusing, or have some suggestions.
kubernetes.io
github.com/kubernetes
So, what are containers?
Containers
Old Way: Shared Machines
No isolation
No namespacing
app app
Common libs
app app
kernel
#kubernetes @kubernetesio
Old Way: Virtual Machines
Some isolation
libs libs
Still highly coupled to the guest OS kernel kernel
libs libs
kernel kernel
#kubernetes @kubernetesio
New Way: Containers
app app
libs libs
app app
libs libs
kernel
#kubernetes @kubernetesio
But what ARE they?
• Containers share the same operating system kernel
@briandorsey
Why containers?
• Performance
• Repeatability
• Isolation
• Quality of service
• Accounting
• Visibility
• Portability
@briandorsey
Primary Kubernetes concepts...
Node: physical or virtual machine running Kubernetes, onto which pods can
be scheduled
@briandorsey
...Primary Kubernetes concepts
@briandorsey
Let’s start up a cluster!
http://cloud.google.com/console
Google Container Engine
@briandorsey
Kubernetes Cluster
Kubelet Proxy
Kubelet Proxy
Kubernetes Master Kubelet Proxy
Pod Pod
Controller Pod Pod
Scheduler
Manager Container
Pod Container
Pod
Container
Container Container
Container
Container
Container Container
Container
Container
Container Container
Container
Container Container
API Server
Kubernetes Node
Kubernetes Node
Kubernetes Node
#kubernetes @kubernetesio
Pods
Pods
Content
Small group of containers & volumes Consumers
Manager
Tightly coupled
• same node
GitHub
Often share pod’s lifetime & fate
Empty
Various types of volumes: Git GCE PD
• Empty directory (default) Host
• Host file/directory Pod
• Git repository
• GCE Persistent Disk
Host’s GCE
• NFS FS
• AWS ElasticBlockStore
• ...and more
@briandorsey
Pod lifecycle
- Once scheduled to a node, pods do not move
● You can set a pod’s container RestartPolicy
- Pods do not reschedule themselves if they fail: pod replication and rollout
is handled by a replication controller (which we will introduce soon)
@briandorsey
Labels
App: Nifty App: Nifty
Labels Phase: Dev Phase: Dev
Role: FE Role: BE
Arbitrary metadata
@briandorsey
Selectors
@briandorsey
Selectors
@briandorsey
Selectors
App == Nifty
App: Nifty App: Nifty
Role == FE
Phase: Dev Phase: Dev
Role: FE Role: BE
@briandorsey
Selectors
App == Nifty
App: Nifty App: Nifty
Role == BE
Phase: Dev Phase: Dev
Role: FE Role: BE
@briandorsey
Selectors
App == Nifty
App: Nifty App: Nifty
Phase == Dev
Phase: Dev Phase: Dev
Role: FE Role: BE
@briandorsey
Selectors
@briandorsey
Replication Controllers
Control loops
Drive current state -> desired state
observe
Act independently
act
Use APIs - no shortcuts or back
doors
Example: ReplicationController
@briandorsey
Replication Controllers
Replication Controller
- Name = “nifty-rc”
- Selector = {“App”: “Nifty”,
"Phase": "Dev",
"Role": "FE"}
- PodTemplate = { ... }
- NumReplicas = 4
@briandorsey
Replication Controllers Replication Controller
- Desired = 4
- Current = 4
b0111
f0118
node 3
node 1
d9376 a1209
node 2 node 4
@briandorsey
Replication Controllers Replication Controller
- Desired = 4
- Current = 4
b0111
f0118
node 3
node 1
d9376 a1209
node 2 node 4
@briandorsey
Replication Controllers Replication Controller
- Desired = 4
- Current = 3
b0111
f0118
node 3
node 1
a1209
node 4
@briandorsey
Replication Controllers Replication Controller
- Desired = 4
- Current = 4
b0111
f0118 c9bad
node 3
node 1
a1209
node 4
@briandorsey
The first appearance of the
‘guestbook’ app
Services
Services
A group of pods that act as one == Service Client
• group == selector
Portal IP is assigned
10.0.0.1 : 9376
iptables
DNAT
kube-proxy apiserver
TCP / UDP
watch
10.240.1.1 : 8080 10.240.2.2 : 8080 10.240.3.3 : 8080
@briandorsey
back to the ‘guestbook’ app...
...let’s add a frontend!
Inspecting your cluster and
apps:
kubectl, and the dashboard UI
Cluster services
Logging, Monitoring, DNS, etc.
@briandorsey
Rolling updates, rollbacks, and
canaries
A Kubernetes Cluster, redux
Kubernetes Master
Kubelet Proxy
<backing store> Kubelet Proxy
Kubelet Proxy
Pod Pod
Controller Pod Pod
Scheduler
Manager Container
Pod Container
Pod
Container
Container Container
Container
Container
Container Container
Container
Container
Container Container
Container
Container Container
API Server
Kubernetes Node
Kubernetes Node
Kubernetes Node
The API server is the
front-end for the Kubernetes
control plane
(scales horizontally)
#kubernetes @kubernetesio
Canary Example
Replication
Replication Replication
Controller Replication
Controller Pod Pod Controller
Controller
Pod Pod Pod
version = v1 frontend frontend version = v2
#pods = 2 #pods = 1
version= v1 version = v1 version = v2
type = FE type = FE type = FE
Service
Service
VIP
Label
Label selectors:
selector:
version
type = FE = 1.0
type = Frontend
#kubernetes @kubernetesio
Pod Patterns
http://blog.kubernetes.io/2015/06/the-distributed-system-toolkit-patt
erns.html
Sidecar Pattern
Github Consumers
Sidecar containers extend and enhance
the "main" container.
Volume
Pod
Ambassador Pattern
Consumers
Ambassador containers proxy a local
connection to the world. Redis Shards
localhost
Pod
Adapter Pattern
Adapter containers standardize and
Monitoring
normalize output.
System
Redis
Redis
Exporter
localhost OR Volume
Pod
New in 1.1
http://blog.kubernetes.io/2015/11/Kubernetes-1-1-Performance-upgra
des-improved-tooling-and-a-growing-community.html
Kubernetes 1.1
New
Resource IP Tables
kubectl
Overcommit Kube Proxy
tools
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
spec: http://k8s.io/foo http://k8s.io/bar
rules:
- host: k8s.io
http:
paths:
- path: /foo
backend:
serviceName: fooSvc fooSvc barSvc
servicePort: 80
- path: /bar
backend:
serviceName: barSvc
servicePort: 80
Horizontal Pod Autoscaling [Beta]
apiVersion: extensions/v1beta1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleRef:
kind: ReplicationController
name: php-apache
namespace: default
minReplicas: 1
maxReplicas: 10
cpuUtilization:
targetPercentage: 50
https://www.flickr.com/photos/davedehetre/4440211085
Kubernetes is Open Source
We want your help!
http://kubernetes.io
https://github.com/kubernetes/kubernetes/
Kubernetes Slack Community: http://slack.kubernetes.ios
@kubernetesio
#kubernetes @kubernetesio
● Cloud Native Computing Foundation:
https://cncf.io/
● Open Container Initiative:
https://www.opencontainers.org/
#kubernetes @kubernetesio
end