Implementieren von Ressourcensteuerungen für Windows-Container

Gilt für: Windows Server 2022, Windows Server 2019

Pro Container und pro Ressource können diverse Steuerungen implementiert werden. Standardmäßig unterliegen ausgeführte Container einer typischen Windows-Ressourcenverwaltung, die im Allgemeinen auf einer gleichberechtigten Verteilung basiert. Ein Entwickler oder Administrator kann die Ressourcennutzung jedoch durch die Konfiguration der einzelnen Steuerungselemente begrenzen oder beeinflussen. Zu den steuerbaren Ressourcen gehören: CPU/Prozessor, Arbeitsspeicher/RAM, Datenträger/Speicher und Netzwerk/Durchsatz.

Windows-Container nutzen Auftragsobjekte zum Gruppieren und Nachverfolgen der Prozesse, die jedem Container zugeordnet sind. Steuerungselemente für Ressourcen werden für das dem Container zugeordnete übergeordnete Auftragsobjekt implementiert.

Im Fall der Hyper-V-Isolation werden die Ressourcensteuerelemente automatisch sowohl auf den virtuellen Computer als auch auf das Auftragsobjekt des Containers innerhalb der virtuellen Maschine angewendet. Dies stellt sicher, dass selbst dann, wenn ein im Container ausgeführter Prozess die Steuerelemente des Auftragsobjekts umgeht, der virtuelle Computer dafür sorgen kann, dass die definierten Ressourcenbegrenzungen nicht überschritten werden.

Ressourcen

Dieser Abschnitt enthält für jede Ressource eine Zuordnung zwischen der Docker-Befehlszeilenschnittstelle (als Beispiel für die Verwendung der Ressourcensteuerung, die von einem Orchestrator oder per Tool konfiguriert sein kann) und der entsprechenden Windows Host Compute Service (HCS)-API. Zudem wird allgemein angegeben, wie die Ressourcensteuerung von Windows implementiert wurde (bitte beachten Sie, dass diese Beschreibung auf einer höheren Ebene erfolgt, deren zugrundeliegende Implementierung sich ändern kann).

Arbeitsspeicher

Resource Standort
Docker-Schnittstelle --memory
HCS-Schnittstelle MemoryMaximumInMB
Gemeinsamer Kernel JOB_OBJECT_LIMIT_JOB_MEMORY
Hyper-V-Isolierung Arbeitsspeicher des virtuellen Computers

Hinweis

Bei Hyper-V-Isolation in Windows Server 2016 werden Sie bei Verwendung einer Memory-Cap bemerken, dass der Container den durch die Cap festgelegten Speicher zunächst zuweist und dann beginnt, ihn an den Containerhost zurückzugeben. In späteren Versionen von Windows Server (1709 oder höher) wurde dieser Prozess optimiert.

CPU (Anzahl)

Resource Standort
Docker-Schnittstelle --cpus
HCS-Schnittstelle ProcessorCount
Gemeinsamer Kernel Simuliert mit JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP*
Hyper-V-Isolierung Anzahl verfügbarer virtueller Prozessoren

CPU (Prozent)

Resource Standort
Docker-Schnittstelle --cpu-percent
HCS-Schnittstelle ProcessorMaximum
Gemeinsamer Kernel JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
Hyper-V-Isolierung Hypervisor-Limits für virtuelle Prozessoren

CPU (Freigaben)

Resource Standort
Docker-Schnittstelle --cpu-shares
HCS-Schnittstelle ProcessorWeight
Gemeinsamer Kernel JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
Hyper-V-Isolierung Hypervisor-Gewichtungen für virtuelle Prozessoren

Speicher (Image)

Resource Standort
Docker-Schnittstelle --io-maxbandwidth/--io-maxiops
HCS-Schnittstelle StorageIOPSMaximum und StorageBandwidthMaximum
Gemeinsamer Kernel JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Hyper-V-Isolierung JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Speicher (Volumes)

Resource Standort
Docker-Schnittstelle --storage-opt size=
HCS-Schnittstelle StorageSandboxSize
Gemeinsamer Kernel JOBOBJECT_IO_RATE_CONTROL_INFORMATION
Hyper-V-Isolierung JOBOBJECT_IO_RATE_CONTROL_INFORMATION

Zusätzliche Hinweise oder Details

Speicheranforderungen

Windows-Container führen in jedem Container einige Systemprozesse aus, typischerweise solche, die Funktionalität pro Container bereitstellen wie beispielsweise Benutzerverwaltung, Networking usw. Und da ein großer Teil des von diesen Prozessen benötigten Speichers unter Containern geteilt wird, muss die Speicherkapazität hoch genug sein, um die Prozessausführung zu ermöglichen. Eine Tabelle für jeden Basisimagetyp mit und ohne Hyper-V-Isolation finden Sie im Dokument Systemanforderungen.

CPU-Freigaben (ohne Hyper-V-Isolation)

Bei Nutzung von CPU-Freigaben wird JOBOBJECT_CPU_RATE_CONTROL_INFORMATION von der zugrunde liegenden Implementierung konfiguriert (wenn keine Hyper-V-Isolation verwendet wird). Insbesondere wird das Steuerungsflag auf JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED gesetzt und eine entsprechende Gewichtung angegeben. Die gültigen Gewichtungen für das Auftragsobjekt sind die Werte 1 bis 9 mit dem Standardwert 5, was eine geringere Genauigkeit bedeutet als die HCS-Werte 1 bis 10000. Beispiel: Eine Freigabegewichtung 7500 würde eine Gewichtung 7 und eine Freigabegewichtung 2500 einen Wert 2 ergeben.