- Authors

- Name
- Phillip Pham
- @ddppham
TL;DR
- Vier Migrationsmuster: Lift-and-Shift (schnell), Replatform (Cloud-Services nutzen), Refactor (Microservices) und Rebuild (komplett neu)
- Lift-and-Shift ist der schnellste Weg: Legacy-App in Container packen, Kubernetes-Deployment erstellen, Datenbank migrieren
- Fuenf Phasen: Assessment, Planning, Preparation, Migration und Optimization -- mit Blue-Green oder Canary Deployment fuer Zero-Downtime
- Rollback-Strategie ist Pflicht: Blue-Green Deployments erlauben sofortiges Zurueckschalten per Service-Selector-Aenderung
- Praxis-Ergebnisse: 80% schnellere Deployments, 60% Kosteneinsparung und 99,9% Verfuegbarkeit nach Migration
Legacy auf Kubernetes migrieren: Der komplette Guide
Sie wollen Ihre Legacy-Anwendungen auf Kubernetes migrieren? Dieser Guide zeigt Ihnen Schritt für Schritt, wie deutsche Unternehmen erfolgreich von Monolith zu Microservices wechseln.
Warum Legacy auf Kubernetes migrieren?
Viele deutsche Unternehmen betreiben noch Legacy-Anwendungen auf veralteten Infrastrukturen. Die Migration auf Kubernetes bietet enorme Vorteile für Modernisierung, Skalierbarkeit und Betriebseffizienz:
- Modernisierung - Cloud-Native Architekturen
- Skalierbarkeit - Horizontale und vertikale Skalierung
- Kosteneinsparung - Optimierte Ressourcen-Nutzung
- Agilität - Schnellere Deployments und Updates
- Sicherheit - Moderne Security-Features
Migration Strategien
Migration Patterns
Legacy Migration Patterns
├── Lift and Shift
│ ├── Containerization
│ ├── Minimal Changes
│ └── Quick Migration
├── Replatform
│ ├── Cloud-Native Services
│ ├── Managed Databases
│ └── Modern Middleware
├── Refactor
│ ├── Microservices
│ ├── API-First Design
│ └── Event-Driven Architecture
└── Rebuild
├── Cloud-Native
├── Serverless
└── Modern Frameworks
Migration Phases
- Phase 1: Assessment - Anwendungsanalyse und -inventur
- Phase 2: Planning - Migrationsstrategie und -planung
- Phase 3: Preparation - Infrastruktur und Tooling
- Phase 4: Migration - Schrittweise Migration
- Phase 5: Optimization - Performance und Kostenoptimierung
Assessment und Planning
Application Inventory
# Application Assessment Template
apiVersion: v1
kind: ConfigMap
metadata:
name: app-assessment
data:
assessment.yaml: |
applications:
- name: "legacy-app-1"
type: "monolith"
technology: "Java Spring"
database: "Oracle"
dependencies:
- "Active Directory"
- "File System"
- "Message Queue"
migration_complexity: "medium"
business_criticality: "high"
estimated_effort: "8 weeks"
- name: "legacy-app-2"
type: "web-application"
technology: "PHP"
database: "MySQL"
dependencies:
- "Apache"
- "File Upload"
migration_complexity: "low"
business_criticality: "medium"
estimated_effort: "4 weeks"
Migration Strategy Matrix
# Migration Strategy Decision Matrix
apiVersion: v1
kind: ConfigMap
metadata:
name: migration-strategy
data:
strategy.yaml: |
decision_factors:
business_criticality:
high: "lift_and_shift"
medium: "replatform"
low: "refactor"
technical_debt:
high: "refactor"
medium: "replatform"
low: "lift_and_shift"
time_constraints:
urgent: "lift_and_shift"
moderate: "replatform"
flexible: "refactor"
budget:
limited: "lift_and_shift"
moderate: "replatform"
generous: "refactor"
Lift and Shift Migration
Containerization Strategy
# Dockerfile für Legacy Java Application
FROM openjdk:11-jre-slim
# Install dependencies
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*
# Create app directory
WORKDIR /app
# Copy application JAR
COPY target/legacy-app.jar app.jar
# Copy configuration
COPY config/application.properties /app/config/
# Expose port
EXPOSE 8080
# Health check
HEALTHCHECK \
CMD curl -f http://localhost:8080/health || exit 1
# Run application
CMD ["java", "-jar", "app.jar"]
Kubernetes Deployment
# Legacy Application Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: legacy-app
labels:
app: legacy-app
spec:
replicas: 3
selector:
matchLabels:
app: legacy-app
template:
metadata:
labels:
app: legacy-app
spec:
containers:
- name: legacy-app
image: company/legacy-app:latest
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: 'kubernetes'
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: database-secret
key: url
- name: DATABASE_USERNAME
valueFrom:
secretKeyRef:
name: database-secret
key: username
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: database-secret
key: password
resources:
requests:
memory: '512Mi'
cpu: '500m'
limits:
memory: '1Gi'
cpu: '1000m'
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
Database Migration
# Database Migration Job
apiVersion: batch/v1
kind: Job
metadata:
name: database-migration
spec:
template:
spec:
containers:
- name: migration
image: migration-tool:latest
command: ['python', 'migrate.py']
env:
- name: SOURCE_DB_HOST
value: 'legacy-db.company.local'
- name: SOURCE_DB_PORT
value: '1521'
- name: SOURCE_DB_NAME
value: 'LEGACY_DB'
- name: TARGET_DB_HOST
value: 'kubernetes-db-service'
- name: TARGET_DB_PORT
value: '5432'
- name: TARGET_DB_NAME
value: 'kubernetes_db'
volumeMounts:
- name: migration-scripts
mountPath: /scripts
- name: migration-data
mountPath: /data
volumes:
- name: migration-scripts
configMap:
name: migration-scripts
- name: migration-data
persistentVolumeClaim:
claimName: migration-data-pvc
restartPolicy: Never
backoffLimit: 3
Replatform Migration
Cloud-Native Services
# Cloud-Native Service Migration
apiVersion: apps/v1
kind: Deployment
metadata:
name: modernized-app
spec:
replicas: 3
selector:
matchLabels:
app: modernized-app
template:
metadata:
labels:
app: modernized-app
spec:
containers:
- name: app
image: company/modernized-app:latest
env:
# Replace file system with S3
- name: S3_BUCKET
value: 'app-storage'
- name: S3_ENDPOINT
value: 'http://minio-service:9000'
# Replace message queue with Kafka
- name: KAFKA_BOOTSTRAP_SERVERS
value: 'kafka-service:9092'
- name: KAFKA_TOPIC
value: 'app-events'
# Replace LDAP with OAuth
- name: OAUTH_PROVIDER
value: 'keycloak'
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: oauth-secret
key: client-id
Managed Database Integration
# PostgreSQL StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql
spec:
serviceName: postgresql
replicas: 3
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
containers:
- name: postgresql
image: postgres:13
env:
- name: POSTGRES_DB
value: 'app_database'
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgresql-secret
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgresql-secret
key: password
ports:
- containerPort: 5432
volumeMounts:
- name: postgresql-data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: postgresql-data
spec:
accessModes: ['ReadWriteOnce']
resources:
requests:
storage: 10Gi
Refactor zu Microservices
Service Decomposition
# Microservices Architecture
apiVersion: v1
kind: ConfigMap
metadata:
name: microservices-architecture
data:
architecture.yaml: |
services:
user-service:
responsibility: "User Management"
database: "user-db"
api: "/api/users"
dependencies: []
order-service:
responsibility: "Order Processing"
database: "order-db"
api: "/api/orders"
dependencies:
- "user-service"
- "inventory-service"
inventory-service:
responsibility: "Inventory Management"
database: "inventory-db"
api: "/api/inventory"
dependencies: []
payment-service:
responsibility: "Payment Processing"
database: "payment-db"
api: "/api/payments"
dependencies:
- "user-service"
- "order-service"
API Gateway
# Kong API Gateway
apiVersion: apps/v1
kind: Deployment
metadata:
name: kong-gateway
spec:
replicas: 3
selector:
matchLabels:
app: kong-gateway
template:
metadata:
labels:
app: kong-gateway
spec:
containers:
- name: kong
image: kong:2.8
env:
- name: KONG_DATABASE
value: 'postgres'
- name: KONG_PG_HOST
value: 'postgresql-service'
- name: KONG_PG_DATABASE
value: 'kong'
ports:
- containerPort: 8000
- containerPort: 8443
- containerPort: 8001
- containerPort: 8444
Service Mesh mit Istio
# Istio Service Mesh Configuration
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: app-virtual-service
spec:
hosts:
- 'app.company.com'
gateways:
- app-gateway
http:
- route:
- destination:
host: user-service
port:
number: 8080
weight: 50
- destination:
host: user-service-v2
port:
number: 8080
weight: 50
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: user-service-rule
spec:
host: user-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
Migration Tools und Automation
Migration Pipeline
# Migration CI/CD Pipeline
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: migration-pipeline
spec:
entrypoint: migration-workflow
templates:
- name: migration-workflow
steps:
- - name: analyze
template: analyze-legacy
- - name: containerize
template: containerize-app
- - name: test
template: test-migration
- - name: deploy
template: deploy-kubernetes
when: "{{steps.test.outputs.result}} == 'success'"
- name: analyze-legacy
container:
image: analysis-tool:latest
command: ['python', 'analyze.py']
- name: containerize-app
container:
image: containerization-tool:latest
command: ['python', 'containerize.py']
- name: test-migration
container:
image: test-tool:latest
command: ['python', 'test.py']
- name: deploy-kubernetes
container:
image: deployment-tool:latest
command: ['kubectl', 'apply', '-f', '/manifests']
Automated Testing
# Migration Testing Strategy
apiVersion: v1
kind: ConfigMap
metadata:
name: migration-testing
data:
testing.yaml: |
test_phases:
unit_tests:
- "Component Tests"
- "Integration Tests"
- "API Tests"
functional_tests:
- "End-to-End Tests"
- "User Acceptance Tests"
- "Performance Tests"
migration_tests:
- "Data Integrity Tests"
- "Backward Compatibility Tests"
- "Rollback Tests"
test_automation:
tools:
- "JUnit"
- "TestNG"
- "Selenium"
- "Postman"
- "JMeter"
Rollback Strategien
Blue-Green Deployment
# Blue-Green Deployment Strategy
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: app-blue # Initially points to blue
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-blue
spec:
replicas: 3
selector:
matchLabels:
app: app-blue
template:
metadata:
labels:
app: app-blue
spec:
containers:
- name: app
image: company/app:blue
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-green
spec:
replicas: 0 # Initially scaled to 0
selector:
matchLabels:
app: app-green
template:
metadata:
labels:
app: app-green
spec:
containers:
- name: app
image: company/app:green
Canary Deployment
# Canary Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1 # Small number for canary
selector:
matchLabels:
app: app-canary
template:
metadata:
labels:
app: app-canary
spec:
containers:
- name: app
image: company/app:new-version
env:
- name: CANARY_FLAG
value: 'true'
Monitoring und Observability
Migration Monitoring
# Migration Monitoring Dashboard
apiVersion: v1
kind: ConfigMap
metadata:
name: migration-monitoring
data:
dashboard.yaml: |
metrics:
- name: "Migration Progress"
query: "migration_progress_percentage"
alert_threshold: 90
- name: "Application Performance"
query: "application_response_time"
alert_threshold: 1000ms
- name: "Error Rate"
query: "application_error_rate"
alert_threshold: 5%
- name: "Data Integrity"
query: "data_integrity_score"
alert_threshold: 99.9%
alerts:
- name: "Migration Stalled"
condition: "migration_progress < 10% for 1h"
severity: "critical"
- name: "Performance Degradation"
condition: "response_time > 2000ms for 5m"
severity: "warning"
- name: "High Error Rate"
condition: "error_rate > 10% for 2m"
severity: "critical"
Data Validation
# Data Validation Job
apiVersion: batch/v1
kind: CronJob
metadata:
name: data-validation
spec:
schedule: '*/30 * * * *' # Every 30 minutes
jobTemplate:
spec:
template:
spec:
containers:
- name: validation
image: validation-tool:latest
command: ['python', 'validate_data.py']
env:
- name: SOURCE_DB
value: 'legacy-database'
- name: TARGET_DB
value: 'kubernetes-database'
- name: VALIDATION_RULES
value: '/rules/validation.yaml'
restartPolicy: OnFailure
Erfolgsgeschichten
Fallstudie: E-Commerce Migration
Ausgangssituation:
- Monolithische PHP-Anwendung
- MySQL-Datenbank
- Manuelle Deployments
- Hohe Wartungskosten
Lösung:
- Containerisierung mit Docker
- Kubernetes-Cluster Setup
- Microservices-Architektur
- CI/CD Pipeline
Ergebnisse:
- 80% schnellere Deployments
- 60% Kosteneinsparung
- 99.9% Verfügbarkeit
- Vollständige Automatisierung
Fallstudie: Banking Application
Ausgangssituation:
- Legacy Java-Anwendung
- Oracle-Datenbank
- Komplexe Abhängigkeiten
- Compliance-Anforderungen
Lösung:
- Schrittweise Migration
- Blue-Green Deployments
- Advanced Monitoring
- Security Hardening
Ergebnisse:
- Zero-Downtime Migration
- 100% Compliance
- 50% Performance-Verbesserung
- Reduzierte Betriebskosten
Migration Best Practices
Planning und Preparation
- Thorough Assessment - Umfassende Anwendungsanalyse
- Risk Mitigation - Risikominimierung
- Stakeholder Buy-in - Stakeholder-Unterstützung
- Team Training - Team-Schulungen
- Testing Strategy - Umfassende Teststrategie
Execution
- Phased Approach - Schrittweise Migration
- Rollback Plan - Rollback-Plan
- Monitoring - Kontinuierliche Überwachung
- Communication - Regelmäßige Kommunikation
- Documentation - Vollständige Dokumentation
Post-Migration
- Performance Optimization - Performance-Optimierung
- Cost Optimization - Kostenoptimierung
- Team Training - Weiterbildung
- Process Improvement - Prozessverbesserung
- Knowledge Transfer - Wissenstransfer
Zukunft der Migration
Emerging Technologies
- AI/ML Integration - KI-gestützte Migration
- Automated Analysis - Automatisierte Analyse
- Cloud-Native Patterns - Cloud-Native Muster
- Serverless Migration - Serverless-Migration
- Edge Computing - Edge-Computing
Technology Trends
- GitOps Migration - GitOps-basierte Migration
- Infrastructure as Code - Infrastructure as Code
- Observability - Erweiterte Observability
- Security - Security-First Migration
- Automation - Vollständige Automatisierung
Fazit
Kubernetes Migration bietet deutschen Unternehmen enorme Chancen für Modernisierung und Wettbewerbsvorteile:
- Modernisierung - Cloud-Native Architekturen
- Skalierbarkeit - Horizontale und vertikale Skalierung
- Kosteneinsparung - Optimierte Ressourcen-Nutzung
- Agilität - Schnellere Deployments
- Sicherheit - Moderne Security-Features
Wichtige Erfolgsfaktoren:
- Proper Planning - Umfassende Migrationsplanung
- Risk Management - Risikomanagement
- Team Skills - Kubernetes-Kompetenzen
- Testing - Umfassende Tests
Nächste Schritte:
- Assessment - Anwendungsanalyse durchführen
- Strategy - Migrationsstrategie entwickeln
- Pilot - Pilot-Migration starten
- Execution - Schrittweise Migration
- Optimization - Performance und Kosten optimieren
Mit Kubernetes Migration können deutsche Unternehmen Legacy-Anwendungen modernisieren und langfristige Wettbewerbsvorteile erzielen.
Weiterführende Artikel:
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Legacy-Modernisierung: Von VMs zu Kubernetes
Legacy-Anwendungen von VMs zu Kubernetes migrieren: Die 6 Rs der Modernisierung, Containerisierung einer 3-Tier-App und Datenbank-Strategien.
Microservices Decomposition: Monolith aufteilen
Monolith in Microservices aufteilen mit Domain-Driven Design und Strangler Fig Pattern. Praktischer Kubernetes-Guide mit Deployments und Datenbank-Strategien.
Strangler Fig Pattern: Monolith zu Microservices migrieren
Schrittweise Migration vom Monolithen zu Microservices mit dem Strangler Fig Pattern auf Kubernetes inklusive Ingress-Routing und Rollback-Strategie.
Kubernetes CQRS Pattern Microservices in Deutschland optimal nutzen
Optimieren Sie Skalierbarkeit und Performance Ihrer komplexen Microservices auf Kubernetes in Deutschland mit dem CQRS Pattern. Erfahren Sie, wie diese zukunftsweisende Architektur Compliance-Anforderungen erfüllt und digitale Souveränität für deutsche Unternehmen sichert.
Distributed Tracing: Jaeger auf Kubernetes einrichten
Jaeger für Distributed Tracing auf Kubernetes einrichten mit dem Jaeger Operator. OpenTelemetry-Instrumentation in Go und Python, Trace-Propagation zwischen Microservices und praktische Analyse von Latenz-Problemen.