# 9.3 Virtualisierung ## Virtualisierung - Grundlagen ### Was ist Virtualisierung? ``` Virtualisierung Mehrere virtuelle Maschinen auf einer physischen Hardware betreiben ``` ### Vorteile | Vorteil | Beschreibung | |---------|-------------| | Kosteneinsparung | Weniger Hardware | | Flexibilität | Schnell bereitgestellt | | Isolation | Getrennte Umgebungen | | Skalierung | Leicht erweiterbar | | Testumgebung | Schnell aufgesetzt | --- ## Virtualisierungstypen ### Full Virtualization ``` Gast-OS läuft unverändert ├── VMware Workstation ├── VirtualBox └── Hyper-V ``` ### Para-Virtualization ``` Gast-OS weiß von Virtualisierung ├── Xen └── Citrix XenServer ``` ### Container-Virtualisierung ``` Leichtgewichtige Virtualisierung ├── Docker ├── Podman └── Kubernetes ``` --- ## Docker ### Grundlagen ``` Docker - Begriffe ├── Image: Vorlage (Template) ├── Container: Laufende Instanz ├── Dockerfile: Image-Beschreibung ├── Registry: Image-Speicher └── Volume: Persistenter Speicher ``` ### Docker-Befehle ```bash # Container starten docker run -d -p 8080:80 nginx # Container auflisten docker ps docker ps -a # Container stoppen docker stop container_id # Image bauen docker build -t mein-image . # Container entfernen docker rm container_id ``` ### Dockerfile ```dockerfile # Basis-Image FROM node:18-alpine # Arbeitsverzeichnis WORKDIR /app # Dateien kopieren COPY package*.json ./ COPY . . # Abhängigkeiten installieren RUN npm install # Port freigeben EXPOSE 3000 # Startbefehl CMD ["node", "server.js"] ``` ### Praktisches Beispiel: Docker Compose ```yaml # docker-compose.yml version: '3.8' services: # Webanwendung app: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgres://db:5432/webapp depends_on: - db - redis # Datenbank db: image: postgres:15-alpine volumes: - db_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=geheim - POSTGRES_DB=webapp # Cache redis: image: redis:7-alpine ports: - "6379:6379" volumes: db_data: ``` ### Praktisches Beispiel: Docker Volume ```bash # Volume erstellen docker volume create mydata # Volume einhängen docker run -v mydata:/data ubuntu # Volumes auflisten docker volume ls # Unbenutzte Volumes löschen docker volume prune ``` --- ## Kubernetes ### Architektur ``` Kubernetes - Komponenten ├── Master Node │ ├── API Server │ ├── Scheduler │ ├── Controller Manager │ └── etcd ├── Worker Nodes │ ├── Kubelet │ ├── Kube Proxy │ └── Container Runtime └── Add-ons (DNS, Dashboard) ``` ### Kubernetes-Objekte | Objekt | Beschreibung | |--------|-------------| | Pod | Kleinste Einheit (1+ Container) | | Deployment | Replikate, Updates | | Service | Netzwerkzugriff | | Ingress | HTTP-Routing | | ConfigMap | Konfiguration | | Secret | Sensitive Daten | --- ## Cloud-Computing ### Service-Modelle ``` Cloud - Modelle ├── IaaS: Infrastructure as a Service │ └── Virtuelle Maschinen, Netzwerk ├── PaaS: Platform as a Service │ └── Laufzeitumgebung └── SaaS: Software as a Service └── Fertige Anwendung ``` ### Anbieter | Anbieter | Service | |----------|----------| | AWS | EC2, S3, Lambda | | Azure | VMs, Blob, Functions | | Google Cloud | Compute Engine, Cloud Storage | --- ## Querverweise - [[LF9-02-Server|Zurück: Server]] - [[LF9-04-Monitoring|Nächstes Thema: Monitoring]] --- *Stand: 2024*