View a markdown version of this page

Konfigurieren Sie Node-Lifecycle-Aktionen in AWS STCK - AWS STCK

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren Sie Node-Lifecycle-Aktionen in AWS STCK

Sie definieren Aktionen für den Knotenlebenszyklus in Ihrer Compute-Knotengruppenkonfiguration. In diesem Thema wird beschrieben, wie Sie ein Skript definieren, steuern, ob es beim Neustart erneut ausgeführt wird, es speichern, Argumente übergeben, Fehler behandeln, es zwischenspeichern, seine Integrität überprüfen und seine Protokolle lesen.

Anforderung an die Agentenversion

Für Aktionen im Knotenlebenszyklus ist die AWS PCS-Agent-Version 1.5.0-1 oder höher erforderlich. Wenn Ihre Rechenknoten ein benutzerdefiniertes AMI mit einer älteren Agentenversion verwenden, aktualisieren Sie den Agenten, bevor Sie Lebenszyklusaktionen konfigurieren. Weitere Informationen finden Sie unter AWS PCS-Agent-Versionen.

Wie definiert man ein Skript

Jedes Skript hat einename, einescriptSource, optionalearguments, eine onError Richtlinie und eineexecutionPolicy. Die Felder Standort und Integrität sind unter gruppiertscriptSource.

{ "name": "My script", "scriptSource": { "scriptLocation": "s3://my-bucket/my-script.sh", "s3VersionId": "optional, S3 only", "checksum": "optional 64-char SHA-256 hex" }, "arguments": ["arg1", "arg2"], "onError": "TERMINATE", "executionPolicy": "FIRST_BOOT_ONLY" }

Fügen Sie einer Compute-Knotengruppe Lebenszyklus-Aktionen hinzu

Sie können Lebenszyklusaktionen hinzufügen, wenn Sie eine Compute-Knotengruppe erstellen oder aktualisieren. Verwenden Sie das AWS-Managementkonsole oder das AWS CLI.

AWS-Managementkonsole
Um Lebenszyklusaktionen mithilfe der Konsole hinzuzufügen
  1. Öffnen Sie die AWS PCS-Konsole.

  2. Öffnen Sie die Seite zum Erstellen oder Aktualisieren einer Compute-Knotengruppe.

  3. Wählen Sie im Abschnitt Aktionen zum Node-Lebenszyklus die Option Skript hinzufügen aus.

  4. Wählen Sie die Skriptquelle aus:

    1. Aus der AWS PCS-Skriptbibliothek hinzufügen — Verweisen Sie auf ein AWS verwaltetes Skript. Weitere Informationen finden Sie unter Verwenden Sie AWS-gepflegte Skripte für Node-Lifecycle-Aktionen in AWS STCK.

    2. Über S3 hinzufügen — Referenzieren Sie ein Skript anhand seiner Amazon S3-URI.

    3. Über HTTPS hinzufügen — Referenzieren Sie ein Skript anhand seiner HTTPS-URL.

  5. Wählen Sie die Node-Stufe aus.

  6. Geben Sie für ein Skript, das Sie über S3 oder HTTPS hinzufügen, die folgenden Einstellungen an:

    1. Speicherort des Skripts — Geben Sie den S3-URI oder die HTTPS-URL für das Skript ein.

    2. Name — Geben Sie einen Namen für das Skript ein.

    3. (Optional) Prüfsumme — Geben Sie eine SHA-256 Prüfsumme ein, um die Integrität des Skripts zu überprüfen. Weitere Informationen finden Sie unter Integrität des Skripts (Prüfsummen).

    4. (Optional) Geben Sie für ein Skript, das Sie über S3 hinzufügen, eine Version ein, die auf eine bestimmte Version des Objekts verweist.

  7. Geben Sie für alle Skriptquellen die folgenden Einstellungen an:

    1. Verhalten bei der Fehlerbehandlung — Wählen Sie TERMINATESTOP_SEQUENCE, oderCONTINUE.

    2. Ausführungsrichtlinie — Wählen Sie FIRST_BOOT_ONLY oderEVERY_BOOT.

    3. (Optional) Argumente — Fügen Sie Argumente hinzu, die an das Skript übergeben werden sollen.

  8. Um weitere Skripts hinzuzufügen, wiederholen Sie diese Schritte.

  9. Skripts werden innerhalb einer Phase von oben nach unten ausgeführt. Um die Ausführungsreihenfolge zu ändern, wählen Sie Aktionen für ein Script aus und wählen Sie dann Nach oben oder Nach unten.

  10. Wählen Sie für Caching-Richtlinie die Option CACHE_ONCE oder REFRESH_ON_REBOOT aus. Die Caching-Richtlinie gilt für alle Skripts. Weitere Informationen finden Sie unter Zwischenspeichern und Aktualisierungen von Skripten.

