Image-Streaming verwenden, um die Containerstartzeit zu verkürzen

In diesem Dokument wird beschrieben, wie Sie mit Image-Streaming Container-Images in Batch-Containerjobs abrufen.

Mit Image-Streaming können Batch-Jobs initialisiert werden, ohne auf den Download eines Container-Images warten zu müssen. Das bietet folgende Vorteile:

  • Geringere Latenzzeit beim Abrufen großer Images
  • Schnellerer Beginn der Jobausführung

Hinweise

  1. Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
  2. Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:

    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.

  3. Wenn Sie die Container File System API noch nicht aktiviert haben, führen Sie den folgenden Befehl aus:

    gcloud services enable containerfilesystem.googleapis.com
    
  4. Wenn Ihre Container-Images durch VPC Service Controls geschützt sind, aktualisieren Sie Ihren Dienstperimeter, um containerfilesystem.googleapis.com einzuschließen.

Beschränkungen

Für das Streaming von Batch-Bildern gelten die folgenden Einschränkungen:

  • Batch unterstützt Image-Streaming nur für Container-Images, die in Artifact Registry gespeichert sind. Wenn Sie derzeit Container Registry zum Verwalten Ihrer Container-Images verwenden, können Sie zu Artifact Registry wechseln.
  • Die VMs Ihres Batch-Jobs müssen am selben Standort ausgeführt werden, an dem Sie Ihr Container-Image in Artifact Registry speichern.
  • Container, die das Docker-Image-Manifest Version 2, Schema 1 verwenden, werden nicht unterstützt.
  • Wenn Sie Image-Streaming verwenden, unterstützen ausführbare Container nur die folgenden Felder:
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • Container-Images mit leeren oder doppelten Ebenen werden nicht unterstützt.

Job erstellen, der Image-Streaming verwendet

So erstellen Sie einen Batch-Containerjob, der Image-Streaming verwendet:

Verwenden Sie die Google Cloud CLI oder die REST API, um einen Containerjob zu erstellen. Wenn Sie Image-Streaming für einen ausführbaren Container aktivieren möchten, legen Sie das Feld enableImageStreaming auf true und das Feld imageUri auf ein Image fest, das an einem Artifact Registry-Speicherort gespeichert ist, der den Speicherort der VM des Jobs enthält.

"container": {
    ...
    "enableImageStreaming": true
        }

Ein Job, der Image-Streaming verwendet, hätte beispielsweise eine JSON-Konfigurationsdatei, die so ähnlich aussieht:

{
    "taskGroups": [
        {
            "taskCount": "1",
            "taskCountPerNode": "1",
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG",
                            "enableImageStreaming": true
                        }
                    }
                ]
            }
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "policy": {
                    "machineType": "e2-standard-4"
                }
            }
        ]
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Ersetzen Sie die folgenden Werte:

  • LOCATION: der regionale oder multiregionale Speicherort des Repositorys, in dem das Image gespeichert ist, z. B. us-east1 oder us. Der Standort des Containers muss mit dem Standort der VMs des Batch-Jobs übereinstimmen.
  • PROJECT-ID: Das Projekt, das das Container-Image enthält. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.
  • REPOSITORY: der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE ist der Name des Container-Images.
  • TAG: Das auf das Bild angewendete Tag.

Nächste Schritte