Wie starte und behebe ich Spot-Instances mit von Amazon EKS verwalteten Knotengruppen?

Lesedauer: 4 Minute
0

Ich möchte eine verwaltete Knotengruppe mit Spot-Kapazität für meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster erstellen und Probleme beheben.

Lösung

1.    Installieren Sie eksctl.

Wichtig: Stellen Sie sicher, dass Sie alle Befehle der AWS Command Line Interface (AWS CLI) überprüfen, bevor Sie sie verwenden, und ersetzen Sie Instances der Beispiel-Zeichenfolgen durch Ihre Werte. Ersetzen Sie beispielsweise example_cluster durch Ihren Clusternamen.

2.    Erstellen Sie eine verwaltete Knotengruppe mit Spot-Kapazität in Ihrem vorhandenen Cluster, indem Sie den folgenden Befehl ausführen:

#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)>

Beispiel:

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

Hinweis: Es gibt andere Flags, die Sie beim Erstellen einer Spot-verwalteten Knotengruppe einrichten können, wie z. B. --name, --nodes, --nodes-min und --nodes-max. Rufen Sie die vollständige Liste aller verfügbaren Flags ab, indem Sie den folgenden Befehl ausführen:

#eksctl create nodegroup --help

3.    Wenn Sie eine eksctl ClusterConfig-Konfigurationsdatei für Ihren Cluster verwalten, können Sie mit dieser Datei auch eine Spot-verwaltete Knotengruppe erstellen. Erstellen Sie Spot-Instances mithilfe von verwalteten Knotengruppen mit einer spot-cluster.yaml -Konfigurationsdatei, indem Sie den folgenden Befehl ausführen:

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.    Erstellen Sie eine Knotengruppe mithilfe der Konfigurationsdatei, indem Sie den folgenden Befehl ausführen:

# eksctl create nodegroup -f spot-cluster.yaml

Behebung von Problemen im Zusammenhang mit Spot-Instances in Amazon EKS

Überprüfen Sie den Zustand einer verwalteten Knotengruppe, indem Sie eksctl oder die Amazon-EKS-Konsole wie folgt verwenden:

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

Der Zustand von Spot-verwalteten Knotengruppen kann sich aufgrund eines Mangels an Spot-Kapazität für verwendete Instance-Typen mit einem Fehler verschlechtern. Sehen Sie sich zum Beispiel den folgenden Fehler an:

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.

Hinweis: Um Spot-Instances erfolgreich einzusetzen, empfiehlt es sich, die Diversifizierung von Spot-Instances als Teil der Konfiguration der Spot-verwalteten Knotengruppe zu implementieren. Die Diversifizierung von Spot-Instances hilft dabei, Kapazität aus mehreren Spot-Instance-Pools zu beziehen. Das Abrufen dieser Kapazität dient sowohl zum Hochskalieren als auch zum Ersetzen von Spot-Instances, die möglicherweise eine Benachrichtigung über die Kündigung von Spot-Instances erhalten.

Wenn Ihre Cluster-Spot-Knotengruppen mit Instance-Typen bereitgestellt werden müssen, die ein Verhältnis von 1 vCPU:4 GB RAM einhalten, diversifizieren Sie Ihre Spot-Instance-Pools. Diversifizieren Sie Ihre Instance-Pools, indem Sie eine der folgenden Strategien anwenden:

  • Erstellen Sie mehrere Knotengruppen mit jeweils unterschiedlichen Größen. Beispielsweise eine Knotengruppe mit 4 vCPUs und 16 GB RAM und eine andere Knotengruppe mit 8 vCPUs und 32 GB RAM.
  • Implementieren Sie die Instance-Diversifizierung innerhalb der Knotengruppen. Wählen Sie dazu eine Mischung aus Instance-Typen und -Familien aus verschiedenen Spot-Instance-Pools aus, die dieselben vCPUs und Speicherkriterien erfüllen.

Verwenden Sie amazon-ec2-instance-selector, um die relevanten Instance-Typen und -Familien mit einer ausreichenden Anzahl von vCPUs und RAM auszuwählen, indem Sie den folgenden Befehl ausführen:

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

Beispiel:

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

Der vorherige Befehl zeigt eine Liste ähnlich der folgenden an. Verwenden Sie diese Instances als Teil einer Ihrer Knotengruppen.

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

Hinweis: Instance-Typen vorhandener Knotengruppen können nicht mit der Amazon-EKS-API geändert werden. Es empfiehlt sich, eine neue Spot-Knotengruppe mit den gewünschten Instance-Typen zu erstellen. Geben Sie im Befehl eksctl create nodegroup Folgendes ein. Beachten Sie das neue eksctl-Flag, das angibt, dass eine Knotengruppe Spot-Instances ausführt: --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 OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr