Container-Images mithilfe von Image-Streaming abrufen

Auf dieser Seite wird beschrieben, wie Sie mit Image-Streaming in Google Kubernetes Engine (GKE) Container-Images abrufen. Dazu streamen Sie die Image-Daten je nach Bedarf Ihrer Anwendungen.

Autopilot-Cluster verwenden automatisch Image-Streaming, um zulässige Images abzurufen. Die Anleitung auf dieser Seite zum Aktivieren und Deaktivieren des Image-Streamings gilt für Standardcluster.

Übersicht

Image-Streaming ist eine Methode zum Abrufen von Container-Images, bei der GKE Daten, die von Ihren Anwendungen angefordert werden, aus zulässigen Images streamt. Mit Image-Streaming können Sie Arbeitslasten initialisieren, ohne auf das Herunterladen des gesamten Images zu warten. Dies führt zu erheblichen Verbesserungen bei den Initialisierungszeiten. Die verkürzte Abrufzeit bietet folgende Vorteile:

  • Schnelleres Autoscaling
  • Geringere Latenzzeit beim Abrufen großer Images
  • Schnellerer Pod-Start

Beim Image-Streaming verwendet GKE ein Remote-Dateisystem als Root-Dateisystem für alle Container, die zulässige Container-Images verwenden. GKE streamt nach Bedarf von Ihren Arbeitslasten Bilddaten aus dem Remote-Dateisystem. Ohne Image-Streaming lädt GKE das gesamte Container-Image auf jeden Knoten herunter und verwendet es als Root-Dateisystem für Ihre Arbeitslasten.

Während das Image hochgeladen wird, lädt GKE das gesamte Container-Image auf das lokale Laufwerk im Hintergrund herunter und speichert es im Cache. GKE verarbeitet dann zukünftige Datenleseanfragen aus dem im Cache gespeicherten Bild.

Wenn Sie Arbeitslasten bereitstellen, die bestimmte Dateien im Container-Image lesen müssen, stellt das Image-Streaming-Backend nur die angeforderten Dateien bereit.

Voraussetzungen

Sie müssen folgende Anforderungen erfüllen, um Image-Streaming in GKE Autopilot- und Standardclustern zu verwenden:

  • Sie müssen die Container File System API aktivieren.

    Container File System API aktivieren

  • Sie müssen ein Knoten-Image mit containerd verwenden. Unterstützte Optionen:

  • Ihre Container-Images müssen in Standard- oder Remote-Repositories in Artifact Registry oder in öffentlichen Registries in Docker Hub gespeichert sein.

  • Wenn Sie private Knoten in Ihrem Cluster aktivieren, müssen Sie im Subnetz den privaten Google-Zugriff aktivieren, damit Ihre Knoten auf den Image-Streaming-Dienst zugreifen können.

  • Wenn VPC Service Controls Ihre Container-Images schützt und Sie Image-Streaming verwenden, müssen Sie auch die Image-Streaming-API (containerfilesystem.googleapis.com) in den Dienstperimeter aufnehmen.

  • Wenn die GKE-Knoten im Cluster nicht das Standarddienstkonto verwenden, müssen Sie dafür sorgen, dass Ihr benutzerdefiniertes Dienstkonto die IAM-Rolle Service Usage-Nutzer (roles/serviceusage.serviceUsageConsumer) in dem Projekt hat, in dem das Container-Image gehostet wird.

Beschränkungen

  • Container-Images, die das V2 Image Manifest, Schemaversion 1 verwenden, sind nicht geeignet.
  • Container-Images mit doppelten Ebenen werden nicht unterstützt. GKE lädt diese Images herunter, ohne die Daten zu streamen. Prüfen Sie das Container-Image auf leere oder doppelte Ebenen.
  • Wenn Ihre Arbeitslasten während der Initialisierung viele Dateien in einem Image lesen, kann es aufgrund der durch die Remote-Dateilesevorgänge verursachten Latenz zu einer erhöhten Initialisierungszeit kommen.
  • Wenn für Ihre Arbeitslasten ein großer Teil des Images verfügbar sein muss, bevor Code ausgeführt werden kann, kann es zu einer Verzögerung zwischen dem Zeitpunkt, zu dem kubelet den Container startet, und dem Zeitpunkt, zu dem der Container tatsächlich mit dem Senden von Logs beginnt, kommen.
  • Möglicherweise bemerken Sie die Vorteile des Image-Streamings beim ersten Abrufen eines zulässigen Images nicht. Aber nachdem das Image-Streaming das Image im Cache gespeichert hat, profitieren künftige Image-Abrufe für einen Cluster vom Image-Streaming.
  • GKE-Standardcluster verwenden die Konfiguration auf Clusterebene, um zu bestimmen, ob das Image-Streaming für neue Knotenpools aktiviert werden soll, die per automatischer Knotenpoolerstellung erstellt wurden. Sie können jedoch keine Arbeitslasttrennung verwenden, um Knotenpools mit aktiviertem Image-Streaming zu erstellen, wenn das Image-Streaming auf Clusterebene deaktiviert ist.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

