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.
Übersicht
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:
- Der Quell-PersistentVolumeClaim muss sich im selben Namespace wie der Ziel-PersistentVolumeClaim befinden.
- Verwenden Sie einen CSI-Treiber, der das Klonen von Volumes unterstützt. Der integrierte nichtflüchtige Speichertreiber unterstützt kein Volume-Klonen.
- Der CSI-Treiber für nichtflüchtigen Speicher von Compute Engine Version 1.4.0 und höher unterstützt das Klonen von Volumes und ist standardmäßig auf neuen Linux-Clustern installiert, auf denen GKE Version 1.22 oder später läuft. Sie können auch den CSI-Treiber für nichtflüchtige Speicher von Compute Engine auf einem vorhandenen Cluster aktivieren.
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 in der Ausgabe eine Version angezeigt wird, die älter als 1.4.0
ist, führen Sie ein manuelles Upgrade der Steuerungsebene durch, 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.
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 SiePOD_NAME
durchweb-server
.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
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
Ersetzen Sie dabei Folgendes:
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.
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.
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
Wenden Sie das Manifest an:
kubectl apply -f web-server-clone.yaml
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:
Pod
-Objekte löschen:kubectl delete pod POD_NAME web-server-clone
PersistentVolumeClaim
-Objekte löschen:kubectl delete pvc podpvc podpvc-clone