Klone von nichtflüchtigen Volumes erstellen


Dieses Dokument zeigt Ihnen, wie Sie das Volume-Klonen von Kubernetes verwenden, um nichtflüchtige Volumes in Ihren GKE-Clustern (Google Kubernetes Engine) zu klonen.

Überblick

Ein Klon ist ein neues unabhängiges Volume, das ein Duplikat eines bestehenden Kubernetes-Volumes ist. Ein Klon ähnelt einem Volume-Snapshot, da es eine Kopie eines Volumes zu einem bestimmten Zeitpunkt ist. Beim Klonen eines Volumes wird jedoch kein Snapshot-Objekt vom Quellvolume erstellt, sondern der Klon wird mit allen Daten des Quellvolumes versehen.

Voraussetzungen

Um Volumes in GKE zu klonen, müssen Sie die folgenden Anforderungen erfüllen:

Führen Sie folgenden Befehl in der gcloud CLI aus, um die CSI-Treiberversion des nichtflüchtigen Speichers von Compute Engine zu prüfen:

kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"

Wenn die Ausgabe eine ältere Version als 1.4.0 anzeigt, aktualisieren Sie die Steuerungsebene manuell, um die neueste Version zu erhalten.

Beschränkungen

  • Beide Volumes müssen denselben Volume-Modus verwenden. Standardmäßig setzt GKE den VolumeMode auf ext4.
  • Alle Einschränkungen zum Erstellen eines Laufwerkklons aus einem vorhandenen Laufwerk für Compute Engine gelten auch für GKE.
  • Sie können einen regionalen Laufwerksklon aus einem zonalen Laufwerk erstellen. Beachten Sie jedoch die Einschränkungen dieses Ansatzes.
  • Das Klonen muss in einer kompatiblen Zone erfolgen. Verwenden Sie allowedTopologies, um die Topologie der bereitgestellten Volumes auf bestimmte Zonen zu beschränken. Alternativ können nodeSelectors oder Affinität und Anti-Affinität verwendet werden, um einen Pod so einzuschränken, dass er auf bestimmte Knoten ausgeführt werden kann, die in einer kompatiblen Zone ausgeführt werden.
    • Beim zonalen Klonen muss die Klonzone mit der Zone des Quelllaufwerks übereinstimmen.
    • Beim zonalen bis regionalen Klonen muss eine der Replikatzonen des Klons der Zone des Quelllaufwerks entsprechen.

Volume-Klonen verwenden

Um einen Volume-Klon bereitzustellen, fügen Sie dem Feld dataSource eines neuen PersistentVolumeClaims einen Verweis auf einen bestehenden PersistentVolumeClaim im gleichen Namespace hinzu. Die folgende Übung zeigt, wie Sie ein Quell-Volume mit Daten bereitstellen, einen Volume-Klon erstellen und den Klon verwenden.

Quell-Volume erstellen

Um ein Quellvolume zu erstellen, folgen Sie den Anweisungen in CSI-Treiber für nichtflüchtigen Speicher von Compute Engine für Linux-Cluster verwenden, um eine StorageClass, einen PersistentVolumeClaim und einen Pod zu erstellen, der das neue Volume verarbeitet. Sie verwenden den PersistentVolumeClaim, den Sie als Quelle für den Volume-Klon erstellen.

Testdatei zum Quellvolume hinzufügen

Testdatei zum Quellvolume hinzufügen Sie können im Volume-Klon nach dieser Testdatei suchen, um zu prüfen, ob der Klon erfolgreich war.

  1. Erstellen Sie in einem Pod eine Testdatei:

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
    

    Ersetzen Sie POD_NAME durch den Namen eines Pods, der das Quellvolume nutzt. Wenn Sie beispielsweise der Anleitung unter CSI-Treiber für nichtflüchtigen Speicher von Compute Engine für Linux-Cluster verwenden gefolgt sind, ersetzen Sie POD_NAME durch web-server.

  2. Prüfen Sie, ob die Datei vorhanden ist:

    kubectl exec POD_NAME \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    Die entsprechende Ausgabe sieht etwa so aus:

    Hello World!
    

Quellvolume klonen

  1. Speichern Sie das folgende Manifest als podpvc-clone.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc-clone
    spec:
      dataSource:
        name: PVC_NAME
        kind: PersistentVolumeClaim
      accessModes:
      - ReadWriteOnce
      storageClassName: STORAGE_CLASS_NAME
      resources:
        requests:
          storage: STORAGE
    

    Dabei gilt:

    • PVC_NAME: der Name des Quell-PersistentVolumeClaim, den Sie unter Quellvolume erstellen erstellt haben.
    • STORAGE_CLASS_NAME: der Name der zu verwendenden StorageClass, die mit der StorageClass des Quell-PersistentVolumeClaim übereinstimmen muss.
    • STORAGE: die angefragte Speichermenge, die mindestens die Größe des Quell-PersistentVolumeClaim haben muss.
  2. Wenden Sie das Manifest an:

    kubectl apply -f podpvc-clone.yaml
    

Pod erstellen, der das geklonte Volume verbraucht

Im folgenden Beispiel wird ein Pod erstellt, der den von Ihnen erstellten Volume-Klon verwendet.

  1. Speichern Sie das folgende Manifest als web-server-clone.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server-clone
    spec:
      containers:
       - name: web-server-clone
         image: nginx
         volumeMounts:
           - mountPath: /var/lib/www/html
             name: mypvc
      volumes:
       - name: mypvc
         persistentVolumeClaim:
           claimName: podpvc-clone
           readOnly: false
    
  2. Wenden Sie das Manifest an:

    kubectl apply -f web-server-clone.yaml
    
  3. Prüfen Sie, ob die Testdatei vorhanden ist:

    kubectl exec web-server-clone \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    Die entsprechende Ausgabe sieht etwa so aus:

    Hello World!
    

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

  1. Pod-Objekte löschen:

    kubectl delete pod POD_NAME web-server-clone
    
  2. PersistentVolumeClaim-Objekte löschen:

    kubectl delete pvc podpvc podpvc-clone