Kubernetes Deployments¶
Overview¶
This guide covers deployment strategies, configurations, and best practices for managing application deployments in Kubernetes.
Prerequisites¶
- Basic understanding of Kubernetes concepts
- Knowledge of kubectl commands
- Familiarity with YAML configuration
- Understanding of container lifecycle
Learning Objectives¶
- Understand deployment strategies
- Learn deployment configuration
- Master rolling updates
- Implement deployment patterns
- Handle deployment rollbacks
Table of Contents¶
- Deployment Basics
- Deployment Strategies
- Configuration Management
- Rolling Updates
- Rollback Management
Deployment Basics¶
Basic Deployment Structure¶
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:1.14.2
ports:
- containerPort: 80
Deployment Components¶
- metadata: Name and labels for the deployment
- spec.replicas: Number of desired pods
- spec.selector: How the deployment finds pods to manage
- spec.template: Pod template specification
Deployment Strategies¶
Rolling Update¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue-Green Deployment¶
# Blue deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-blue
spec:
template:
metadata:
labels:
app: myapp
version: blue
---
# Green deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-green
spec:
template:
metadata:
labels:
app: myapp
version: green
Canary Deployment¶
# Main deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-main
spec:
replicas: 9
template:
metadata:
labels:
app: myapp
version: stable
---
# Canary deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
version: canary
Configuration Management¶
Environment Variables¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
template:
spec:
containers:
- name: app
image: myapp:1.0
env:
- name: DATABASE_URL
value: "postgresql://db:5432"
- name: API_KEY
valueFrom:
secretKeyRef:
name: app-secrets
key: api-key
ConfigMaps¶
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.properties: |
environment=production
log.level=info
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
template:
spec:
containers:
- name: app
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
Rolling Updates¶
Update Strategy¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
minReadySeconds: 5
Commands for Updates¶
# Update image
kubectl set image deployment/app-deployment app=myapp:2.0
# Check rollout status
kubectl rollout status deployment/app-deployment
# Pause rollout
kubectl rollout pause deployment/app-deployment
# Resume rollout
kubectl rollout resume deployment/app-deployment
Rollback Management¶
Rollback Configuration¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
revisionHistoryLimit: 10
Rollback Commands¶
# View rollout history
kubectl rollout history deployment/app-deployment
# Rollback to previous version
kubectl rollout undo deployment/app-deployment
# Rollback to specific revision
kubectl rollout undo deployment/app-deployment --to-revision=2
Best Practices¶
- Use declarative configuration
- Implement proper health checks
- Set resource limits
- Use meaningful labels
- Configure proper update strategy
- Maintain revision history
- Implement proper monitoring
Common Pitfalls¶
- Insufficient health checks
- Poor resource management
- Missing rollback strategy
- Inadequate monitoring
- Poor version control
- Insufficient testing
Implementation Examples¶
Complete Deployment Configuration¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web
environment: production
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web-app
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
env:
- name: ENVIRONMENT
valueFrom:
configMapKeyRef:
name: app-config
key: environment
- name: API_KEY
valueFrom:
secretKeyRef:
name: app-secrets
key: api-key
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
Resources for Further Learning¶
- Kubernetes Deployments Documentation
- Deployment Strategies
- Rolling Update Configuration
- Deployment Best Practices
Practice Exercises¶
- Create a basic deployment
- Implement rolling updates
- Configure blue-green deployment
- Set up canary deployment
- Manage deployment rollbacks