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 ``` ╔═══════════════════════════…“) |
|||
| (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) ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
```