Skip to main content

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>