Latenz durch Vorab-Aufwärmen von Bildern reduzieren

Mit dem Vorabladen von Images können Sie das Herunterladen von Container-Images in den Image-Streaming-Cache explizit auslösen, bevor ein Laufzeitclient sie anfordert. Dadurch wird die Latenz beim "Kaltstart" effektiv vermieden, die mit dem ersten Pull einer neuen Image-Version für Arbeitslasten mit Image-Streaming verbunden ist.

Übersicht

Wenn Sie ein Image in Artifact Registry hochladen, wird es in einem zugrunde liegenden Speichersystem gespeichert. Für den Zugriff mit niedriger Latenz verwendet Artifact Registry auch einen Image-Streaming-Cache, der in der Regel beim ersten Pull von einem Client mit aktiviertem Image-Streaming gefüllt wird. Bei latenzempfindlichen Arbeitslasten wie dem Hochskalieren eines Google Kubernetes Engine-Clusters kann es zu Verzögerungen kommen, wenn Sie warten, bis dieser Cache gefüllt ist. Durch das Vorabladen können Images vorab in den Image-Streaming-Cache geladen werden.

Mit der Prewarm Artifact API können Sie manuell anfordern, dass eine bestimmte Image-Version oder ein bestimmtes Tag vorab im Cache gespeichert wird. Sie können auch einen Aufbewahrungszeitraum angeben, damit das Image für eine bestimmte Dauer im Cache bleibt.

Beschränkungen

  • Nur API: Das Vorabladen ist nur über die Artifact Registry REST API möglich. Das Vorabladen ist nicht über die gcloud CLI oder Google Cloud die Console möglich.
  • Nur GKE: Das Vorabladen ist nur für GKE-Cluster mit Image-Streaming wirksam. Für das Image-Streaming ist bestimmte Software erforderlich, die auf dem Clientknoten ausgeführt wird.
  • Einzelnes Artefakt: Sie können pro API-Anfrage nur ein Artefakt (Version oder Tag) vorabladen.
  • Images mit mehreren Architekturen: Nicht unterstützt. Verwenden Sie die spezifische Version für ein Architektur-Image.

Hinweis

  1. Aktivieren Sie die Artifact Registry API. Weitere Informationen finden Sie unter Artifact Registry aktivieren.
  2. Installieren Sie die gcloud CLI, um Authentifizierungstokens für REST API-Anfragen zu erhalten.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Repository zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten von vorabgeladenen Images benötigen:

  • Artefakte vorabladen oder aus dem Cache entfernen (artifactregistry.repositories.prewarmArtifact, artifactregistry.repositories.removePrewarmedArtifact): Artifact Registry-Autor (roles/artifactregistry.writer)
  • Vorabgeladene Artefakte prüfen oder auflisten (artifactregistry.repositories.checkPrewarmedArtifact, artifactregistry.repositories.listPrewarmedArtifacts): Artifact Registry-Leser (roles/artifactregistry.reader)

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Dieses Berechtigungsmodell sorgt dafür, dass nur Nutzer mit Schreibzugriff den Cache-Status verwalten können. So wird verhindert, dass nicht autorisierte Nutzer den Cache überlasten. Nutzer mit Leseberechtigung können prüfen, welche Artefakte für das Streaming verfügbar sind.

Image vorabladen

Um ein Image vorabzuladen, senden Sie eine POST-Anfrage an die Methode :prewarmArtifact Ihres Repositorys.

REST API

Referenz: projects.locations.repositories.prewarmArtifact

Der Anfragetext hat folgende Struktur:

{
  "version": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/versions/VERSION",
  "retention_days": 3
}

Alternativ können Sie ein Tag verwenden:

{
  "tag": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/tags/TAG",
  "retention_days": 3,
  "force": true
}
Feld Beschreibung
tag Optional : Das spezifische Artefakttag, das vorabgeladen werden soll. Sie müssen entweder eine version oder ein tag angeben.
version Optional : Die spezifische Artefaktversion, die vorabgeladen werden soll. Sie müssen entweder eine version oder ein tag angeben.
retention_days Optional : Die Anzahl der Tage, für die das Artefakt im Cache aufbewahrt werden soll. Wenn Sie dieses Feld nicht angeben, wird standardmäßig 3 Tage verwendet.
force Optional : Wenn true, kann das System ältere Artefakte entfernen, um Platz für dieses zu schaffen.

Beispiel: Bestimmte Version vorabladen

Im folgenden Beispiel wird die Version sha256:52e... des Pakets nginx im Repository my-repo vorabgeladen.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176",
    "retention_days": 7
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

Beispiel: Tag vorabladen

Im folgenden Beispiel wird das Image mit dem Tag production des Pakets my-app vorabgeladen.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "tag": "projects/my-project/locations/us-central1/repositories/my-repo/packages/my-app/tags/production",
    "force": true
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

Status des Vorabladens prüfen

Verwenden Sie die Methode :checkPrewarmedArtifact, um zu prüfen, ob ein Artefakt vorabgeladen wurde.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:checkPrewarmedArtifact"

Vorabgeladene Artefakte auflisten

Verwenden Sie die Methode GET für die Sammlung prewarmedArtifacts, um alle vorabgeladenen Artefakte in einem Repository aufzulisten.

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo/prewarmedArtifacts"

Aus dem Cache entfernen

Verwenden Sie die Methode :removePrewarmedArtifact, um ein Artefakt explizit aus dem Vorabladen-Cache zu entfernen. Verwenden Sie diese Methode, um Speicherplatz freizugeben oder wenn eine bestimmte Image-Version nicht mehr im Cache benötigt wird.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:removePrewarmedArtifact"

Nächste Schritte