Skip to content

Kubernetes_deployments

Deployments provide declarative updates for Pods and ReplicaSets. They manage the lifecycle of applications including rolling updates and rollbacks.

┌─────────────────────────────────────────────────────────────────────────────┐
│ Kubernetes Deployment │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Deployment │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ ReplicaSet │ │ │
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ │ Pod 1 │ │ Pod 2 │ │ Pod 3 │ │ │ │
│ │ │ │ nginx:1.2│ │ nginx:1.2│ │ nginx:1.2│ │ │ │
│ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ Benefits: │
│ ✓ Declare desired state │
│ ✓ Rolling updates │
│ ✓ Rollback to previous versions │
│ ✓ Scale up/down │
│ ✓ Self-healing │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Terminal window
# Create deployment
kubectl create deployment nginx --image=nginx:latest
# Create with replicas
kubectl create deployment nginx --image=nginx:latest --replicas=3
# Create from YAML
kubectl apply -f deployment.yaml
deployment.yaml
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:latest
ports:
- containerPort: 80
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "128Mi"
cpu: "250m"
┌─────────────────────────────────────────────────────────────────────────────┐
│ Rolling Update Strategy │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Initial: nginx:1.20 (3 replicas) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │1.20 │ │1.20 │ │1.20 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Step 1: Add 1 new pod with nginx:1.21 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │1.20 │ │1.20 │ │1.20 │ │1.21 │ ← new │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Step 2: Remove 1 old pod │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │1.20 │ │1.21 │ │1.21 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Continue until all pods are nginx:1.21 │
│ │
│ Default: maxSurge=1, maxUnavailable=0 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
spec:
replicas: 3
strategy:
type: Recreate
┌─────────────────────────────────────────────────────────────────────────────┐
│ Recreate Strategy │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Initial: nginx:1.20 (3 replicas) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │1.20 │ │1.20 │ │1.20 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Step 1: Kill all pods │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ X │ │ X │ │ X │ (downtime) │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Step 2: Create new pods │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │1.21 │ │1.21 │ │1.21 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Terminal window
# Get deployments
kubectl get deployments
# Get deployment details
kubectl describe deployment nginx-deployment
# Scale deployment
kubectl scale deployment nginx-deployment --replicas=5
# Scale based on conditions
kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80
# Update image
kubectl set image deployment/nginx-deployment nginx=nginx:1.21
# View rollout status
kubectl rollout status deployment/nginx-deployment
# View rollout history
kubectl rollout history deployment/nginx-deployment
Terminal window
# Rollback to previous revision
kubectl rollout undo deployment/nginx-deployment
# Rollback to specific revision
kubectl rollout undo deployment/nginx-deployment --to-revision=2
# Check rollout status
kubectl rollout status deployment/nginx-deployment
Terminal window
# Apply deployment
kubectl apply -f deployment.yaml
# Delete deployment
kubectl delete deployment nginx-deployment
# Get deployment YAML
kubectl get deployment nginx -o yaml
# Watch rollout status
kubectl rollout status -w deployment/nginx-deployment
# Pause deployment
kubectl rollout pause deployment/nginx-deployment
# Resume deployment
kubectl rollout resume deployment/nginx-deployment
# Restart deployment
kubectl rollout restart deployment/nginx-deployment

In this chapter, you learned:

  • What Deployments are
  • Creating Deployments
  • Deployment strategies (Rolling Update, Recreate)
  • Managing Deployments (scale, update)
  • Rollback procedures