AWS CLI

Verwenden Sie den --node-lifecycle-actions Parameter mit dem update-compute-node-group Befehl create-compute-node-group or. Die Parameterstruktur finden Sie NodeLifecycleActionsRequest in der AWS PCS-API-Referenz. Beispiele für Befehle finden Sie unterBeispiele für Aktionen im Knotenlebenszyklus für AWS STCK.

Steuern des Neustartverhaltens

Wird executionPolicy pro Skript festgelegt, um zu steuern, ob es beim Neustart erneut ausgeführt wird.

Wert

Behavior

Wann sollte dies verwendet werden?

FIRST_BOOT_ONLY (Standard)

Führen Sie das Skript einmal aus, beim ersten Start des Knotens. Überspringen Sie es bei jedem nachfolgenden Neustart.

One-time Einrichtung, z. B. das Installieren von Paketen, das Beitreten zu einer Domäne oder das Initialisieren des Speichers. Sie müssen diese Skripts nicht idempotent machen.

EVERY_BOOT

Führen Sie das Skript beim ersten Start und bei jedem Neustart aus.

Konfiguration, die nach einem Neustart erneut angewendet werden muss, z. B. beim erneuten Mounten eines kurzlebigen Dateisystems oder bei der Wiederherstellung des Knotenzustands.

Skripts sind so eingestellt, dass sie einmal FIRST_BOOT_ONLY ausgeführt werden und beim Neustart übersprungen werden. Skripte sind so eingerichtet, dass sie bei jedem Systemstart EVERY_BOOT ausgeführt werden und idempotent sein sollten (es ist sicher, dass sie mehrmals ausgeführt werden und dasselbe Ergebnis haben).

Speicherorte von Skripten