Image-Streaming in Clustern aktivieren

Sie können Image-Streaming in neuen oder vorhandenen Standardclustern mit der gcloud CLI und dem Flag --enable-image-streaming oder über dieGoogle Cloud Console aktivieren. Wenn Sie einen Cluster mit dem Flag --enable-image-streaming erstellen, wird Image-Streaming im Standardknotenpool aktiviert. Für neue Knotenpools, die Sie erstellen, ist auch Image-Streaming aktiviert, es sei denn, Sie deaktivieren es beim Erstellen der Knotenpools.

Alle Autopilot-Cluster verwenden Image-Streaming, um zulässige Images abzurufen. Eine Anleitung finden Sie unter Version und Release-Version eines neuen Autopilot-Clusters bestimmen. Die folgende Anleitung gilt nur für GKE Standard-Cluster.

Sie können Image-Streaming in vorhandenen Clustern, die die Anforderungen erfüllen, mit der gcloud CLI oder der Google Cloud -Konsole aktivieren.

gcloud

Führen Sie den folgenden Befehl mit der gcloud CLI aus, um einen vorhandenen Cluster für die Verwendung von Image-Streaming zu aktualisieren:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-image-streaming

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Name Ihres Clusters.
  • CONTROL_PLANE_LOCATION: Der Standort der Steuerungsebene Ihres Clusters.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Google Kubernetes Engine.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf der Seite Cluster im Abschnitt Features neben auf Image-Streaming.

  4. Wählen Sie im Dialogfeld Image-Streaming bearbeiten das Kästchen Image-Streaming aktivieren aus.

  5. Klicken Sie auf Änderungen speichern.

Nachdem Sie den Cluster geändert haben, aktiviert GKE standardmäßig das Image-Streaming für Ihre vorhandenen Knotenpools. Wenn Sie Image-Streaming für einzelne Knotenpools explizit aktiviert oder deaktiviert haben, übernehmen diese Knotenpools Änderungen der Einstellung auf Clusterebene nicht mehr.

Wenn Sie die Image-Streaming-Einstellung auf Clusterebene ändern, wird die Wartungsverfügbarkeit berücksichtigt. Auf Knotenpoolebene ist dies nicht der Fall.

Für diese Änderung müssen die Knoten neu erstellt werden, was zu Unterbrechungen Ihrer laufenden Arbeitslasten führen kann. Details zu dieser spezifischen Änderung finden Sie in der entsprechenden Zeile in der Tabelle Manuelle Änderungen, die die Knoten mithilfe einer Knotenupgrade-Strategie neu erstellen und Wartungsrichtlinien berücksichtigen. Weitere Informationen zu Knotenupdates finden Sie unter Unterbrechungen durch Knotenupdates planen.

Prüfen, ob Image-Streaming für Cluster aktiviert ist

Sie können prüfen, ob Image-Streaming auf Clusterebene mit der gcloud CLI oder der Console von Google Cloud aktiviert ist.

gcloud

Führen Sie dazu diesen Befehl aus:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --flatten "nodePoolDefaults.nodeConfigDefaults"

Ersetzen Sie dabei Folgendes:

  • CLUSTER_NAME: Der Name Ihres Clusters.
  • CONTROL_PLANE_LOCATION: Der Standort der Steuerungsebene Ihres Clusters.

Die Einstellung ist aktiviert, wenn die Ausgabe in etwa so aussieht:

gcfsConfig:
  enabled: true
...

Die Einstellung ist deaktiviert, wenn die Ausgabe in etwa so aussieht:

gcfsConfig: {}
...

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Google Kubernetes Engine.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie auf den Namen des Clusters, den Sie prüfen möchten.

  3. Auf der Seite Cluster im Abschnitt Features wird neben Image-Streaming angezeigt, ob die Einstellung aktiviert ist.

Image-Streaming für Knotenpools aktivieren

Standardmäßig übernehmen Knotenpools die Image-Streaming-Einstellung auf Clusterebene. Mit der gcloud CLI können Sie Image-Streaming für bestimmte Knotenpools aktivieren oder deaktivieren.

