- Published on
Kubernetes Migration: Legacy-Anwendungen erfolgreich migrieren
- Authors
- Name
- Phillip Pham
- @ddppham
Warum Legacy-Migration auf Kubernetes?
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.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Container Instances vs. Kubernetes: Die richtige Wahl für deutsche Unternehmen im Jahr 2025
Container Instances oder Kubernetes? Dieser detaillierte Vergleich hilft deutschen IT-Teams, die optimale Container-Strategie für Kosten, Skalierbarkeit und DSGVO-Compliance zu finden. Fokus auf Azure, AWS und Google Cloud.
Azure AKS Enterprise Platform: Skalierbare Anwendungen für Konzerne
Wie Azure AKS als Enterprise-Plattform für skalierbare Anwendungen in Konzernen eingesetzt wird – von Migration alter Monolithen zu Microservices bis hin zu Multi-Cloud Management.
OpenTelemetry für Kubernetes in Deutschland: Optimierte Observability für den Mittelstand
Steigern Sie die Effizienz Ihrer Kubernetes-Cluster mit OpenTelemetry! Dieser Leitfaden zeigt deutschen KMUs, wie sie proaktive Problembehebung, schnellere Fehlerbehebung und optimierte Ressourcenallokation mit OpenTelemetry erreichen. Erfahren Sie mehr über DSGVO-konforme Implementierung, praktische Beispiele und den messbaren ROI.