Sie können Skripts in Amazon S3 speichern oder über HTTPS bereitstellen. Skripte können nicht inline über die API hochgeladen werden, und jedes Skript darf nicht größer als 2 MiB sein — der Agent lehnt jedes Skript ab, das diese Größe überschreitet.

  • Amazon S3 (s3://bucket/key) — Das Instanz-IAM-Profil muss s3:GetObject auf dem Objekt vorhanden sein. Mit einem S3-Gateway-VPC-Endpunkt können Knoten in privaten Subnetzen Skripts über den VPC-Endpunkt abrufen. Pingen Sie eine bestimmte Version mit scriptSource.s3VersionId (nur S3-Standorte) an.

  • HTTPS (https://hostname/path) — Der Host muss öffentlich lesbar sein (keine Authentifizierung) und der Knoten benötigt ausgehenden Internetzugang (Internet-Gateway, NAT-Gateway oder HTTP-Proxy). Dies ist nützlich für Skripte, die auf GitHub oder anderen öffentlichen Repositorys gehostet werden.

Externer Speicher bietet Versionskontrolle, Überprüfbarkeit und teamübergreifende Wiederverwendung. Inline- oder hochgeladene Skripts werden nicht unterstützt.

Übergabe von Argumenten an Skripts

Übergeben Sie Argumente als geordnetes Array. Sie erreichen Ihr Skript als positionale Befehlszeilenparameter.

arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)

Der Agent exportiert Umgebungsvariablen in jedes Skript. Diese Variablen enthalten Cluster- und Knotenmetadaten.

Variable

Beschreibung

PCS_CLUSTER_ID / PCS_CLUSTER_NAME

Cluster-ID//Name

PCS_COMPUTE_NODE_GROUP_ID / PCS_COMPUTE_NODE_GROUP_NAME

Gruppenkennung des Knotens berechnen//Name

PCS_NODE_ID

Knoten-ID

PCS_IS_FIRST_BOOT

1beim ersten Start des Knotens, 0 bei jedem nachfolgenden Neustart. Verwenden Sie es, um das Verhalten in EVERY_BOOT Skripten zu verzweigen.

#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"

Fehlerbehandlung

Jedes Skript hat ein onError Feld, das steuert, was passiert, wenn ein Skript ungleich Null beendet wird oder durch ein Signal beendet wird.

Wert

Behavior

Wann sollte dies verwendet werden?

TERMINATE (Standard)

Markieren Sie den Knoten als ausgefallen und beenden Sie ihn.

Kritische Konfiguration (Speichermounts, Active Directory-Join). Verhindert, dass für defekte Knoten bezahlt wird.

STOP_SEQUENCE

Stoppen Sie die verbleibenden Skripts in der Phase; lassen Sie den Knoten laufen.

Debugging — überprüfen Sie die Instanz nach einem Ausfall.

CONTINUE

Protokollieren Sie den Fehler und führen Sie das nächste Skript aus.

Optionale oder nach besten Kräften ausgeführte Aufgaben.

Ein Skript schlägt fehl, wenn es ungleich Null beendet wird oder wenn es durch ein Signal beendet wird (z. B.). SIGSEGV Skripts werden nicht erneut versucht. Wenn bei einem Vorgang vorübergehende Fehler auftreten können, fügen Sie dem Skript eine Wiederholungslogik hinzu. Das Abrufen (Herunterladen) des Skripts wird jedoch erneut versucht — bis zu 3 Versuche mit exponentiellem Backoff (maximal etwa 17 Sekunden) — bevor das Verhalten eintritt. onError

Zwischenspeichern und Aktualisierungen von Skripten

Der Agent lädt jedes Skript beim ersten Start auf die Instanz herunter und speichert es lokal. Zwei Felder steuern das Verhalten beim Neustart: scriptCachingPolicy steuert den erneuten Download und executionPolicy steuert die erneute Ausführung.

  • CACHE_ONCE(Standard) — Beim ersten Start einmal herunterladen; niemals erneut abrufen. Das Verhalten ist bei allen Neustarts identisch. Für die Aktualisierung des Skriptinhalts ist ein Austausch der Instanz erforderlich.

  • REFRESH_ON_REBOOT— Re-download Bei jedem Neustart wird der Cache überschrieben. Auf diese Weise können Sie Skriptkorrekturen durch einen Neustart versenden. Es erfordert Netzwerkzugriff bei jedem Start. Schlägt eine Aktualisierung fehl, wird der Download als Fehler beim Abrufen behandelt und das onError Verhalten des Skripts wird übernommen (es gibt kein Fallback auf die zwischengespeicherte Kopie). Ein aktualisiertes Skript wird nur dann beim Neustart erneut ausgeführt, wenn dies der Fall ist. executionPolicy EVERY_BOOT

Die Lebenszykluskonfiguration (welche Skripte ausgeführt werden, ihre Argumente, Fehlerbehandlung und Ausführungsrichtlinie) ist für jede Instanz immer unveränderlich. Eine Änderung UpdateComputeNodeGroup wirkt sich nur auf neue Instanzen aus und löst die DRAIN Strategie aus, sodass laufende Jobs beendet werden, bevor die Knoten ersetzt werden.

Integrität des Skripts (Prüfsummen)

Geben Sie optional eine SHA-256 checksum in einem Skript als scriptSource 64-stellige Hexadezimalzeichenfolge an. Der Agent überprüft es beim Herunterladen; eine Nichtübereinstimmung wird als Download-Fehler behandelt und ausgelöst. onError Wir empfehlen eine Prüfsumme für die Produktion, insbesondere für Skripte aus gemeinsam genutzten oder externen Quellen.

sha256sum mount-efs.sh # use the 64-char hex hash as the checksum value

Loggen und Debuggen

Jedes Skript schreibt in seine eigene Protokolldatei, und der Agent führt sein eigenes Betriebsprotokoll.

# agent: download, caching, checksum, orchestration /var/log/amazon/pcs/lifecycle/actions/executor.log # each script's stdout/stderr /var/log/amazon/pcs/lifecycle/actions/<stage>/<script-name>.log

Der Protokolldateiname verwendet den Skriptnamen, den Sie definiert haben. Leerzeichen werden beibehalten. Beispielsweise Mount EFS home directory schreibt ein Skript mit dem Namen Writes toMount EFS home directory.log. Stellen Sie eine Verbindung mit SSH oder AWS Systems Manager Session Manager her, um sie zu lesen — beide sind nodeBootstrapped stufenweise verfügbar. Da Knoten, bei denen ein Fehler auftritt, ersetzt TERMINATE werden, leiten Sie die Protokolle nach der Beendigung zum Debuggen an andere Instanzen weiter: Fügen Sie ein Node-Bootstrap-Skript hinzu, das den CloudWatch Amazon-Agenten so konfiguriert, dass er das Lifecycle-Log-Verzeichnis an Amazon Logs sendet. CloudWatch Das AWS-maintened-Skript erledigt dies. configure-cloudwatch-logs.sh Weitere Informationen finden Sie unter Verwenden Sie AWS-gepflegte Skripte für Node-Lifecycle-Aktionen in AWS STCK.