| name | k8s-deploy |
| description | Safe Kubernetes deployment practices and rollback procedures |
| homepage | https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ |
| metadata | {"emoji":"🚀","version":"1.0.0","author":"Gourav Shah","license":"MIT","requires":{"bins":["kubectl"]},"tags":["kubernetes","deployment","rollout","sre"]} |
Kubernetes Deployment
Safe deployment practices, rollout strategies, and rollback procedures.
When to Use This Skill
Use this skill when:
- Deploying new application versions
- Rolling back failed deployments
- Scaling applications
- Managing deployment strategies
Pre-Deployment Checklist
1. Cluster Health Check
kubectl get nodes
kubectl get pods -A | grep -v Running | grep -v Completed
kubectl top nodes
2. Image Verification
docker manifest inspect <image>:<tag>
kubectl get deployment <name> -o jsonpath='{.spec.template.spec.containers[0].image}'
3. Current State Backup
kubectl get deployment <name> -o yaml > deployment-backup.yaml
kubectl rollout history deployment/<name>
Deployment Methods
Update Image (Most Common)
kubectl set image deployment/<name> <container>=<image>:<tag>
kubectl set image deployment/nginx nginx=nginx:1.25
kubectl rollout status deployment/<name>
Apply Manifest
kubectl apply -f deployment.yaml --dry-run=client
kubectl diff -f deployment.yaml
kubectl apply -f deployment.yaml
kubectl rollout status deployment/<name>
Patch Deployment
kubectl patch deployment <name> -p '{"spec":{"replicas":5}}'
kubectl patch deployment <name> --type='json' \
-p='[{"op":"replace","path":"/spec/replicas","value":5}]'
Rollout Management
Check Rollout Status
kubectl rollout status deployment/<name>
kubectl rollout history deployment/<name>
kubectl rollout history deployment/<name> --revision=2
Pause/Resume Rollout
kubectl rollout pause deployment/<name>
kubectl rollout resume deployment/<name>
Rollback
kubectl rollout undo deployment/<name>
kubectl rollout undo deployment/<name> --to-revision=2
kubectl rollout status deployment/<name>
Scaling
Manual Scaling
kubectl scale deployment/<name> --replicas=5
kubectl scale deployment/<name1> deployment/<name2> --replicas=3
Autoscaling (HPA)
kubectl autoscale deployment/<name> --min=2 --max=10 --cpu-percent=80
kubectl get hpa
kubectl describe hpa <name>
Deployment Strategies
Rolling Update (Default)
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
kubectl get deployment <name> -o jsonpath='{.spec.strategy}'
Recreate
spec:
strategy:
type: Recreate
Blue-Green (Manual)
kubectl apply -f deployment-v2.yaml
kubectl get pods -l version=v2
kubectl patch service <name> -p '{"spec":{"selector":{"version":"v2"}}}'
kubectl patch service <name> -p '{"spec":{"selector":{"version":"v1"}}}'
Canary (Manual)
kubectl scale deployment/<name>-main --replicas=9
kubectl scale deployment/<name>-canary --replicas=1
Post-Deployment Verification
Health Checks
kubectl get pods -l app=<name>
kubectl get deployment <name>
kubectl get events --field-selector involvedObject.name=<deployment> --sort-by='.lastTimestamp'
Smoke Tests
kubectl port-forward deployment/<name> 8080:80 &
curl localhost:8080/health
kubectl exec -it deployment/<name> -- curl localhost/health
Compare Metrics
kubectl top pods -l app=<name>
Troubleshooting Failed Deployments
Deployment Stuck
kubectl rollout status deployment/<name>
kubectl describe deployment <name>
kubectl get pods -l app=<name>
kubectl describe pod <problematic-pod>
Common Issues
| Symptom | Check | Fix |
|---|
| ImagePullBackOff | Image name/tag, registry auth | Fix image reference |
| CrashLoopBackOff | Pod logs | Fix application error |
| Pending pods | Node resources, PVC | Scale cluster or fix storage |
| Readiness probe failing | App startup time | Adjust probe timing |
Emergency Rollback
kubectl rollout undo deployment/<name>
kubectl scale deployment/<name> --replicas=0
kubectl apply -f deployment-backup.yaml
Safe Deployment Workflow
kubectl get nodes && kubectl top nodes
kubectl get deployment <name> -o yaml > backup.yaml
kubectl apply -f new-deployment.yaml --dry-run=client
kubectl diff -f new-deployment.yaml
kubectl apply -f new-deployment.yaml
kubectl rollout status deployment/<name> --timeout=5m
kubectl get pods -l app=<name>
kubectl logs -l app=<name> --tail=20
kubectl rollout undo deployment/<name>
Related Skills
- k8s-debug: For troubleshooting deployment issues
- argocd-gitops: For GitOps-based deployments
- incident-response: When deployments cause incidents