Kubernetes Upgrade Strategies
Best practices for upgrading Kubernetes clusters and applications
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.