Für einen neuen Knotenpool

Führen Sie den folgenden Befehl aus, um einen neuen Knotenpool zu erstellen, für den Image-Streaming aktiviert ist:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --image-type=IMAGE_TYPE \
    --enable-image-streaming

Dabei gilt:

  • NODE_POOL_NAME ist der Name des neuen Knotenpools.
  • CLUSTER_NAME ist der Name des Clusters für den Knotenpool.
  • CONTROL_PLANE_LOCATION: der Compute Engine-Standort der Steuerungsebene Ihres Clusters. Geben Sie für regionale Cluster eine Region und für zonale Cluster eine Zone an.
  • IMAGE_TYPE: Der Image-Typ, entweder COS_CONTAINERD (Container-Optimized OS) oder UBUNTU_CONTAINERD (Ubuntu).

Für einen vorhandenen Knotenpool

Sie können Image-Streaming auf vorhandenen Knotenpools aktivieren, die die Anforderungen erfüllen.

Führen Sie den folgenden Befehl aus, um einen vorhandenen Knotenpool für die Verwendung von Image-Streaming zu aktualisieren:

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-image-streaming

Ersetzen Sie Folgendes:

  • POOL_NAME: Der Name des Knotenpools.
  • CLUSTER_NAME ist der Name des Clusters für den Knotenpool.
  • CONTROL_PLANE_LOCATION: Der Standort der Steuerungsebene Ihres Clusters.

Wenn Sie die Image-Streaming-Einstellung auf Clusterebene ändern, wird die Wartungsverfügbarkeit berücksichtigt. Auf Knotenpoolebene ist dies nicht der Fall.

Für diese Änderung müssen die Knoten neu erstellt werden, was zu Unterbrechungen Ihrer laufenden Arbeitslasten führen kann. Details zu dieser spezifischen Änderung finden Sie in der entsprechenden Zeile in der Tabelle Manuelle Änderungen, die Knoten mit einer Knotenupgrade-Strategie neu erstellen, ohne Wartungsrichtlinien zu berücksichtigen. Weitere Informationen zu Knotenupdates finden Sie unter Unterbrechungen durch Knotenupdates planen.

Prüfen, ob Image-Streaming für Knotenpool aktiviert ist

Prüfen Sie, ob Image-Streaming für einen Knotenpool aktiviert ist:

gcloud container node-pools describe POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

Ersetzen Sie Folgendes:

  • POOL_NAME: Der Name des Knotenpools.
  • CLUSTER_NAME ist der Name des Clusters für den Knotenpool.
  • CONTROL_PLANE_LOCATION: Der Standort der Steuerungsebene Ihres Clusters.

Die Einstellung ist aktiviert, wenn die Ausgabe in etwa so aussieht:

gcfsConfig:
  enabled: true
...

Die Einstellung ist deaktiviert, wenn die Ausgabe in etwa so aussieht:

gcfsConfig: {}
...

Arbeitslast mit Image-Streaming planen

Nachdem Sie Image-Streaming in Ihrem Cluster aktiviert haben, wird es von GKE automatisch verwendet, um zulässige Container-Images aus Artifact Registry abzurufen. Dafür ist keine weitere Konfiguration erforderlich.

GKE fügt Knoten in Knotenpools mit aktiviertem Image-Streaming das Label cloud.google.com/gke-image-streaming: "true" hinzu. Wenn Sie bei GKE Standard das Image-Streaming für bestimmte Knotenpools aktivieren oder deaktivieren, damit Ihr Cluster eine Mischung aus Knoten enthält, die Image-Streaming verwenden, und Knoten, die das nicht tun, können Sie Folgendes verwenden: Nutzen Sie Knotenauswahlen in Ihren Deployments, um zu steuern, ob GKE Ihre Arbeitslasten auf Knoten plant, die Image-Streaming verwenden.

Im folgenden Beispiel planen Sie ein Deployment, das ein großes Container-Image auf einem Cluster mit aktiviertem Image-Streaming verwendet. Sie können dann optional die Leistung mit einem Image-Pull ohne aktiviertes Image-Streaming vergleichen.

  1. Erstellen Sie einen neuen Cluster mit aktiviertem Image-Streaming:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-image-streaming \
        --image-type=IMAGE_TYPE
    
  2. Rufen Sie Anmeldedaten für den Cluster ab:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    
  3. Speichern Sie das folgende Manifest als frontend-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: frontend
    spec:
      replicas: