Was muss ich über die CPU-Zuweisung in Amazon ECS wissen?

Letzte Aktualisierung: 15.04.2022

Ich suche nach Informationen zur Zuweisung von CPU zu Aufgaben in Amazon Elastic Container Service (Amazon ECS).

Kurzbeschreibung

Beim Erstellen einer Aufgabendefinition können Sie Grenzwerte für CPU-Ressourcen definieren. Diese Grenzwerte können auf Aufgabenebene und Containerebene definiert werden.

Die Gesamtleistung Ihres Amazon ECS-Clusters wird aufgrund dieser Beschränkungen beeinträchtigt. Abhängig vom Verhalten von Amazon ECS und Ihrem Anwendungsfall müssen Sie die CPU-Zuweisungswerte auf Aufgabenebene und Containerebene anpassen. Verwenden Sie die folgenden Informationen, um die CPU-Zuweisung zu ermitteln, die Ihre Arbeitslast- und Anwendungsanforderungen erfüllt.

Lösung

Amazon ECS verwendet eine Standardmaßeinheit für CPU-Ressourcen, die als CPU-Einheiten bezeichnet werden. 1024 CPU-Einheiten entsprechen 1 vCPU.

Zum Beispiel entsprechen 2048 CPU-Einheiten 2 vCPU.

Hinweis: Beim Definieren von Aufgabendefinitionen können Sie anstelle von 1024 auch 1 vCPU verwenden. Wenn die Aufgabendefinition registriert ist, übersetzt ECS den Wert in Einheiten.

CPU-Zuweisung auf Aufgabenebene

Amazon ECS-Aufgaben können auf AWS Fargate- oder Amazon Elastic Compute Cloud (Amazon EC2) -Instances ausgeführt werden.

Wenn Sie den CPU-Parameter auf Aufgabenebene festlegen, legen Sie auch die maximale Menge an CPU-Ressourcen fest, die für Ihre Container in einer Aufgabe zulässig sind.

AWS Fargate

AWS Fargate benötigt einen CPU-Parameter auf Aufgabenebene, um der Aufgabe angeforderte Ressourcen zuzuweisen. Sie können den Speicher und die CPU aus vordefinierten Aufgabengrößen auswählen, die für AWS Fargate verfügbar sind. Weitere Informationen zu den verschiedenen Kombinationen finden Sie im AbschnittCPU und Arbeitsspeicher für Aufgaben im AWS Fargate Entwickler-Leitfaden.

Amazon EC2

Beim Ausführen von Aufgaben auf Amazon EC2 ist der CPU-Parameter optional.

Wenn Sie den CPU-Parameter definieren, sollten Sie Folgendes beachten:

  • Ihre Container haben basierend auf der definierten Menge an CPU eingeschränkten Zugriff.
  • Der in Ihrem CPU-Parameter definierte Betrag wird zur CPU-Reservierung für die Aufgabe, die auf einer Container-Instance geplant werden soll.
    Hinweis: Dies gilt auch für die Definition auf Containerebene.

Beispielsweise hat ein definierter CPU-Parameter in Amazon EC2 mit der folgenden Konfiguration noch 1024 CPU-Einheiten in seinem Pool:

  • Eine m5.large EC2-Instance, die in einem ECS-Cluster als Container-Instance für insgesamt 2048 CPU-Einheiten registriert ist.
  • Eine Aufgabe mit CPU: 1024 auf definierter Aufgabenebene wird auf der Instance ausgeführt.
  • Die aktuelle EC2-CPU-Auslastung der Instance liegt bei 68%.

Die aktuelle CPU-Auslastung hat keinen Einfluss darauf, wie viele CPU-Einheiten in der Container-Instance für die Aufgabenplanung verfügbar sind. Selbst wenn die Instance 50% ihrer Auslastung übersteigt, steht Ihnen immer noch die Hälfte der Einheiten in ihrem Pool zur Verfügung, damit neue Aufgaben gestartet werden können. Dies liegt daran, dass der Parameter nur als CPU-Reservierung und -Limit fungiert und nicht direkt in die CPU-Auslastung selbst übersetzt wird.

In diesem Beispiel gibt es mehrere Ergebnisse, die auftreten können, wenn nur die CPU berücksichtigt wird:

  • Sie können zwei weitere Aufgaben mit CPU: 512 planen, definiert in Definitionen auf Taskebene oder Container-Ebene.
  • Sie können eine Aufgabe mit zwei Containern planen, wobei CPU: 1024 auf Aufgabenebene und CPU: 512 auf Containerebene in jedem Container definiert ist.
  • Wenn die CPU nicht definiert ist, können Sie so viele Aufgaben planen, wie ECS für den ausgewählten Netzwerkmodus unterstützt. Die in Ihrer ECS-Container-Instance für die Planung verfügbaren CPU-Einheiten sind nicht betroffen.

CPU-Zuweisung auf Containerebene

CPU-Definitionen auf Containerebene werden in den folgenden Szenarien berücksichtigt:

Zum Zeitpunkt der Planung:

  • Wenn die CPU-Definition auf Aufgabenebene nicht festgelegt ist, wird die Gesamtzahl der in Ihren Containern definierten CPU-Einheiten zur CPU-Reservierung.
  • Die Gesamtzahl der CPU-Einheiten in Ihrer Definition auf CPU-Containerebene darf nicht größer sein als die bei Ihrer Zuweisung auf Aufgabenebene definierten CPU-Einheiten.

Zur Laufzeit und es gibt keinen CPU-Konflikt:

  • Wenn die CPU-Definition auf Aufgabenebene festgelegt ist, haben Ihre Container nur Zugriff auf CPU-Ressourcen bis zum definierten Wert der CPU auf Aufgabenebene.
  • Wenn die CPU-Definition auf Aufgabenebene nicht festgelegt ist, haben die Container in Ihrer Aufgabe Zugriff auf alle in Ihrer Instance verfügbaren CPU-Ressourcen, unabhängig von der auf Containerebene festgelegten CPU-Definition.
  • Wenn Sie Windows-Aufgaben verwenden und die CPU auf Aufgabenebene nicht unterstützt wird, sind die Container immer auf die Definition von CPU auf Containerebene begrenzt.

CPU-Konflikte treten auf, wenn mehrere Prozesse CPU-Zeit anfordern. Wenn CPU-Konflikte auftreten, werden Ihre Container auf die Menge an Ressourcen gedrosselt, die in der Definition auf Containerebene auf Ihrer CPU definiert ist.

Wichtig: Stellen Sie sicher, dass die Anwendung, die Sie auf ECS ausführen, Container-fähig ist. Einige Anwendungen wie Java 10 sind Container-fähig und verwenden nur die in der CPU-Definition auf Containerebene definierten Grenzwerte, unabhängig davon, ob es CPU-Konflikte gibt.

CPU-Definitionen auf Containerebene werden direkt den CPUShares-Parametern der Remote-Docker-API „Container erstellen“ zugeordnet.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?