Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Welche Ressourcen Docker isoliert

Welche Ressourcen Docker isoliert

青灯夜游
青灯夜游Original
2022-01-28 15:35:514267Durchsuche

Durch Docker isolierte Ressourcen: 2. Netzwerk; 4. Benutzer und Benutzergruppen für Berechtigungen; 6. Hostname und Domänenname; , usw.

Welche Ressourcen Docker isoliert

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Docker-1.13.1-Version, Dell G3-Computer.

Das Wesen eines Docker-Containers

Das Wesen eines Docker-Containers ist ein Prozess auf dem Host.

Docker implementiert Ressourcenisolation durch Namespace, Ressourcenbegrenzung durch cgroups und effiziente Dateioperationen durch *Copy-on-Write*.

Linux-Namespace-Mechanismus

Der Namespace-Mechanismus bietet eine Lösung zur Ressourcenisolation.

PID, IPC, Netzwerk und andere Systemressourcen sind nicht mehr global, sondern gehören zu einem bestimmten Namespace.

Die Ressourcen unter jedem Namespace sind transparent und für die Ressourcen unter anderen Namespaces unsichtbar.

Einer der Hauptzwecke des Linux-Kernels, der den Namespace implementiert, besteht darin, leichtgewichtige Virtualisierungsdienste (Container) zu implementieren, die Änderungen untereinander wahrnehmen können und nichts über externe Prozesse wissen, um Unabhängigkeit und Isolation zu erreichen. Was kann durch den Namespace isoliert werden? isoliert werden

Die Kommunikation zwischen Prozessen muss ebenfalls isoliert werden

Für Berechtigungen müssen Benutzer und Benutzergruppen ebenfalls isoliert werden

  • Die PID innerhalb des Prozesses muss ebenfalls von der PID in isoliert werden der Host

  • Der Container muss auch einen eigenen Hostnamen haben

  • Mit der oben genannten Isolierung glauben wir, dass ein Container vom Host und anderen Containern isoliert werden kann.

  • Es kommt vor, dass der Linux-Namespace dies kann.
  • Namespace

    Isolierter Inhalt
  • Systemaufrufparameter

UTS

Hostname und DomänennameCLONE_NEWUTS. CLONE_NEWIPC
IPCSemaphore, Nachrichtenwarteschlange und gemeinsamer Speicher
Netzwerk Netzwerkgeräte, Netzwerkstacks, Ports usw. CLONE_NEWNET
PID Prozessnummer CLONE_NEWPID
Mount Mountpunkt (Dateisystem) CLONE_NEWNS
Benutzer Benutzer und Benutzergruppen CLONE_NEWUSER

UTS-Namespace

UTS-Namespace (UNIX Time-Sharing System) bietet die Isolierung von Host- und Domänennamen, sodass jeder Docker-Container einen unabhängigen Hostnamen und Domänennamen haben und als unabhängiger Knoten im Netzwerk betrachtet werden kann . und nicht ein Prozess auf dem Host-Computer.
In Docker wird jedes Image grundsätzlich nach dem Dienstnamen benannt, den es bereitstellt, und hat keinerlei Auswirkungen auf den Host.

IPC-Namespace

Zu den von Inter-Process Communication (IPC) entwickelten IPC-Ressourcen gehören gemeinsame Semaphoren, Nachrichtenwarteschlangen und gemeinsam genutzter Speicher.
Bei der Beantragung von IPC-Ressourcen beantragen Sie eine weltweit eindeutige 32-Bit-ID.
Der IPC-Namespace enthält die System-IPC-Kennung und das Dateisystem, das die POSIX-Nachrichtenwarteschlange implementiert.
Prozesse im selben IPC-Namespace sind füreinander sichtbar, Prozesse in verschiedenen Namespaces sind jedoch für einander unsichtbar.

PID-Namespace

Die Isolierung von PID-Namespaces ist sehr praktisch. Sie nummeriert die Prozess-PID neu, dh Prozesse unter zwei verschiedenen Namespaces können dieselbe PID haben und jeder PID-Namespace verfügt über ein eigenes Zählprogramm.
Der Kernel verwaltet eine Baumstruktur für alle PID-Namespaces. Die oberste Ebene wird bei der Systeminitialisierung erstellt und als Root-Namespace bezeichnet. Der neu erstellte PID-Namespace wird als untergeordneter Namespace bezeichnet, und der ursprüngliche PID-Namespace ist der untergeordnete Namespace des neu erstellten PID-Namespace, und der ursprüngliche PID-Namespace ist der übergeordnete Namespace des neu erstellten PID-Namespace.
Auf diese Weise bilden verschiedene PID-Namespaces ein hierarchisches System. Der übergeordnete Knoten, zu dem sie gehören, kann die Prozesse in den untergeordneten Knoten sehen und die Prozesse in den untergeordneten Knoten durch Signale und andere Methoden beeinflussen. Der untergeordnete Knoten kann jedoch nichts im PID-Namespace des übergeordneten Knotens sehen.

Mount-Namespace

Mount-Namespace bietet Unterstützung für die Isolierung von Dateisystemen durch die Isolierung von Dateisystem-Mount-Punkten.
Nach der Isolierung wirken sich Änderungen der Dateistrukturen in verschiedenen Mount-Namespaces nicht gegenseitig aus.

Netzwerk-Namespace

Netzwerk-Namespace bietet hauptsächlich die Isolierung von Netzwerkressourcen, einschließlich Netzwerkausrüstung, IPv4, IPv6-Protokollstapel, IP-Routing-Tabelle, Firewall, /proc/net-Verzeichnis, /sys/class/net-Verzeichnis, Suite Empfangswörter usw.

Benutzernamespace

Benutzernamespace isoliert installationsbezogene Bezeichner und Attribute

Namespace-Operationen

Namespace-API enthält clone() setns() unshare() und Teile unter /proc-Datei
Zur Bestimmung Welche Namespaces isoliert werden sollen, müssen Sie einen oder mehrere der folgenden 6 Parameter angeben, um sie zu trennen. Die 6 in der Tabelle oben genannten Parameter sind CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWPID, CLONE_NEWNET, CLONE_NEWUSER. Die Verwendung von clone() zum Erstellen eines Prozesses mit einem unabhängigen Namespace ist die gebräuchlichste Methode, und das ist sie auch Der von Docker verwendete Namespace.

int clone(int(*child_func)(void *),void *child_stack,int flags, void *arg);

clone() ist eine allgemeinere Implementierung des Linux-Systemaufrufs fork(), der über Flags steuern kann, wie viele Funktionen verwendet werden. Es gibt mehr als 20 Arten von CLONE_*-Flags, die alle Aspekte des Klonvorgangs steuern.

child_func übergibt die Hauptfunktion des Programms, das vom untergeordneten Prozess ausgeführt wird.

child_stack übergibt den vom untergeordneten Prozess verwendeten Stapelspeicher.

flags gibt an, welche CLONE_*-Flags verwendet werden. Die mit dem Namespace verbundenen Flags sind hauptsächlich die 6 oben erwähnt.
  1. args werden verwendet, um Benutzerparameter zu übergeben
  2. /proc/[pid]/ns
  3. Benutzer können Dateien sehen, die auf verschiedene Namespaces unter der Datei /proc/[pid]/ns verweisen.
ls -l /proc/10/ns

Die Namespace-Nummer in eckigen Klammern

Wenn die Namespace-Nummern, auf die zwei Prozesse verweisen, gleich sind, bedeutet dies, dass sie sich im selben Namespace befindenWelche Ressourcen Docker isoliert

Der Zweck des Festlegens des Links besteht darin, dass auch wenn alle Prozesse unter dem Namespace haben Wenn es endet, wird dieser Namespace immer existieren und nachfolgende Prozesse können beitreten.

Das Mounten der Verzeichnisdatei /proc/[pid]/ns mit der Methode --bind kann auch als Link fungieren Ausführen des Befehls Der Befehl erfordert die Verwendung von setns().
Durch den Systemaufruf setns() verbindet der Prozess einen vorhandenen Namespace aus dem ursprünglichen Namespace.

Um den Aufrufer des Prozesses nicht zu beeinträchtigen und damit der neu hinzugefügte PID-Namespace wirksam wird, wird er normalerweise nach dem setns( Die Funktion clone() erstellt einen untergeordneten Prozess, um die Ausführung des Befehls fortzusetzen, sodass die Ausführung des ursprünglichen Prozesses beendet werden kann.

touch ~/utsmount --bind /proc/10/ns/uts ~/uts

Um den neu hinzugefügten Namespace nutzen zu können, ist es notwendig, die Funktionsreihe execve() einzuführen, die Benutzerbefehle ausführen kann. Die am häufigsten verwendete Funktion ist das Aufrufen von /bin/bash und das Akzeptieren von Parametern


unshare()

durch unshare( ) Namespace-Isolierung für den ursprünglichen Prozess

Unshare ist dem Klonen sehr ähnlich, es muss kein neuer Prozess gestartet werden und kann für den ursprünglichen Prozess verwendet werden.

Docker verwendet nicht den Systemaufruf

fork()

fork gehört nicht zur Namespace-API

Leistungsstarkes Kernel-Tool cgroups

cgroups ist ein vom Linux-Kernel bereitgestellter Mechanismus, der eine Reihe von Systemaufgaben und deren Unteraufgaben je nach Bedarf in verschiedene hierarchische Gruppen integrieren (oder trennen) kann und so eine Systemressourcenverwaltung ermöglicht einheitlicher Rahmen.

cgroups ist ein weiteres leistungsstarkes Kernel-Tool unter Linux. Mit cgroups können Sie nicht nur die nach Namespace isolierten Ressourcen begrenzen, sondern auch Gewichtungen für Ressourcen festlegen, die Nutzung berechnen, den Start und Stopp von Aufgaben (Prozessen oder Landkreisen) steuern usw. Um es ganz klar auszudrücken: Cgroups können die von Aufgabengruppen verwendeten physischen Ressourcen (einschließlich CPU, Speicher, E/A usw.) begrenzen und aufzeichnen. Dies ist der Eckpfeiler beim Aufbau einer Reihe von Virtualisierungsverwaltungstools wie Docker.

Die Rolle von cgroups

cgroups bietet eine einheitliche Schnittstelle für die Ressourcenverwaltung auf verschiedenen Benutzerebenen: Von der individuellen Ressourcensteuerung bis hin zur Virtualisierung auf Betriebssystemebene bietet cgroups vier Hauptfunktionen.

  • Ressourcenbeschränkung
    • cgroups können die Gesamtressourcen begrenzen, die von Aufgaben verwendet werden.
      • Wenn Sie die Obergrenze des von der Anwendung während der Ausführung verwendeten Speichers festlegen, wird eine OOM-Eingabeaufforderung ausgegeben, sobald das Kontingent überschritten wird Die Größe der E/A-Bandbreite entspricht tatsächlich der Steuerung der Priorität der ausgeführten Aufgabe
    Ressourcenstatistiken
  • cgroups können die Systemressourcennutzung zählen
    • z. B. CPU-Nutzungszeit, Speichernutzung usw. Diese Funktion eignet sich sehr gut für die Abrechnung
    • Aufgabensteuerung
      • Cgroups können Aufgaben anhalten und fortsetzen
  • Empfohlenes Lernen: „
  • Docker-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Ressourcen Docker isoliert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn