Was muss ich über die CPU-Zuweisung in Amazon ECS wissen?
Ich möchte CPUs in Amazon Elastic Container Service (Amazon ECS) zu Aufgaben zuweisen, weiß aber nicht, wie ich anfangen soll.
Kurzbeschreibung
Wenn du eine Aufgabendefinition erstellst, empfiehlt es sich, Kontingente für CPU-Ressourcen auf Aufgabenebene und Containerebene zu definieren. Du kannst die CPU-Zuweisungswerte anpassen, um die Gesamtleistung des Amazon ECS-Clusters zu verwalten.
Lösung
Amazon ECS verwendet CPU-Einheiten als die Standardmaßeinheit für CPU-Ressourcen. Eine vCPU für Linux entspricht 1024 CPUs. Beispielsweise entsprechen 2048 CPUs 2 vCPUs. Du kannst in der Aufgabendefinition entweder CPUs oder vCPUs angeben. ECS konvertiert vCPU-Werte bei der Registrierung automatisch in CPUs.
Hinweis: Windows-Container ignorieren CPU- und Speicherparameter auf Aufgabenebene. Für Windows-Container empfiehlt es sich, Ressourcen auf Container-Ebene anzugeben. Weitere Informationen finden Sie unter Aufgabengröße.
CPU-Zuweisung auf Aufgabenebene
Du kannst Amazon-ECS-Aufgaben auf AWS-Fargate- oder Amazon Elastic Compute Cloud (Amazon EC2)-Instances ausführen. Das Verhalten der CPU-Zuweisung auf Aufgabenebene ist für jede Plattform unterschiedlich.
AWS Fargate
Für Linux und Windows benötigt AWS Fargate einen CPU-Parameter auf Aufgabenebene, um der Aufgabe die benötigten Ressourcen zuzuweisen. Du kannst Arbeitsspeicher und CPU-Werte aus den vordefinierten Aufgabengrößen auswählen, die für AWS Fargate verfügbar sind.
Amazon EC2 Instances
Hinweis: Der CPU-Parameter ist optional für Aufgaben, die auf Linux-Instances ausgeführt werden.
Wenn du den Parameter CPU unter Linux definieren, hat der Parameter die folgenden Kontingente:
- Die Container haben begrenzten Zugriff, basierend auf der Menge an CPU, die du auf Aufgabenebene definierst.
- Der Aufgaben-CPU-Parameter legt ein CPU-Kontingent für alle Container und eine CPU-Mindestreservierung fest, wenn Amazon ECS die Aufgabe auf einer Container-Instance plant.
- Amazon ECS konvertiert CPUs innerhalb der Aufgabe in Linux-CPU-Freigaben. Linux verwendet diese Freigaben als gewichteten Mechanismus, um die CPU-Zugriffspriorität zu bestimmen.
- Der CPU-Parameter, den du auf Aufgabenebene festlegst, legt die maximal zulässigen CPU-Ressourcen für Aufgaben im Container fest. Container, die in dieser Aufgabenkonfiguration ausgeführt werden, können nur die CPU-Kapazität verwenden, die du in der Aufgabengröße angibst.
Das folgende Szenario ist ein Beispiel für die Zuordnung und Nutzung von CPU-Einheiten auf einer EC2-Instance.
Du registrierst eine m5.large-Instance in einem Cluster, der 2048 CPUs bereitstellt. Eine Aufgabe wird auf der Instance ausgeführt und verwendet 1024 CPUs, die du auf Aufgabenebene definieren. Die Instance zeigt eine EC2-CPU-Auslastung von 68 %. Diese Konfiguration hält 1024 CPUs im Pool der Instance verfügbar. Die aktuelle CPU-Auslastung hat keinen Einfluss darauf, wie viele CPUs du für neue Aufgaben einplanen kannst. Selbst wenn die Instance-Auslastung 50 % übersteigt, kannst du immer noch alle verfügbaren CPUs im Instance-Pool für neue Aufgaben verwenden.
Mit den verbleibenden 1024 CPUs kannst du zwei weitere Aufgaben mit jeweils 512 CPUs auf Aufgaben- oder Containerebene planen. Du kannst auch eine Aufgabe mit zwei Containern planen, die 1024 CPUs auf Aufgabenebene und 512 CPUs für jeden Container verwenden. Wenn du keine CPUs angibst, kannst du so viele Aufgaben planen, wie ECS für den Netzwerkmodus unterstützt. Diese Aktion wirkt sich nicht auf die CPUs der Container-Instance aus.
CPU-Zuweisung auf Containerebene
Amazon ECS wertet CPU-Definitionen auf Containerebene zur Planungszeit und zur Laufzeit aus, wenn keine CPU-Konflikte bestehen. Das Zuweisungsverhalten variiert je nach Aufgabenkonfiguration und Plattformtyp.
Planungsverhalten
Die folgenden Faktoren wirken sich darauf aus, wie Amazon ECS Aufgaben auf den Container-Instances plant:
- Wenn du keine CPU-Definition auf Aufgabenebene festlegen, wird die Gesamtzahl der CPUs, die du in den Containern definierst, zur CPU-Reservierung.
- Die Gesamtzahl der CPUs in der Definition der CPU-Containerebene darf die CPUs, die du auf Aufgabenebene definierst, nicht überschreiten.
Laufzeitverhalten
Die folgenden Faktoren wirken sich auf die CPU-Zuweisung aus, wenn die Aufgabe ausgeführt wird, insbesondere wenn kein CPU-Konflikt besteht:
- Wenn du eine CPU-Definition auf Aufgabenebene festlegst, können die Container nur auf CPU-Ressourcen bis zu dem CPU-Wert zugreifen, den du auf Aufgabenebene definierst.
- Wenn du keine CPU-Definition auf Aufgabenebene festlegen, können Container in der Aufgabe auf alle CPU-Ressourcen in der Instance zugreifen. Dies gilt unabhängig von der CPU-Definition, die du auf Containerebene festlegst.
- Wenn du Windows-Instances verwendest, die CPU auf Aufgabenebene nicht unterstützen, verwendet der Container die CPU-Definition auf Containerebene. Windows setzt das Kontingent als absolut durch. Weitere Informationen findest du unter Umgebung.
- Bei Linux-Container-Instances werden CPU-Definitionen auf Containerebene direkt den CpuShares-Parametern zugeordnet. Weitere Informationen findest du unter Erstellen einer Container auf der Docker-Website.
CPU-Konflikte
CPU-Konflikte treten auf, wenn mehrere Prozesse CPU-Zeit anfordern. Während eines CPU-Konflikts drosselt Amazon ECS die Container, sodass sie den Ressourcen entsprechen, die du in der CPU-Definition auf Containerebene definieren.
Wichtig: Stelle sicher, dass die Anwendung, die auf Amazon ECS ausgeführt wird, Containereinstellungen erkennen kann. Einige Anwendungen, wie Java 10, erkennen Containereinstellungen und verwenden nur die CPU-Kontingente, die du auf Containerebene definierst. Diese Anwendungen verwenden die Definition auf Containerebene auch bei CPU-Konflikten.
Ähnliche Informationen
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr