Comment lancer et dépanner des instances Spot à l'aide de groupes de nœuds gérés par Amazon EKS ?

Lecture de 4 minute(s)
0

Je souhaite créer un groupe de nœuds géré doté d'une capacité Spot pour mon cluster Amazon Elastic Kubernetes Service (Amazon EKS) et résoudre les problèmes.

Résolution

1.    Installez eksctl.

Important : assurez-vous de vérifier toutes les commandes de l'interface de la ligne de commande AWS (AWS CLI) avant de les utiliser et de remplacer les instances des exemples de chaînes par vos valeurs. Par exemple, remplacez example_cluster par le nom de votre cluster.

2.    Créez un groupe de nœuds géré doté d'une capacité Spot dans votre cluster existant en exécutant la commande suivante :

#eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types=<Comma-separated list of instance types> --region <EKS cluster AWS region. Defaults to the value set in your AWS config (~/.aws/config)>

Exemple :

#eksctl create nodegroup --cluster=demo --spot --instance-types=c3.large,c4.large,c5.large --region us-east-1

Remarque : vous pouvez configurer d'autres indicateurs lors de la création d'un groupe de nœuds géré par Spot, tels que --name, --nodes, --nodes-min et --nodes-max. Obtenez la liste complète de tous les indicateurs disponibles en exécutant la commande suivante :

#eksctl create nodegroup --help

3.    Si vous gérez un fichier de configuration eksctl ClusterConfig pour votre cluster, vous pouvez également créer un groupe de nœuds géré par Spot avec ce fichier. Créez des instances Spot à l'aide de groupes de nœuds gérés à l'aide d'un fichier de configuration spot-cluster.yamlen exécutant la commande suivante :

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: <example_cluster>
  region: <example_region>
managedNodeGroups:
- name: spot
  instanceTypes: ["c3.large","c4.large","c5.large","c5d.large","c5n.large","c5a.large"]
  spot: true

4.    Créez un groupe de nœuds à l'aide du fichier de configuration en exécutant la commande suivante :

# eksctl create nodegroup -f spot-cluster.yaml

Résoudre les problèmes liés aux instances Spot dans Amazon EKS

Vérifiez l'intégrité d'un groupe de nœuds géré à l'aide de eksctl ou de la console Amazon EKS comme suit :

$ eksctl utils nodegroup-health --name=<example_nodegroup> --cluster=<example_cluster>

L'intégrité des groupes de nœuds gérés par Spot peut se dégrader en cas d'erreur, en raison d'un manque de capacité Spot pour les types d'instances utilisés. Consultez l'erreur suivante par exemple :

AsgInstanceLaunchFailures Could not launch Spot Instances. UnfulfillableCapacity - Unable to fulfill capacity due to your request configuration. Please adjust your request and try again. Launching EC2 instance failed.

Remarque : pour adopter avec succès les instances Spot, il est recommandé de mettre en œuvre la diversification des instances Spot dans le cadre de la configuration de votre groupe de nœuds gérés Spot. La diversification des instances Spot permet d'obtenir de la capacité à partir de plusieurs groupes d'instances Spot. Cette capacité permet à la fois d'augmenter et de remplacer les instances Spot susceptibles de recevoir une notification de résiliation d'instance Spot.

Si les groupes de nœuds Spot de votre cluster doivent être provisionnés avec des types d'instances respectant un ratio un vCPU:4 Go de RAM, diversifiez vos groupes d'instances Spot. Diversifiez vos groupes d'instances en utilisant l'une des stratégies suivantes :

  • Créez plusieurs groupes de nœuds, chacun ayant des tailles différentes. Par exemple, un groupe de nœuds de 4 processeurs virtuels et de 16 Go de RAM, et un autre groupe de nœuds de 8 processeurs virtuels et 32 Go de RAM.
  • Implémentez la diversification des instances au sein des groupes de nœuds. Pour ce faire, sélectionnez une combinaison de types et de familles d'instances provenant de différents groupes d'instances Spot répondant aux mêmes critères de vCPU et de mémoire.

Utilisez amazon-ec2-instance-selector pour sélectionner les types et les familles d'instances appropriés avec un nombre de processeurs virtuels et une capacité RAM suffisants en exécutant la commande suivante :

curl -Lo ec2-instance-selector https://github.com/aws/amazon-ec2-instance-selector/releases/download/v2.0.3/ec2-instance-selector-`uname | tr '[:upper:]' '[:lower:]'`-amd64 && chmod +x ec2-instance-selector
sudo mv ec2-instance-selector /usr/local/bin/
ec2-instance-selector --version

Exemple :

ec2-instance-selector --vcpus 4 --memory 16 --gpus 0 --current-generation -a x86_64 --deny-list '.*[ni].*'

La commande précédente affiche une liste similaire à la suivante. Utilisez ces instances dans le cadre de l'un de vos groupes de nœuds.

  • m4.xlarge
  • m5.xlarge
  • m5a.xlarge
  • m5ad.xlarge
  • m5d.xlarge
  • t2.xlarge
  • t3.xlarge
  • t3a.xlarge

Remarque : les types d'instances des groupes de nœuds existants ne peuvent pas être modifiés à l'aide de l'API Amazon EKS. Il est recommandé de créer un nouveau groupe de nœuds Spot avec les types d'instances souhaités. Saisissez ce qui suit dans la commande eksctl create nodegroup. Notez le nouvel indicateur eksctl pour indiquer qu'un groupe de nœuds exécute des instances Spot : --spot.

$eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types m5.xlarge,m4.xlarge,m5a.xlarge,m5d.xlarge,m5n.xlarge,m5ad.xlarge --region <example_region>

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an