Kubernetes Upgrade Strategies
Best practices for upgrading Kubernetes clusters and applications
Kubernetes Upgrade Strategies
Upgrading Kubernetes clusters and applications requires careful planning and execution. This guide covers essential upgrade practices.
Video Tutorial
Prerequisites
- Basic understanding of Kubernetes
- Access to a Kubernetes cluster
- kubectl CLI tool installed
- Familiarity with cluster management
Project Structure
.
├── upgrade/
│ ├── cluster/ # Cluster upgrade configs
│ ├── apps/ # Application upgrade configs
│ ├── rollback/ # Rollback procedures
│ └── tests/ # Upgrade tests
└── monitoring/
├── health/ # Health checks
└── alerts/ # Upgrade alerts
Cluster Upgrade
1. Control Plane Upgrade
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.27.0
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
rotate-certificates: "true"
2. Node Pool Upgrade
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-upgrade
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
spec:
containers:
- name: app
image: app:v2
Application Upgrade
1. Rolling Update
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
spec:
containers:
- name: app
image: app:v2
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
2. Blue-Green Deployment
apiVersion: v1
kind: Service
metadata:
name: app
spec:
selector:
app: app
version: v1
---
apiVersion: v1
kind: Service
metadata:
name: app-preview
spec:
selector:
app: app
version: v2
Health Checks
1. Readiness Probe
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: app
image: app:v2
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
2. Startup Probe
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: app
image: app:v2
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30
periodSeconds: 10
Monitoring Setup
1. Upgrade Monitoring
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: upgrade-monitor
spec:
selector:
matchLabels:
app: upgrade-status
endpoints:
- port: metrics
2. Alert Configuration
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: upgrade-alerts
spec:
groups:
- name: upgrade
rules:
- alert: UpgradeFailed
expr: upgrade_status{state="failed"} > 0
for: 5m
labels:
severity: critical
Best Practices Checklist
- ✅ Backup before upgrade
- ✅ Test upgrade procedure
- ✅ Health monitoring
- ✅ Rollback plan
- ✅ Version compatibility
- ✅ Resource requirements
- ✅ Communication plan
- ✅ Downtime window
- ✅ Documentation
- ✅ Post-upgrade tests
Upgrade Patterns
Incremental Upgrade
- Version by version
- Component testing
- Gradual rollout
- Monitoring at each step
Direct Upgrade
- Skip versions
- Full testing
- Quick deployment
- Comprehensive monitoring
Canary Upgrade
- Partial rollout
- User testing
- Performance monitoring
- Gradual expansion
Common Pitfalls
- ❌ Insufficient testing
- ❌ Missing backups
- ❌ Poor monitoring
- ❌ No rollback plan
- ❌ Resource constraints
Rollback Procedures
1. Deployment Rollback
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 3
template:
metadata:
annotations:
kubernetes.io/change-cause: "Rolling back to v1"
spec:
containers:
- name: app
image: app:v1
2. StatefulSet Rollback
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: database
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
template:
spec:
containers:
- name: database
image: database:v1
Testing Strategy
1. Pre-upgrade Tests
apiVersion: batch/v1
kind: Job
metadata:
name: pre-upgrade-test
spec:
template:
spec:
containers:
- name: test
image: test:latest
command: ["./test-suite.sh"]
restartPolicy: Never
2. Post-upgrade Tests
apiVersion: batch/v1
kind: Job
metadata:
name: post-upgrade-test
spec:
template:
spec:
containers:
- name: test
image: test:latest
command: ["./validation-suite.sh"]
restartPolicy: Never
Version Management
1. Version Labels
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
template:
metadata:
labels:
app: myapp
version: v2.0.0
kubernetes.io/version: v1.27.0
2. Version Annotations
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kubernetes.io/change-cause: "Upgrade to v2.0.0"
app.kubernetes.io/version: "2.0.0"
kubernetes.io/target-version: "1.27.0"
Conclusion
Implementing these upgrade strategies ensures smooth and reliable updates for your Kubernetes clusters and applications. Regular testing and proper planning are essential for successful upgrades.