Site icon bintorosoft.com

Compose Migration zu Kubernetes: Mapping von Services, Volumes, Secrets

Penguin with glasses and a surprised look on his face is looking at a laptop on white background.

Die Migration von Docker Compose zu Kubernetes ist ein strategischer Schritt, wenn Anwendungen skalierbar, hochverfügbar und cloud-native betrieben werden sollen. Während Compose für lokale Multi-Container-Stacks geeignet ist, bietet Kubernetes ein mächtiges Orchestrierungsframework für verteilte Umgebungen. In diesem Tutorial beleuchten wir praxisnah, wie Services, Volumes und Secrets aus Compose in Kubernetes-Objekte überführt werden können, welche Unterschiede zu beachten sind und welche Best Practices für eine reibungslose Migration gelten.

1. Vergleich: Compose vs. Kubernetes

Bevor die Migration beginnt, ist es wichtig, die grundlegenden Unterschiede zwischen Compose und Kubernetes zu verstehen:

Compose

Kubernetes

2. Mapping von Services

In Compose werden Services direkt definiert. Kubernetes nutzt Deployments, StatefulSets oder DaemonSets:

Deployment Beispiel

Ein einfacher Webservice in Compose:

version: '3.9'
services:
  web:
    image: myapp:latest
    ports:
      - "8080:80"
    environment:
      - ENV=prod

In Kubernetes als Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: myapp:latest
        ports:
        - containerPort: 80
        env:
        - name: ENV
          value: "prod"

Service Definition

Für den externen Zugriff definiert man einen Kubernetes Service:

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80

3. Volumes und Storage Mapping

Volumes in Compose können als Bind-Mounts oder Named Volumes definiert sein. Kubernetes trennt zwischen Persistent Volumes (PV) und Persistent Volume Claims (PVC).

Compose Named Volume

volumes:
  db-data:
services:
  db:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data

Kubernetes PV/PVC Mapping

apiVersion: v1
kind: PersistentVolume
metadata:
  name: db-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data/postgres

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: db-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi


apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db
spec:
serviceName: "db"
replicas: 1
selector:
matchLabels:
app: db
template:
metadata:
labels:
app: db
spec:
containers:
- name: db
image: postgres:15
volumeMounts:
- name: db-storage
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:

  • metadata:
    name: db-storage
    spec:
    accessModes: [ "ReadWriteOnce" ]
    resources:
    requests:
    storage: 10Gi

4. Secrets und Configs

Compose nutzt Umgebungsvariablen oder secrets-Definitionen. In Kubernetes wird zwischen Secrets und ConfigMaps unterschieden:

Compose Secret

secrets:
  db-password:
    file: ./db-password.txt
services:
  db:
    secrets:
      - db-password

Kubernetes Secret

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  password: 

apiVersion: apps/v1
kind: Deployment
metadata:
name: db
spec:
replicas: 1
selector:
matchLabels:
app: db
template:
metadata:
labels:
app: db
spec:
containers:
- name: db
image: postgres:15
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password

5. Netzwerke und Service Discovery

Compose definiert Netzwerke innerhalb eines Hosts. Kubernetes setzt auf interne DNS-basierte Service Discovery:

Ingress Beispiel

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 8080

6. Migration Best Practices

Die Migration von Docker Compose zu Kubernetes erfordert sorgfältige Planung, insbesondere bei Volumes, Secrets und Netzwerk-Architekturen. Mit einem klaren Mapping von Services, PV/PVCs und Secrets lassen sich die Vorteile von Kubernetes für Skalierbarkeit, Hochverfügbarkeit und orchestrierte Deployments nutzen, ohne bestehende Container-Stacks komplett neu entwickeln zu müssen.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Exit mobile version