Create and manage Kubernetes Deployments for declarative application updates, including rolling updates, rollbacks, and scaling strategies.
A comprehensive skill for working with Kubernetes Deployments, the declarative way to manage application updates, scaling, and rollbacks in Kubernetes clusters.
This skill helps you create, manage, and troubleshoot Kubernetes Deployments. You'll learn to:
A Deployment provides declarative updates for Pods and ReplicaSets. Key concepts:
When creating a Deployment manifest:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: <app-name>
labels:
app: <app-label>
spec:
replicas: 3
selector:
matchLabels:
app: <app-label>
template:
metadata:
labels:
app: <app-label>
spec:
containers:
- name: <container-name>
image: <image:tag>
ports:
- containerPort: <port>
```
Apply the Deployment:
```bash
kubectl apply -f deployment.yaml
```
Verify the Deployment:
```bash
kubectl get deployments
kubectl get pods -l app=<app-label>
kubectl describe deployment <app-name>
```
To update the container image:
```bash
kubectl set image deployment/<app-name> <container-name>=<new-image:tag>
```
Or edit the manifest and reapply:
```bash
kubectl apply -f deployment.yaml
```
Monitor the rollout:
```bash
kubectl rollout status deployment/<app-name>
kubectl get pods -w
```
Add update strategy to your Deployment spec:
```yaml
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Maximum Pods over desired count
maxUnavailable: 0 # Maximum Pods unavailable during update
```
View rollout history:
```bash
kubectl rollout history deployment/<app-name>
```
Rollback to previous version:
```bash
kubectl rollout undo deployment/<app-name>
```
Rollback to specific revision:
```bash
kubectl rollout undo deployment/<app-name> --to-revision=<number>
```
Scale imperatively:
```bash
kubectl scale deployment/<app-name> --replicas=<number>
```
Or update the manifest and reapply:
```yaml
spec:
replicas: 5
```
Verify scaling:
```bash
kubectl get deployment <app-name>
kubectl get pods -l app=<app-label>
```
Configure liveness and readiness probes in the container spec:
```yaml
spec:
containers:
- name: <container-name>
image: <image:tag>
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
```
Define resource constraints:
```yaml
spec:
containers:
- name: <container-name>
image: <image:tag>
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
```
This ensures proper scheduling and prevents resource exhaustion.
Common troubleshooting commands:
```bash
kubectl get deployment <app-name>
kubectl describe deployment <app-name>
kubectl get pods -l app=<app-label>
kubectl logs -l app=<app-label>
kubectl get rs -l app=<app-label>
kubectl describe pod <pod-name>
```
Common issues:
**Labels and Selectors:**
**Update Strategy:**
**Resource Management:**
**Health Checks:**
**Version Control:**
**Example 1: Create an nginx Deployment**
```bash
kubectl create deployment nginx --image=nginx:1.25 --replicas=3
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get all -l app=nginx
```
**Example 2: Update with rolling strategy**
```bash
kubectl set image deployment/nginx nginx=nginx:1.26
kubectl rollout status deployment/nginx
kubectl rollout history deployment/nginx
```
**Example 3: Rollback after failed update**
```bash
kubectl rollout undo deployment/nginx
kubectl rollout status deployment/nginx
```
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/kubernetes-deployments/raw