Unterstützung für die Verbesserung dieser Seite beitragen
Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.
Erstellung selbstverwalteter Knoten mit Kapazitätsblöcken für ML
Kapazitätsblöcke für Machine Learning (ML) ermöglichen es Ihnen, GPU-Instances zu einem zukünftigen Zeitpunkt zu reservieren, um Ihre ML-Workloads mit kurzer Dauer zu unterstützen. Weitere Informationen finden Sie unter Kapazitätsblöcke für ML im Amazon-EC2-Benutzerhandbuch für Linux-Instances.
Überlegungen
Wichtig
-
Kapazitätsblöcke sind nur für bestimmte Amazon-EC2-Instance-Typen und AWS-Regionen verfügbar. Informationen zur Kompatibilität finden Sie unter Arbeiten mit Kapazitätsblöcken – Voraussetzungen im Amazon-EC2-Benutzerhandbuch für Linux-Instances.
-
Wenn Sie eine selbstverwaltete Knotengruppe erstellen, bevor die Kapazitätsreservierung aktiv wird, legen Sie die gewünschte Kapazität auf
0fest. -
Um genügend Zeit zu haben, den/die Knoten ordnungsgemäß zu entleeren, empfehlen wir, die Skalierung so zu planen, dass sie mehr als 30 Minuten vor der Endzeit der Kapazitätsblock-Reservierung auf Null skaliert.
-
Damit Ihre Pods ordnungsgemäß entladen werden, empfehlen wir Ihnen, den AWS Node Termination Handler wie in den Beispielschritten beschrieben einzurichten.
Verwendung von Kapazitätsblöcken mit selbstverwalteten Knoten
Sie können Kapazitätsblöcke mit Amazon EKS für die Bereitstellung und Skalierung Ihrer selbstverwalteten Knoten verwenden. Die folgenden Schritte geben einen allgemeinen Beispielüberblick. Die Beispiele für AWS CloudFormation-Vorlagen decken nicht alle Aspekte ab, die in einem Produktions-Workload erforderlich sind. Normalerweise benötigen Sie außerdem ein Bootstrapping-Skript, um den Knoten mit dem Cluster zu verbinden, ein beschleunigtes Amazon-EKS-AMI und ein entsprechendes Instance-Profil für den Beitritt zum Cluster anzugeben. Weitere Informationen finden Sie unter Selbstverwaltete Amazon-Linux-Knoten erstellen.
-
Erstellen Sie eine Startvorlage, die auf Ihre Workload anwendbar ist. Weitere Informationen finden Sie unter Verwenden von Kapazitätsblöcken für Machine Learning im Benutzerhandbuch für Amazon EC2 Auto Scaling.
Stellen Sie sicher, dass
LaunchTemplateDataFolgendes enthält:-
InstanceMarketOptionsmit der Einstellung"capacity-block"fürMarketType -
CapacityReservationSpecification: CapacityReservationTargetmitCapacityReservationIdals Kapazitätsblock (zum Beispiel:cr-)02168da1478b509e0 -
IamInstanceProfilemitArnauf das entsprechendeiam-instance-profile-arneingestellt -
ImageIdauf das entsprechendeimage-ideingestellt -
InstanceTypeauf einen Instance-Typ eingestellt, der Kapazitätsblöcke unterstützt (zum Beispiel:p5.48xlarge) -
SecurityGroupIdsauf die entsprechenden IDs eingestellt (zum Beispiel:sg-05b1d815d1EXAMPLE) -
UserDataauf die entsprechendeuser-datafür Ihre selbstverwaltete Knotengruppe eingestelltNachfolgend finden Sie einen Auszug aus einer CloudFormation-Vorlage, die eine Startvorlage für einen Kapazitätsblock erstellt.
NodeLaunchTemplate: Type: "aws::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" IamInstanceProfile: Arn: iam-instance-profile-arn ImageId: image-id InstanceType: p5.48xlarge KeyName: key-name SecurityGroupIds: - sg-05b1d815d1EXAMPLE UserData: user-dataSie müssen das Subnetz in der Availability Zone übergeben, in der die Reservierung vorgenommen wurde, da Kapazitätsblöcke zonal sind.
-
-
Verwenden Sie die Startvorlage, um eine selbstverwaltete Knotengruppe zu erstellen. Wenn Sie dies vor der Aktivierung der Kapazitätsreservierung tun, legen Sie die gewünschte Kapazität auf
0fest. Achten Sie beim Erstellen der Knotengruppe darauf, dass Sie nur das entsprechende Subnetz für die Availability Zone angeben, in der die Kapazität reserviert ist.Nachfolgend finden Sie ein Beispiel für eine CloudFormation-Vorlage, die Sie als Referenz verwenden können, wenn Sie eine für Ihre Workload geeignete Vorlage erstellen. In diesem Beispiel werden die
LaunchTemplateIdund dasVersionder im vorherigen Beispiel gezeigtenAWS::Amazon EC2::LaunchTemplate-Ressource ermittelt. Sie erhält auch die Werte fürDesiredCapacity,MaxSize,MinSize, undVPCZoneIdentifier, die an anderer Stelle in derselben Vorlage deklariert sind.NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned -
Nachdem die Knotengruppe erfolgreich erstellt wurde, stellen Sie sicher, dass Sie die
NodeInstanceRolefür die Knotengruppe aufzeichnen, die erstellt wurde. Dies ist erforderlich, um sicherzustellen, dass bei einer Skalierung der Knotengruppe die neuen Knoten dem Cluster beitreten und Kubernetes die Knoten erkennen kann. Weitere Informationen finden Sie in den AWS-Managementkonsole-Anweisungen unter Erstellen selbstverwalteter Amazon Linux-Knoten. -
Wir empfehlen Ihnen, eine geplante Skalierungsrichtlinie für die Auto-Scaling-Gruppe zu erstellen, die sich an den Reservierungszeiten für Kapazitätsblöcke orientiert. Weitere Informationen finden Sie unter Geplante Skalierung für Amazon EC2 Auto Scaling im Amazon EC2 Auto Scaling-Benutzerhandbuch.
Sie können alle von Ihnen reservierten Instances bis 30 Minuten vor Ablauf der Endzeit des Kapazitätsblocks verwenden. Instances, die zu diesem Zeitpunkt noch laufen, werden beendet. Um genügend Zeit zu haben, den/die Knoten ordnungsgemäß zu entleeren, empfehlen wir, die Skalierung so zu planen, dass sie mehr als 30 Minuten vor der Endzeit der Kapazitätsblock-Reservierung auf Null skaliert.
Wenn Sie stattdessen manuell hochskalieren wollen, wenn die Kapazitätsreservierung
Activewird, müssen Sie die gewünschte Kapazität der Auto-Scaling-Gruppe zum Startzeitpunkt der Kapazitätsblock-Reservierung aktualisieren. Dann müssten Sie auch mehr als 30 Minuten vor dem Ende der Kapazitätsblock-Reservierung manuell herunterskalieren. -
Die Knotengruppe ist jetzt bereit für die Planung von Workloads und Pods.
-
Damit Ihre Pods ordnungsgemäß entleert werden kann, empfehlen wir Ihnen, AWS Node Termination Handler einzurichten. Dieser Handler kann mithilfe von EventBridge nach „ASG Scale-in“-Lebenszyklusereignissen von Amazon EC2 Auto Scaling Ausschau halten und es der Kubernetes-Steuerebene ermöglichen, die erforderlichen Maßnahmen zu ergreifen, bevor die Instance nicht verfügbar ist. Andernfalls bleiben Ihre Pods und Kubernetes-Objekte in einem ausstehenden Zustand hängen. Weitere Informationen finden Sie unter AWS Node Termination Handler
auf GitHub. Wenn Sie keinen Node Termination Handler einrichten, empfehlen wir Ihnen, mit der manuellen Entleerung Ihrer Pods zu beginnen, bevor das 30-Minuten-Fenster erreicht ist, damit sie genügend Zeit haben, um ordnungsgemäß entleert zu werden.