Latenz durch Vorab-Aufwärmen von Bildern reduzieren

Mit dem Vorab-Caching 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, die mit dem ersten Pull einer neuen Image-Version für Arbeitslasten mit Image-Streamingverbunden ist, effektiv vermieden.

Ü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. Mit dem Vorab-Caching können Sie Images vorab in den Image-Streaming-Cache laden.

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 Vorab-Caching ist nur über die Artifact Registry REST API verfügbar. Das Vorab-Caching ist nicht über die Google Cloud Console verfügbar.
  • Nur GKE: Das Vorab-Caching 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) vorab im Cache speichern.
  • Images mit mehreren Architekturen: Nicht unterstützt. Verwenden Sie die spezifische Version für ein Architektur-Image.
  • Projektlimit: Für vorab im Cache gespeicherte Images gilt ein Gesamlimit von 100 GB pro Verbraucherprojekt. Wenn das Limit erreicht ist, werden ältere Images entfernt, um Platz für neue Images zu schaffen.

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 vorab im Cache gespeicherten Images benötigen:

  • Artefakte vorab im Cache speichern oder aus dem Cache entfernen (artifactregistry.repositories.prewarmArtifact, artifactregistry.repositories.removePrewarmedArtifact): Artifact Registry-Autor (roles/artifactregistry.writer)
  • Vorab im Cache gespeicherte 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 Lesezugriff können prüfen, welche Artefakte für das Streaming verfügbar sind.

Image vorab im Cache speichern

Wenn Sie ein Image vorab im Cache speichern möchten, 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 vorab im Cache gespeichert werden soll. Sie müssen entweder eine version oder ein tag angeben.
version Optional : Die spezifische Artefaktversion, die vorab im Cache gespeichert werden soll. Sie müssen entweder eine version oder ein tag angeben.
retention_days Optional : Die Anzahl der Tage, die das Artefakt im Cache aufbewahrt werden soll. Wenn Sie dieses Feld nicht angeben, beträgt der Standardwert 3 Tage.
force Optional : Wenn true, kann das System ältere Artefakte entfernen, um Platz für dieses zu schaffen.
stream_location Optional : Die spezifische Region, in der das Image vorab im Cache gespeichert wird. Standardmäßig entspricht dies dem Speicherort des Images. Konfigurationen mit mehreren Regionen werden nicht unterstützt. Wenn eine breite Region angegeben ist, sind die Standardwerte „us-central1“ (USA), „europe-north1“ (EU) und „asia-east1“ (Asien).

Beispiel: Bestimmte Version vorab im Cache speichern

Im folgenden Beispiel wird die Version sha256:52e... des Pakets nginx im Repository my-repo in der Region „us-east1“ vorab im Cache gespeichert.

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,
    "stream_location": "us-east1",
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

Beispiel: Tag vorab im Cache speichern

Im folgenden Beispiel wird das Image mit dem Tag production des Pakets my-app vorab im Cache gespeichert.

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 Vorab-Cachings prüfen

Verwenden Sie die Methode :checkPrewarmedArtifact, um zu prüfen, ob ein Artefakt vorab im Cache gespeichert 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"

Vorab im Cache gespeicherte Artefakte auflisten

Verwenden Sie die Methode GET für die Sammlung prewarmedArtifacts, um alle vorab im Cache gespeicherten Artefakte in einem Repository aufzulisten. Im folgenden Beispiel werden alle vorab im Cache gespeicherten Images unter my-repo in us-east1 aufgelistet. Der Filter stream_location ist erforderlich.

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?filter=stream_location=us-east1"/

Aus dem Cache entfernen

Verwenden Sie die Methode :removePrewarmedArtifact, um ein Artefakt explizit aus dem Vorab-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