Unterschied LXC zu VM: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „<pre> # LXC Container Architektur – Userspace, Namespaces & Kernel ``` ╔═══════════════════════════…“ |
Keine Bearbeitungszusammenfassung |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 4: | Zeile 4: | ||
``` | ``` | ||
╔══════════════════════════════════════════════════════════════════════════════╗ | ╔══════════════════════════════════════════════════════════════════════════════╗ | ||
║ USERSPACE | ║ USERSPACE ║ | ||
║ | ║ ║ | ||
║ ┌─── Container A ──────────────┐ ┌─── Container B ──────────────┐ | ║ ┌─── Container A ──────────────┐ ┌─── Container B ──────────────┐ ║ | ||
║ │ │ │ │ | ║ │ │ │ │ ║ | ||
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ | ║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║ | ||
║ │ │ Anwendungen & Dienste │ │ │ │ Anwendungen & Dienste │ │ | ║ │ │ Anwendungen & Dienste │ │ │ │ Anwendungen & Dienste │ │ ║ | ||
║ │ │ Apache, SSH, DB, ... │ │ │ │ Pi-hole, Nginx, ... │ │ | ║ │ │ Apache, SSH, DB, ... │ │ │ │ Pi-hole, Nginx, ... │ │ ║ | ||
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ | ║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║ | ||
║ │ │ Systembibliotheken │ │ │ │ Systembibliotheken │ │ | ║ │ │ Systembibliotheken │ │ │ │ Systembibliotheken │ │ ║ | ||
║ │ │ glibc, openssl, ... │ │ │ │ glibc, openssl, ... │ │ | ║ │ │ glibc, openssl, ... │ │ │ │ glibc, openssl, ... │ │ ║ | ||
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ | ║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║ | ||
║ │ │ Paketverwaltung │ │ │ │ Paketverwaltung │ │ | ║ │ │ Paketverwaltung │ │ │ │ Paketverwaltung │ │ ║ | ||
║ │ │ apt, dpkg │ │ │ │ apt, dpkg │ │ | ║ │ │ apt, dpkg │ │ │ │ apt, dpkg │ │ ║ | ||
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ | ║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║ | ||
║ │ │ Init-System (systemd) │ │ │ │ Init-System (systemd) │ │ | ║ │ │ Init-System (systemd) │ │ │ │ Init-System (systemd) │ │ ║ | ||
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ | ║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║ | ||
║ │ │ Root-Dateisystem │ │ │ │ Root-Dateisystem │ │ | ║ │ │ Root-Dateisystem │ │ │ │ Root-Dateisystem │ │ ║ | ||
║ │ │ /bin /etc /usr /var │ │ │ │ /bin /etc /usr /var │ │ | ║ │ │ /bin /etc /usr /var │ │ │ │ /bin /etc /usr /var │ │ ║ | ||
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ | ║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║ | ||
║ │ │ │ │ | ║ │ │ │ │ ║ | ||
║ │ Eigene User, Hostname, | ║ │ Eigene User, Hostname, │ │ Eigene User, Hostname, │ ║ | ||
║ │ IP-Adresse, Prozesse | ║ │ IP-Adresse, Prozesse │ │ IP-Adresse, Prozesse │ ║ | ||
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ | ║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║ | ||
║ │ │ | ║ │ │ ║ | ||
╠═════════════════╪═══════════════════════════════════╪════════════════════════╣ | |||
║ │ NAMESPACES & CGROUPS │ | ║ │ NAMESPACES & CGROUPS │ ║ | ||
║ │ (Isolation & Begrenzung) │ | ║ │ (Isolation & Begrenzung) │ ║ | ||
║ ▼ ▼ | ║ ▼ ▼ ║ | ||
║ ┌─── Namespaces CT-A | ║ ┌─── Namespaces CT-A ──────────┐ ┌─── Namespaces CT-B ──────────┐ ║ | ||
║ │ │ │ │ | ║ │ │ │ │ ║ | ||
║ │ PID → Eigene Prozesse │ │ PID → Eigene Prozesse │ | ║ │ PID → Eigene Prozesse │ │ PID → Eigene Prozesse │ ║ | ||
║ │ NET → Eigenes Netzwerk │ │ NET → Eigenes Netzwerk │ | ║ │ NET → Eigenes Netzwerk │ │ NET → Eigenes Netzwerk │ ║ | ||
║ │ MNT → Eigenes Dateisys. │ │ MNT → Eigenes Dateisys. │ | ║ │ MNT → Eigenes Dateisys. │ │ MNT → Eigenes Dateisys. │ ║ | ||
║ │ USER → Eigene User/Root │ │ USER → Eigene User/Root │ | ║ │ USER → Eigene User/Root │ │ USER → Eigene User/Root │ ║ | ||
║ │ UTS → Eigener Hostname │ │ UTS → Eigener Hostname │ | ║ │ UTS → Eigener Hostname │ │ UTS → Eigener Hostname │ ║ | ||
║ │ IPC → Eigene IPC-Kanäle │ │ IPC → Eigene IPC-Kanäle │ | ║ │ IPC → Eigene IPC-Kanäle │ │ IPC → Eigene IPC-Kanäle │ ║ | ||
║ │ │ │ │ | ║ │ │ │ │ ║ | ||
║ ├──────────────────────────────┤ ├──────────────────────────────┤ | ║ ├──────────────────────────────┤ ├──────────────────────────────┤ ║ | ||
║ │ cgroup: max 2 CPU, 2GB RAM │ │ cgroup: max 1 CPU, 1GB RAM │ | ║ │ cgroup: max 2 CPU, 2GB RAM │ │ cgroup: max 1 CPU, 1GB RAM │ ║ | ||
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ | ║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║ | ||
║ │ │ | ║ │ │ ║ | ||
║ │ Namespaces = Was sieht er? | ║ │ Namespaces = Was sieht er? │ ║ | ||
║ │ cgroups = Wieviel darf er? | ║ │ cgroups = Wieviel darf er? │ ║ | ||
║ │ │ | ║ │ │ ║ | ||
╠═════════════════╪═══════════════════════════════════╪══════════════════════╣ | ╠═════════════════╪═══════════════════════════════════╪══════════════════════╣ | ||
║ │ │ ║ | ║ │ │ ║ | ||
║ ▼ ▼ ║ | ║ ▼ ▼ ║ | ||
║ ┌──────────────────────────────────────────────────────────────────┐ ║ | ║ ┌──────────────────────────────────────────────────────────────────┐ ║ | ||
║ │ GEMEINSAMER KERNEL | ║ │ GEMEINSAMER KERNEL │ ║ | ||
║ │ (z.B. Linux 6.1) | ║ │ (z.B. Linux 6.1) │ ║ | ||
║ │ │ ║ | ║ │ │ ║ | ||
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ | ║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║ | ||
║ │ │ Prozess- │ │Speicher- │ │Netzwerk- │ │ Dateisystem- │ | ║ │ │ Prozess- │ │Speicher- │ │Netzwerk- │ │ Dateisystem- │ │ ║ | ||
║ │ │scheduler │ │verwaltung│ │ Stack │ │ treiber │ | ║ │ │scheduler │ │verwaltung│ │ Stack │ │ treiber │ │ ║ | ||
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ | ║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║ | ||
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ | ║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║ | ||
║ │ │ I/O- │ │ Geräte- │ │Sicherheit│ │ Kernel-Module │ | ║ │ │ I/O- │ │ Geräte- │ │Sicherheit│ │ Kernel-Module │ │ ║ | ||
║ │ │scheduler │ │ treiber │ │ (SELinux)│ │ (z.B. ZFS) │ | ║ │ │scheduler │ │ treiber │ │ (SELinux)│ │ (z.B. ZFS) │ │ ║ | ||
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ | ║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║ | ||
║ └──────────────────────────────────────────────────────────────────┘ ║ | ║ └──────────────────────────────────────────────────────────────────┘ ║ | ||
║ ║ | ║ ║ | ||
| Zeile 69: | Zeile 69: | ||
║ ┌──────────────────────────────────────────────────────────────────┐ ║ | ║ ┌──────────────────────────────────────────────────────────────────┐ ║ | ||
║ │ HARDWARE │ ║ | ║ │ HARDWARE │ ║ | ||
║ │ CPU │ RAM │ NIC │ Disk | ║ │ CPU │ RAM │ NIC │ Disk │ ║ | ||
║ └──────────────────────────────────────────────────────────────────┘ ║ | ║ └──────────────────────────────────────────────────────────────────┘ ║ | ||
║ ║ | ║ ║ | ||
| Zeile 85: | Zeile 85: | ||
╔════════════════════════════════════════════════════════════════════════════╗ | ╔════════════════════════════════════════════════════════════════════════════╗ | ||
║ ║ | ║ ║ | ||
║ ┌─── VM A ─────────────────────┐ ┌─── VM B ─────────────────────┐ | ║ ┌─── VM A ─────────────────────┐ ┌─── VM B ─────────────────────┐ ║ | ||
║ │ Anwendungen & Dienste │ │ Anwendungen & Dienste │ | ║ │ Anwendungen & Dienste │ │ Anwendungen & Dienste │ ║ | ||
║ │ Systembibliotheken │ │ Systembibliotheken │ | ║ │ Systembibliotheken │ │ Systembibliotheken │ ║ | ||
║ │ Init-System │ │ Init-System │ | ║ │ Init-System │ │ Init-System │ ║ | ||
║ │ Root-Dateisystem │ │ Root-Dateisystem │ | ║ │ Root-Dateisystem │ │ Root-Dateisystem │ ║ | ||
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ | ║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║ | ||
║ │ │ ██ EIGENER KERNEL ██ | ║ │ │ ██ EIGENER KERNEL ██ │ │ │ │ ██ EIGENER KERNEL ██ │ │ ║ | ||
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ | ║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║ | ||
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ | ║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║ | ||
║ │ │ Emulierte Hardware │ │ │ │ Emulierte Hardware │ │ | ║ │ │ Emulierte Hardware │ │ │ │ Emulierte Hardware │ │ ║ | ||
║ │ │ vCPU, vRAM, vNIC, | ║ │ │ vCPU, vRAM, vNIC,vDisk │ │ │ │ vCPU, vRAM, vNIC,vDisk │ │ ║ | ||
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ | ║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║ | ||
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ | ║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║ | ||
║ │ │ ║ | ║ │ │ ║ | ||
║ ┌──────────────┴───────────────────────────────────┴───────────────┐ | ║ ┌──────────────┴───────────────────────────────────┴───────────────┐ ║ | ||
║ │ HYPERVISOR (z.B. KVM/QEMU) │ | ║ │ HYPERVISOR (z.B. KVM/QEMU) │ ║ | ||
║ ├──────────────────────────────────────────────────────────────────┤ | ║ ├──────────────────────────────────────────────────────────────────┤ ║ | ||
║ │ HOST-KERNEL │ | ║ │ HOST-KERNEL │ ║ | ||
║ ├──────────────────────────────────────────────────────────────────┤ | ║ ├──────────────────────────────────────────────────────────────────┤ ║ | ||
║ │ HARDWARE │ | ║ │ HARDWARE │ ║ | ||
║ └──────────────────────────────────────────────────────────────────┘ | ║ └──────────────────────────────────────────────────────────────────┘ ║ | ||
║ ║ | ║ ║ | ||
║ Jede VM hat einen EIGENEN Kernel + emulierte Hardware | ║ Jede VM hat einen EIGENEN Kernel + emulierte Hardware ║ | ||
║ → Mehr Overhead, aber vollständige Isolation | ║ → Mehr Overhead, aber vollständige Isolation ║ | ||
║ → Verschiedene Betriebssysteme möglich (Linux, Windows, BSD) | ║ → Verschiedene Betriebssysteme möglich (Linux, Windows, BSD) ║ | ||
║ ║ | ║ ║ | ||
╚════════════════════════════════════════════════════════════════════════════╝ | ╚════════════════════════════════════════════════════════════════════════════╝ | ||
``` | ``` | ||
</pre> | </pre> | ||
*[[Userspace]] | |||
Aktuelle Version vom 12. Februar 2026, 09:15 Uhr
# LXC Container Architektur – Userspace, Namespaces & Kernel
```
╔══════════════════════════════════════════════════════════════════════════════╗
║ USERSPACE ║
║ ║
║ ┌─── Container A ──────────────┐ ┌─── Container B ──────────────┐ ║
║ │ │ │ │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ Anwendungen & Dienste │ │ │ │ Anwendungen & Dienste │ │ ║
║ │ │ Apache, SSH, DB, ... │ │ │ │ Pi-hole, Nginx, ... │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Systembibliotheken │ │ │ │ Systembibliotheken │ │ ║
║ │ │ glibc, openssl, ... │ │ │ │ glibc, openssl, ... │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Paketverwaltung │ │ │ │ Paketverwaltung │ │ ║
║ │ │ apt, dpkg │ │ │ │ apt, dpkg │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Init-System (systemd) │ │ │ │ Init-System (systemd) │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Root-Dateisystem │ │ │ │ Root-Dateisystem │ │ ║
║ │ │ /bin /etc /usr /var │ │ │ │ /bin /etc /usr /var │ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ │ │ │ │ ║
║ │ Eigene User, Hostname, │ │ Eigene User, Hostname, │ ║
║ │ IP-Adresse, Prozesse │ │ IP-Adresse, Prozesse │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
╠═════════════════╪═══════════════════════════════════╪════════════════════════╣
║ │ NAMESPACES & CGROUPS │ ║
║ │ (Isolation & Begrenzung) │ ║
║ ▼ ▼ ║
║ ┌─── Namespaces CT-A ──────────┐ ┌─── Namespaces CT-B ──────────┐ ║
║ │ │ │ │ ║
║ │ PID → Eigene Prozesse │ │ PID → Eigene Prozesse │ ║
║ │ NET → Eigenes Netzwerk │ │ NET → Eigenes Netzwerk │ ║
║ │ MNT → Eigenes Dateisys. │ │ MNT → Eigenes Dateisys. │ ║
║ │ USER → Eigene User/Root │ │ USER → Eigene User/Root │ ║
║ │ UTS → Eigener Hostname │ │ UTS → Eigener Hostname │ ║
║ │ IPC → Eigene IPC-Kanäle │ │ IPC → Eigene IPC-Kanäle │ ║
║ │ │ │ │ ║
║ ├──────────────────────────────┤ ├──────────────────────────────┤ ║
║ │ cgroup: max 2 CPU, 2GB RAM │ │ cgroup: max 1 CPU, 1GB RAM │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
║ │ Namespaces = Was sieht er? │ ║
║ │ cgroups = Wieviel darf er? │ ║
║ │ │ ║
╠═════════════════╪═══════════════════════════════════╪══════════════════════╣
║ │ │ ║
║ ▼ ▼ ║
║ ┌──────────────────────────────────────────────────────────────────┐ ║
║ │ GEMEINSAMER KERNEL │ ║
║ │ (z.B. Linux 6.1) │ ║
║ │ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║
║ │ │ Prozess- │ │Speicher- │ │Netzwerk- │ │ Dateisystem- │ │ ║
║ │ │scheduler │ │verwaltung│ │ Stack │ │ treiber │ │ ║
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║
║ │ │ I/O- │ │ Geräte- │ │Sicherheit│ │ Kernel-Module │ │ ║
║ │ │scheduler │ │ treiber │ │ (SELinux)│ │ (z.B. ZFS) │ │ ║
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
╠════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌──────────────────────────────────────────────────────────────────┐ ║
║ │ HARDWARE │ ║
║ │ CPU │ RAM │ NIC │ Disk │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
Leserichtung: ↑ Userspace (Was der Container "besitzt")
↑ Namespaces/cgroups (Was ihn isoliert & begrenzt)
↑ Kernel (Was er sich teilt)
↑ Hardware (Was tatsächlich existiert)
Zum Vergleich – VM-Architektur:
╔════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ┌─── VM A ─────────────────────┐ ┌─── VM B ─────────────────────┐ ║
║ │ Anwendungen & Dienste │ │ Anwendungen & Dienste │ ║
║ │ Systembibliotheken │ │ Systembibliotheken │ ║
║ │ Init-System │ │ Init-System │ ║
║ │ Root-Dateisystem │ │ Root-Dateisystem │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ ██ EIGENER KERNEL ██ │ │ │ │ ██ EIGENER KERNEL ██ │ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ Emulierte Hardware │ │ │ │ Emulierte Hardware │ │ ║
║ │ │ vCPU, vRAM, vNIC,vDisk │ │ │ │ vCPU, vRAM, vNIC,vDisk │ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
║ ┌──────────────┴───────────────────────────────────┴───────────────┐ ║
║ │ HYPERVISOR (z.B. KVM/QEMU) │ ║
║ ├──────────────────────────────────────────────────────────────────┤ ║
║ │ HOST-KERNEL │ ║
║ ├──────────────────────────────────────────────────────────────────┤ ║
║ │ HARDWARE │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
║ Jede VM hat einen EIGENEN Kernel + emulierte Hardware ║
║ → Mehr Overhead, aber vollständige Isolation ║
║ → Verschiedene Betriebssysteme möglich (Linux, Windows, BSD) ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
```