Contrôle du déploiement des charges de travail dans les réserves de capacité avec le mode automatique EKS - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Contrôle du déploiement des charges de travail dans les réserves de capacité avec le mode automatique EKS

Vous pouvez contrôler le déploiement des charges de travail dans des réserves de capacité. Le mode automatique EKS prend en charge les réserves de capacité à la demande (On-Demand Capacity Reservation, ODCR) EC2 ainsi que les blocs de capacité EC2 pour le ML.

Astuce

Par défaut, le mode automatique EKS lance automatiquement les charges de travail dans les ODCR ouvertes et les blocs de capacité ML. Lorsque le paramètre capacityReservationSelectorTerms est utilisé dans la définition d’une NodeClass, le mode automatique EKS n’utilise plus automatiquement les réserves de capacité ouvertes.

Réserves de capacité à la demande (ODCR) EC2

Les réserves de capacité à la demande (ODCR) EC2 permettent de réserver de la capacité de calcul pour vos instances Amazon EC2 dans une zone de disponibilité spécifique, pour toute durée souhaitée. Lorsque vous utilisez le mode automatique EKS, vous pouvez vouloir contrôler le déploiement de vos charges de travail Kubernetes sur ces instances réservées afin de maximiser l’utilisation de la capacité préachetée ou garantir l’accès des charges de travail critiques à des ressources dédiées.

Par défaut, le mode automatique EKS lance automatiquement les charges de travail dans les ODCR ouvertes. Cependant, en configurant capacityReservationSelectorTerms dans une NodeClass, vous pouvez déterminer explicitement quelles ODCR vos charges de travail utilisent. Les nœuds provisionnés à l’aide d’ODCR configurées auront karpenter.sh/capacity-type: reserved et seront prioritaires par rapport aux instances à la demande et Spot. Une fois cette fonctionnalité activée, le mode automatique EKS n’utilisera plus automatiquement les ODCR ouvertes : elles devront être sélectionnées explicitement dans un NodeClass, ce qui vous permet d’avoir un contrôle précis sur l’utilisation des réserves de capacité dans tout le cluster.

Avertissement

Si vous configurez capacityReservationSelectorTerms dans une NodeClass d’un cluster, le mode automatique EKS n’utilisera plus automatiquement les ODCR ouvertes pour aucune NodeClass de ce cluster.

Exemple de NodeClass

apiVersion: eks.amazonaws.com/v1 kind: NodeClass spec: # Optional: Selects upon on-demand capacity reservations and capacity blocks # for EKS Auto Mode to prioritize. capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03 # Alternative Approaches - tags: app: "my-app" # Optional owning account ID filter owner: "012345678901"

Cet exemple de NodeClass illustre deux approches pour sélectionner les ODCR. La première méthode fait référence directement à une ODCR spécifique à l’aide de son ID (cr-56fac701cc1951b03). La seconde méthode utilise une sélection basée sur des balises, ciblant les ODCR portant la balise Name: "targeted-odcr". Vous pouvez également filtrer en option par le compte AWS qui détient la réservation, une méthode particulièrement utile dans les scénarios intercomptes ou lorsque vous travaillez avec des réserves de capacité partagées.

Blocs de capacité EC2 pour ML

Les blocs de capacité pour ML vous permettent de réserver à l’avance des instances de calcul accéléré basées sur GPU pour exécuter des charges de travail de machine learning (ML) de courte durée. Les instances qui s’exécutent à l’intérieur d’un bloc de capacité sont automatiquement placées à proximité les unes des autres dans Amazon EC2 UltraClusters, pour une mise en réseau non bloquante à faible latence et à l’échelle du pétabit.

Pour plus d’informations sur les plateformes et les types d’instances pris en charge, consultez Blocs de capacité ML dans le Guide de l’utilisateur EC2.

Vous pouvez créer une NodeClass du mode automatique EKS qui utilise un bloc de capacité pour ML, de manière similaire à une ODCR (décrite précédemment).

Les exemples de définitions suivants créent trois ressources :

  1. Une NodeClass faisant référence à votre réservation de bloc de capacité

  2. Un NodePool utilisant cette NodeClass et appliquant une balise de rejet

  3. Une spécification de pod tolérant cette balise de rejet et demandant des ressources GPU

Exemple de NodeClass

Cette NodeClass fait référence à un bloc de capacité pour ML spécifique, à l’aide de son ID de réservation. Vous pouvez obtenir cet ID dans la console EC2.

apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: gpu spec: # Specify your Capacity Block reservation ID capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03

Pour de plus amples informations, consultez Création d’une classe de nœuds pour Amazon EKS.

Exemple de NodePool

Ce NodePool fait référence à la NodeClass et spécifie une configuration gpu importante :

  • Il utilise uniquement la capacité réservée en définissant karpenter.sh/capacity-type: reserved

  • Il demande des familles d’instances GPU spécifiques adaptées aux charges de travail ML

  • Il applique une balise de rejet nvidia.com/gpu pour s’assurer que seules les charges de travail GPU sont planifiées sur ces nœuds

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: template: spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: gpu requirements: - key: eks.amazonaws.com/instance-family operator: In values: - g6 - p4d - p4de - p5 - p5e - p5en - p6 - p6-b200 - key: karpenter.sh/capacity-type operator: In values: - reserved # Enable other capacity types # - on-demand # - spot taints: - effect: NoSchedule key: nvidia.com/gpu

Pour de plus amples informations, consultez Create a Node Pool for EKS Auto Mode.

Exemple de pod

Cet exemple de pod montre comment configurer une charge de travail afin qu’elle s’exécute sur vos nœuds de bloc de capacité :

  • Il utilise un NodeSelector pour cibler des types de GPU spécifiques (dans ce cas, les GPU H200)

  • Il inclut une tolérance pour la balise de rejet nvidia.com/gpu appliquée par le NodePool

  • Il demande explicitement des ressources GPU en utilisant le type de ressource nvidia.com/gpu

apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: nodeSelector: # Select specific GPU type - uncomment as needed # eks.amazonaws.com/instance-gpu-name: l4 # eks.amazonaws.com/instance-gpu-name: a100 eks.amazonaws.com/instance-gpu-name: h200 # eks.amazonaws.com/instance-gpu-name: b200 eks.amazonaws.com/compute-type: auto restartPolicy: OnFailure containers: - name: nvidia-smi image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal args: - "nvidia-smi" resources: requests: # Uncomment if needed # memory: "30Gi" # cpu: "3500m" nvidia.com/gpu: 1 limits: # Uncomment if needed # memory: "30Gi" nvidia.com/gpu: 1 tolerations: - key: nvidia.com/gpu effect: NoSchedule operator: Exists

Pour plus d'informations, consultez pods dans la documentation Kubernetes.