A Kubernetes Deployment is a higher-level API resource used to manage stateless applications by defining the desired state for a set of identical pods. It ensures the specified number of replicas are running and automatically replaces failed pods. Deployments also support rolling updates and rollbacks, making them ideal for controlled application updates and version management.
Why do we use Deployment?
To keep the application always available.
To scale the number of pods (increase/decrease).
To update app versions without downtime.
To roll back easily if something goes wrong.
Workflow
You create a Deployment YAML (specifies how many replicas, which image, etc.).
Deployment creates a ReplicaSet.
ReplicaSet creates Pods.
Kubernetes Scheduler assigns Pods to nodes.
If Pods die → ReplicaSet ensures they are recreated.
Deployment Commands in Kubernetes
Basic Commands
# Create deployment from YAMLkubectl apply -f deployment.yaml# Delete deploymentkubectl delete -f deployment.yamlkubectl delete deployment <deployment-name># List all deploymentskubectl get deployments# Get detailed info about a deploymentkubectl describe deployment <deployment-name>
Pods & ReplicaSets from Deployment
# Get all pods created by deploymentkubectl get pods -l app=<label-name># Get ReplicaSets controlled by a deploymentkubectl get rs# Describe ReplicaSetkubectl describe rs <replicaset-name>
Scaling
# Scale deployment manuallykubectl scale deployment <deployment-name> --replicas=5# Check rollout status after scalingkubectl rollout status deployment <deployment-name># Autoscale deployment (Horizontal Pod Autoscaler)kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80
# View deployment rollout historykubectl rollout history deployment/<deployment-name># View specific revision detailskubectl rollout history deployment/<deployment-name> --revision=2# Rollback to previous revisionkubectl rollout undo deployment/<deployment-name># Rollback to a specific revisionkubectl rollout undo deployment/<deployment-name> --to-revision=3
Debugging
# Show events related to deploymentkubectl describe deployment <deployment-name># Get logs of a specific podkubectl logs <pod-name># Execute into a running pod (shell access)kubectl exec -it <pod-name> -- /bin/bash
YAML from Running Deployment
# Export running deployment as YAMLkubectl get deployment <deployment-name> -o yaml > export.yaml