Deployments
Its just a Replicaset, with more features, like rollback and rollout
Deployments are simply objects that encapsulate ReplicaSets, allowing definitions around rolling Updates, undo changes, pause and resume
Identical specs
You can cat replicaSet.yaml | sed 's/ReplicaSet/Deployment/' a ReplicaSet definition to turn it into a Deployment.
Template
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${RESOURCE_NAME}
namespace: default
labels: &app_labels
name: ${RESOURCE_NAME}
spec:
selector:
matchLabels:
<<: *app_labels
replicas: 1
template:
metadata:
name: ${RESOURCE_NAME}
labels:
<<: *app_labels
spec:
containers:
- name: ${RESOURCE_NAME}
image: localhost:30000/${RESOURCE_NAME}:latest
Rollout
A new deployment triggers a rollout, which triggers a new deployment revision (rev 1). When the container version is outdated, a new rollout is created (rev 2).
kubectl rollout status
kubectl rollout history {deployment-name}
Types of Deployment Strategies
- Recreate: Destroy then create (causes downtime) (Scale down replica set to 0 first)
- Rolling Update: Take one down, upgrade it around (upgrade it)
Can also use
kubectl set image deployment/{deployment-name} container=image:latest
K8s creates a new replica set when you update your deployment.
Rollback (Uhoh!)
kubectl rollout undo deployment/<deployment-name>