by Rob Richardson
Rob Richardson is a software craftsman building web properties in ASP.NET and Node, React and Vue. He's a frequent speaker at conferences, user groups, and community events, and a diligent teacher and student of high quality software development. You can find this and other talks on https://robrich.org/presentations and follow him on twitter at @rob_rich.
Industry standard container orchestration engine
by Google
best known for rolling updates and auto scaling
Given a cluster of machine(s)
We specify containers' desired state
The engine makes it happen
We don't specify which machine does what
Hosts containers
Either Docker containers or ...
are there any others really?
Docker is an ecosystem around Container Virtualization
Light-weight kernel virtualization
A suite of command-line tools for creating, running, and managing containers
Source: http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/
Containers virtualize and share the host kernel
Containers must run on the kernel for which they were built:
Download: https://robrich.org/slides/welcome-to-docker/docker-ecosystem.pdf
K8s: "Given a Docker image ..."
Keep
|
Replace
|
source: https://vitalflux.com/quick-glance-at-kubernetes-architectural-building-blocks/
Kubernetes gets microservices
Pod |
work details |
---|---|
Deployment |
scale / restart details |
Service |
inbound traffic |
others | ingress, replica set, stateful set, job, cron job, secret, etc. |
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
source: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
apiVersion
v1.9+ | apiVersion: apps/v1 |
---|---|
v1.8 | apiVersion: apps/v1beta2 |
v1.7 & 1.6 | apiVersion: apps/v1beta1 |
< 1.6 | apiVersion: extensions/v1beta1 |
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 80
protocol: TCP
source: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/
no service | no traffic into pod |
---|---|
ClusterIP |
internal port on cluster |
NodePort |
public port on each worker node |
LoadBalancer |
cloud's native load balancer |
Service.yaml
kind: Service
...
spec:
selector:
app: nginx
...
Pod.yaml (or template in Deployment.yaml)
kind: Pod
metadata:
labels:
app: nginx
...
DEMO: yaml config files
DEMO: launch apps
DEMO: upgrade apps
kubectl
UIkubectl
UIWarning
It's really easy to change things.
Next time you deploy
your changes will be lost.