Vom Volume-Plug-in FlexVolume zum CSI-Volume-Plug-in migrieren
Erfahren Sie, wie Sie eine Kubernetes-Workload (von einer StatefulSet verwaltet) vom Volume-Plug-in FlexVolume in das CSI-Volume-Plug-in migrieren.
- Das Upstream-Kubernetes-Projekt setzt das Volume-Plug-in FlexVolume in Kubernetes-Version 1.23 außer Kraft.
- Neue Funktionalität wird nur dem CSI-Volume-Plug-in hinzugefügt, nicht dem Volume-Plug-in FlexVolume.
- Das CSI-Volume-Plug-in setzt keinen Zugriff auf zugrunde liegende Betriebssystem- und Root-Dateisystemabhängigkeiten voraus.
In Kubernetes können Sie zustandsbehaftete Anwendungen, die persistenten Speicher erfordern, mit StatefulSet-Objekten verwalten. Weitere Informationen zu StatefulSet-Objekten finden Sie in der Kubernetes-Dokumentation unter StatefulSets.
Wenn eine zustandsbehaftete Anwendung persistenten Speicher erfordert und die StatefulSet, die die Anwendung verwaltet, derzeit das Volume-Plug-in FlexVolume zum Provisioning eines persistenten Volumes verwendet, wird empfohlen, dass Sie die Workload migrieren, um stattdessen das CSI-Volume-Plug-in zu verwenden.
Dieser Abschnitt enthält allgemeine Schritte zum Migrieren einer Workload (die von einer StatefulSet verwaltet wird) vom Volume-Plug-in FlexVolume zum CSI-Volume-Plug-in wie folgt:
- Schritt 1: Ändern Sie die Rückforderungs-Policy vorhandener FlexVolume-PV-Objekte in "Beibehalten"
- Schritt 2: Neue CSI-PV-Objekte erstellen und an Block-Volumes binden
- Schritt 3: Neue CSI-PVC-Objekte erstellen und an die CSI-PV-Objekte binden
- Schritt 4: Erstellen Sie das Objekt StatefulSet neu, um die neuen CSI-PVC-Objekte zu verwenden
- Schritt 5: Löschen Sie die ursprünglichen PVC- und PV-Objekte FlexVolume
Dieser Abschnitt enthält auch ein vollständig bearbeitetes Beispiel, sodass Sie die Schritte in der Praxis sehen können. Siehe Beispiel für die Migration einer Workload vom Volume-Plug-in FlexVolume zum CSI-Volume-Plug-in.
Beachten Sie Folgendes in diesem Abschnitt:
- Persistente Volumes und Persistent Volume Claims, die vom Volume-Plug-in FlexVolume erstellt werden, werden als FlexVolume PVs bzw. FlexVolume PVCs bezeichnet.
- Persistente Volumes und Persistent Volume Claims, die durch das CSI Volume Plugin erstellt werden, werden als CSI PVs bzw. CSI PVCs bezeichnet.
Schritt 1: Ändern Sie die Wiederherstellungs-Policy vorhandener FlexVolume PV-Objekte in "Beibehalten".
-
Ermitteln Sie die Namen der FlexVolume-PVs, die an die FlexVolume-PVCs in der StatefulSet gebunden sind, indem Sie Folgendes eingeben:
kubectl get pvc -
Ändern Sie die Reclaim Policy der vorhandenen FlexVolume PV-Objekte in
Retain, um zu verhindern, dass die Block-Volumes, die PVs unterstützen, während der Migration gelöscht werden, indem Sie Folgendes eingeben:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' -
Bestätigen Sie, dass jede FlexVolume PV aktualisiert wurde, indem Sie Folgendes eingeben:
kubectl get pv <volume-name> -
Stellen Sie sicher, dass die Ausgabe anzeigt, dass die Wiederherstellungs-Policy für jeden FlexVolume-PV auf "Beibehalten" gesetzt wurde.
Wichtig
Überprüfen Sie, ob die Rückforderungs-Policy für jeden FlexVolume-PV auf "Beibehalten" gesetzt wurde. Wenn die Wiederherstellungs-Policy nicht auf "Beibehalten" gesetzt ist, wird das Block-Volume, das die PV FlexVolume unterstützt, während der Migration gelöscht.
Schritt 2: Neue CSI PV-Objekte erstellen und an Block-Volumes binden
- Neue PV-Manifestdatei erstellen.
-
Kopieren Sie für jedes vorhandene FlexVolume PV-Objekt die folgende PV-Vorlagendefinition in die Datei, um ein entsprechendes neues CSI PV-Objekt zu definieren:
kind: PersistentVolume apiVersion: v1 metadata: name: <new-pv-name> annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: <original-pv-storage> accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: <original-pv-fs-type> volumeHandle: <original-pv-volume-ocid> nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - <original-pv-ad-location> -
Geben Sie für jede neue CSI PV-Objektdefinition Werte wie folgt an:
- Setzen Sie
metadata.nameauf eine Zeichenfolge Ihrer Wahl für den Namen des neuen CSI-PV-Objekts. - Setzen Sie
spec.capacity.storageauf die vorhandene Kapazität von FlexVolume PV. Beispiel:50Gi - Setzen Sie
spec.csi.fstypeauf den Typ des Dateisystems, das die vorhandene FlexVolume PV unterstützt. Beispiel:ext4.Tipp: Wenn Sie sich nicht sicher sind, welcher Dateisystemtyp das vorhandene FlexVolume PV sichert, geben Sie Folgendes ein:kubectl get pv <original-pv-name> -o yaml - Setzen Sie
spec.csi.volumeHandleauf die OCID des ursprünglichen Block-Volumes, das die vorhandene PV FlexVolume unterstützt. Die OCID wurde auch als Name des PV FlexVolume verwendet. Beispiel:ocid1.volume.oc1.phx.aaaaaa______xbd - Setzen Sie
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone.valuesauf die Availability-Domain für die CSI-PV, basierend auf dem Wert vonfailure-domain.beta.kubernetes.io/zoneder Flex-PV. Beispiel:PHX-AD-1.Tipp: Wenn Sie sich nicht sicher sind, welchen Wert die vorhandenefailure-domain.beta.kubernetes.io/zonevon Flex PV hat, lesen Sie die Details der PV FlexVolume, indem Sie Folgendes eingeben:kubectl get pv <original-pv-name> -o yaml
Beachten Sie, dass in der Vorlage
spec.storageClassNamebereits auf die Speicherklasse festgelegt ist, die vom CSI-Volume-Plug-in (oci-bv) verwendet wird.Beispiel:
kind: PersistentVolume apiVersion: v1 metadata: name: csi-pv-web-app-0 annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: 50Gi accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: ext4 volumeHandle: ocid1.volume.oc1.phx.aaaaaa______xbd nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - PHX-AD-1 - Setzen Sie
-
Erstellen Sie die neuen CSI PV-Objekte, indem Sie Folgendes eingeben:
kubectl apply -f <pv-manifest-filename>.yaml -
Bestätigen Sie, dass die neuen CSI PV-Objekte erstellt wurden, indem Sie Folgendes eingeben:
kubectl get pv -
Prüfen Sie, ob die Ausgabe wie folgt angezeigt wird:
- Ein neues CSI PV-Objekt für jedes FlexVolume PV-Objekt.
- Alle neuen CSI-PV-Objekte haben den Status
Available.
Schritt 3: Neue CSI-PVC-Objekte erstellen und an die CSI-PV-Objekte binden
Sie definieren jetzt ein neues CSI PVC-Objekt für jedes CSI PV-Objekt, das Sie im vorherigen Schritt erstellt haben:
- Neue PVC-Manifestdatei erstellen.
-
Kopieren Sie für jedes vorhandene FlexVolume PVC-Objekt die folgende PVC-Vorlagendefinition in die neue Datei, um ein neues CSI PVC-Objekt zu definieren:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <new-pvc-name> spec: accessModes: - ReadWriteOnce resources: requests: storage: <original-pvc-size> volumeName: <new-pv-name> storageClassName: oci-bv - Geben Sie für jede neue CSI PVC-Objektdefinition Werte wie folgt an:
- Legen Sie
metadata.namefest, um den Namen für den neuen CSI-PVC im folgenden Format anzugeben:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>Hierbei gilt:
-
<new-volumeClaimTemplates.metadata.name>ist eine Zeichenfolge Ihrer Wahl, die der erste Teil des Namens für das neue CSI-PVC ist. Die hier angegebene Zeichenfolge muss sich vom ursprünglichenvolumeClaimTemplates.metadata.name-Wert im StatefulSet-Manifest unterscheiden. In Schritt 4: Objekt StatefulSet neu erstellen, um die neuen CSI-PVC-Objekte zu verwenden aktualisieren Sie das StatefulSet-Manifest, und geben Sie diese Zeichenfolge als Wert vonvolumeClaimTemplates.metadata.namean. -
<statefulset-name>ist der Name des StatefulSet, der die Anwendung verwaltet. -
<index>ist eine Ordnungszahl, die bei 0 beginnt und für die in StatefulSet angegebene Anzahl von Replikaten um 1 erhöht wird.
-
- Setzen Sie
spec.resources.requests.storageauf denselben Wert wie für das PVC FlexVolume angegeben. Beispiel:50Gi - Setzen Sie
spec.volumeNameauf den Namen, den Sie in Schritt 2: Neue CSI-PV-Objekte erstellen und an Block-Volumes binden als Namen des neuen CSI-PV-Objekts angegeben haben.
Beachten Sie, dass in der Vorlage
spec.storageClassNamebereits auf die Speicherklasse festgelegt ist, die vom CSI-Volume-Plug-in (oci-bv) verwendet wird.Beispiel:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: storage-csi-web-app-0 spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi volumeName: csi-pv-web-app-0 storageClassName: oci-bv - Legen Sie
-
Erstellen Sie die neuen CSI-PVC-Objekte, indem Sie Folgendes eingeben:
kubectl apply -f <pvc-manifest-filename>.yaml -
Stellen Sie sicher, dass die neuen CSI-PVC-Objekte erstellt und an die CSI-PV-Objekte gebunden wurden, indem Sie Folgendes eingeben:
kubectl get pvc -
Prüfen Sie, ob die Ausgabe wie folgt angezeigt wird:
- Für jedes PVC-Objekt FlexVolume wurde ein CSI-PVC-Objekt erstellt.
- Alle CSI-PVC-Objekte haben den Status
Bound. - Jedes CSI PVC-Objekt ist an das im Manifest angegebene CSI PV-Objekt gebunden.
Schritt 4: Erstellen Sie das Objekt StatefulSet neu, um die neuen CSI-PVC-Objekte zu verwenden
- Erstellen Sie ein neues StatefulSet-Manifest, indem Sie die Datei mit dem Manifest des vorhandenen StatefulSet kopieren, und speichern Sie die neue Manifestdatei unter einem neuen Namen.
-
Aktualisieren Sie das neue Manifest, sodass die StatefulSet die neuen CSI-PVCs verwendet, die Sie in Schritt 3: Neue CSI-PVC-Objekte erstellen und an die CSI-PV-Objekte binden erstellt haben, wie folgt:
- Ändern Sie
spec.template.spec.containers.volumeMounts.namein die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben. - Ändern Sie
spec.volumeClaimTemplates.metadata.namein die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben. - Ändern Sie
spec.volumeClaimTemplates.spec.storageClassNameinoci-bv(die vom CSI-Volume-Plug-in verwendete Speicherklasse).
- Ändern Sie
-
Löschen Sie das vorhandene StatefulSet-Objekt, indem Sie Folgendes eingeben:
kubectl delete statefulsets <statefulset-name> -
Erstellen Sie ein neues StatefulSet-Objekt aus dem neuen Manifest, indem Sie Folgendes eingeben:
kubectl apply -f <statefulset-manifest-filename>
Schritt 5: Löschen Sie die ursprünglichen FlexVolume PVC- und PV-Objekte
Having changed the FlexVolume PV's persistentVolumeReclaimPolicy to Retain in Step 1: Change the reclaim policy of existing FlexVolume PV objects to "Retain", and completed the other steps in this section, you can now delete the original FlexVolume PV and PVC objects.
-
Löschen Sie für jedes FlexVolume PV-Objekt das PV-Objekt, indem Sie Folgendes eingeben:
kubectl delete pv <flexvolume-pv-name> -
Löschen Sie für jedes PVC-Objekt des Typs FlexVolume das PVC-Objekt, indem Sie Folgendes eingeben:
kubectl delete pvc <flexvolume-pvc-name>
Beispiel für die Migration einer Workload vom Volume-Plug-in FlexVolume zum CSI-Volume-Plug-in
In diesem Beispiel wird gezeigt, wie Sie eine Beispiel-Workload vom Volume-Plug-in FlexVolume zum CSI-Volume-Plug-in migrieren. Die Anweisungen in diesem Beispiel setzen eine Workload voraus, die von einem StatefulSet-Objekt namens web-app verwaltet wird.
Beispiel für StatefulSet-Workload
Anfangs verwendet StatefulSet das Volume-Plug-in FlexVolume, um Speicher bereitzustellen. Das ursprüngliche StatefulSet wird wie folgt in flex-statefulset.yaml definiert:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web-app
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
name: web
volumeMounts:
- name: storage-flex
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
name: storage-flex
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: oci
volumeMode: Filesystem
Das ursprüngliche StatefulSet-Manifest definiert:
- Der Name von StatefulSet als
web-app(Wert vonmetadata.name). - Der Name einer volumeClaimTemplate als
storage-flex(Wert vonvolumeClaimTemplates.metadata.name). - Drei Replikate (Wert von
spec.replicas).
Beim Erstellen von PVCs für eine StatefulSet verwendet Kubernetes die folgende Konvention, um die PVCs zu benennen:
<volumeClaimTemplate-name>-<StatefulSet-name>-<index>
Hierbei gilt:
-
<volumeClaimTemplate-name>ist der Name des volumeClaimTemplate, der durch den Wert vonvolumeClaimTemplates.metadata.nameim Manifest StatefulSet angegeben wird. In diesem Beispielstorage-flex. -
<StatefulSet-name>ist der Name des StatefulSet, der durch den Wert vonmetadata.nameim Manifest StatefulSet angegeben wird. In diesem Beispiel giltweb-app. -
<index>ist eine Ordnungszahl, die bei 0 beginnt und für die in StatefulSet angegebene Anzahl von Replikaten um 1 erhöht wird. In diesem Beispiel werden drei Replikate angegeben.
Als Kubernetes also die ursprünglichen FlexVolume-PVCs für die web-app StatefulSet erstellt hat, wurden drei PVCs mit den folgenden Namen erstellt:
-
storage-flex-web-app-0 -
storage-flex-web-app-1 -
storage-flex-web-app-2
Beispielschritt 1: Ändern Sie die Wiederherstellungs-Policy vorhandener FlexVolume-PV-Objekte in "Beibehalten".
-
Sie ermitteln die Namen der drei FlexVolume-PVs, die an die drei FlexVolume-PVCs in StatefulSet gebunden sind, indem Sie Folgendes eingeben:
kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE storage-flex-web-app-0 Bound ocid1.volume.oc1.phx.aaaaaa______xbd 50Gi RWO oci <unset> 9m28s storage-flex-web-app-1 Bound ocid1.volume.oc1.phx.aaaaaa______xbe 50Gi RWO oci <unset> 2m59s storage-flex-web-app-2 Bound ocid1.volume.oc1.phx.aaaaaa______xbf 50Gi RWO oci <unset> 2m3s -
Sie ändern die Rückforderungs-Policy der vorhandenen drei FlexVolume-PV-Objekte in
Retain, um zu verhindern, dass die Block-Volumes, die PVs unterstützen, während der Migration gelöscht werden, indem Sie Folgendes eingeben:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'In diesem Beispiel gilt:
kubectl patch pv ocid1.volume.oc1.phx.aaaaaa______xbd -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/ocid1.volume.oc1.phx.aaaaaa______xbd patchedkubectl patch pv ocid1.volume.oc1.phx.aaaaaa______xbe -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/ocid1.volume.oc1.phx.aaaaaa______xbe patchedkubectl patch pv ocid1.volume.oc1.phx.aaaaaa______xbf -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/ocid1.volume.oc1.phx.aaaaaa______xbf patched -
Bestätigen Sie, dass jede FlexVolume PV aktualisiert wurde, indem Sie Folgendes eingeben:
kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE ocid1.volume.oc1.phx.aaaaaa______xbd 50Gi RWO Retain Bound default/storage-flex-web-app-0 oci <unset> 13m ocid1.volume.oc1.phx.aaaaaa______xbe 50Gi RWO Retain Bound default/storage-flex-web-app-2 oci <unset> 6m8s ocid1.volume.oc1.phx.aaaaaa______xbf 50Gi RWO Retain Bound default/storage-flex-web-app-1 oci <unset> 7m8s -
Prüfen Sie, ob die Ausgabe zeigt, dass die Reclaim-Policy für jeden FlexVolume-PV auf "Beibehalten" gesetzt wurde.
Wichtig
Überprüfen Sie, ob die Rückforderungs-Policy für jeden FlexVolume-PV auf "Beibehalten" gesetzt wurde. Wenn die Wiederherstellungs-Policy nicht auf "Beibehalten" gesetzt ist, wird das Block-Volume, das die PV FlexVolume unterstützt, während der Migration gelöscht.
Beispielschritt 2: Neue CSI-PV-Objekte erstellen und an Block-Volumes binden
-
Sie erstellen eine neue PV-Manifestdatei und speichern sie als migrated-csi-pv.yaml.
-
Für jedes der drei vorhandenen FlexVolume PV-Objekte kopieren Sie die folgende PV-Vorlagendefinition in die Datei migrated-CSI-pv.yaml, um ein entsprechendes neues CSI PV-Objekt zu definieren.
kind: PersistentVolume apiVersion: v1 metadata: name: <new-pv-name> annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: <original-pv-storage> accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: <original-pv-fs-type> volumeHandle: <original-pv-volume-ocid> nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - <original-pv-ad-location> -
Für jede neue CSI PV-Objektdefinition geben Sie folgende Werte an:
- Setzen Sie
metadata.nameauf eine Zeichenfolge Ihrer Wahl für den Namen des neuen CSI-PV-Objekts. In diesem Beispiel benennen Sie die neuen CSI-PV-Objektecsi-pv-web-app-0,csi-pv-web-app-1undcsi-pv-web-app-2. - Setzen Sie
spec.capacity.storageauf die vorhandene Kapazität von FlexVolume PV. In diesem Beispiel geben Sie50Gifür alle drei neuen CSI PV-Objekte an. - Setzen Sie
spec.csi.fstypeauf den Typ des Dateisystems, das die vorhandene FlexVolume PV unterstützt. In diesem Beispiel geben Sieext4für alle drei neuen CSI PV-Objekte an. - Setzen Sie
spec.csi.volumeHandleauf die OCID des ursprünglichen Block-Volumes, das die vorhandene PV FlexVolume unterstützt. Die OCID wurde auch als Name des PV-Objekts FlexVolume verwendet. In diesem Beispiel geben Sie die folgenden OCIDs für die drei neuen CSI-PV-Objekte an:-
ocid1.volume.oc1.phx.aaaaaa______xbd -
ocid1.volume.oc1.phx.aaaaaa______xbe -
ocid1.volume.oc1.phx.aaaaaa______xbf
-
- Setzen Sie
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zoneauf die Availability-Domain für die CSI-PV, basierend auf dem Wert vonfailure-domain.beta.kubernetes.io/zoneder Flex-PV. In diesem Beispiel geben Sie die folgenden Availability-Domains für die drei neuen CSI PV-Objekte an:-
PHX-AD-1 -
PHX-AD-2 -
PHX-AD-3
-
Nach Eingabe der Informationen enthält die Datei migrated-CSI-pv.yaml die folgenden drei CSI-PV-Definitionen:
kind: PersistentVolume apiVersion: v1 metadata: name: csi-pv-web-app-0 annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: 50Gi accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: ext4 volumeHandle: ocid1.volume.oc1.phx.aaaaaa______xbd nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - PHX-AD-3 --- kind: PersistentVolume apiVersion: v1 metadata: name: csi-pv-web-app-1 annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: 50Gi accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: ext4 volumeHandle: ocid1.volume.oc1.phx.aaaaaa______xbe nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - PHX-AD-2 --- kind: PersistentVolume apiVersion: v1 metadata: name: csi-pv-web-app-2 annotations: pv.kubernetes.io/provisioned-by: blockvolume.csi.oraclecloud.com spec: storageClassName: oci-bv persistentVolumeReclaimPolicy: Retain capacity: storage: 50Gi accessModes: - ReadWriteOnce csi: driver: blockvolume.csi.oraclecloud.com fsType: ext4 volumeHandle: ocid1.volume.oc1.phx.aaaaaa______xbf nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - PHX-AD-1 - Setzen Sie
-
Sie erstellen die drei neuen CSI PV-Objekte, indem Sie Folgendes eingeben:
kubectl apply -f migrated-csi-pv.yaml persistentvolume/csi-pv-web-app-0 created persistentvolume/csi-pv-web-app-1 created persistentvolume/csi-pv-web-app-2 created -
Sie bestätigen, dass die drei neuen CSI PV-Objekte erstellt wurden, indem Sie Folgendes eingeben:
kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE csi-pv-web-app-0 50Gi RWO Retain Available oci-bv <unset> 11s csi-pv-web-app-1 50Gi RWO Retain Available oci-bv <unset> 11s csi-pv-web-app-2 50Gi RWO Retain Available oci-bv <unset> 10s ocid1.volume.oc1.phx.aaaaaa______xbd 50Gi RWO Retain Bound default/storage-flex-web-app-0 oci <unset> 23m ocid1.volume.oc1.phx.aaaaaa______xbe 50Gi RWO Retain Bound default/storage-flex-web-app-2 oci <unset> 16m ocid1.volume.oc1.phx.aaaaaa______xbf 50Gi RWO Retain Bound default/storage-flex-web-app-1 oci <unset> 17m -
Sie prüfen, ob die Ausgabe Folgendes zeigt:
- Ein neues CSI PV-Objekt für jedes der ursprünglichen FlexVolume PV-Objekte.
- Alle drei neuen CSI-PV-Objekte haben den Status
Available.
Beispielschritt 3: Neue CSI-PVC-Objekte erstellen und an die CSI-PV-Objekte binden
Sie definieren jetzt ein neues CSI PVC-Objekt für jedes CSI PV-Objekt, das Sie im vorherigen Schritt erstellt haben:
-
Sie erstellen eine neue PVC-Manifestdatei und speichern sie als migrated-csi-pvc.yaml.
-
Für jedes der drei vorhandenen PVC-Objekte FlexVolume kopieren Sie die folgende PVC-Vorlagendefinition in die Datei migrated-CSI-pvc.yaml, um ein neues CSI-PVC-Objekt zu definieren.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <new-pvc-name> spec: accessModes: - ReadWriteOnce resources: requests: storage: <original-pvc-size> volumeName: <new-pv-name> storageClassName: oci-bv -
Für jede neue CSI PVC-Objektdefinition geben Sie folgende Werte an:
-
Sie legen
metadata.namefest, um den Namen für den neuen CSI-PVC im folgenden Format anzugeben:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>Hierbei gilt:
-
<new-volumeClaimTemplates.metadata.name>ist eine Zeichenfolge Ihrer Wahl, die der erste Teil des Namens für das neue CSI-PVC ist. Die hier angegebene Zeichenfolge muss sich vom ursprünglichenvolumeClaimTemplates.metadata.name-Wert im StatefulSet-Manifest unterscheiden. In Beispielschritt 4: Erstellen Sie das Objekt StatefulSet neu, um die neuen CSI-PVC-Objekte zu verwenden aktualisieren Sie das Manifest StatefulSet, und geben Sie diese Zeichenfolge als neuen Wert vonvolumeClaimTemplates.metadata.namean. In diesem Beispiel geben Siestorage-csian. -
<statefulset-name>istweb-app(der Name von StatefulSet, der die Beispielanwendung verwaltet). -
<index>ist eine Ordnungszahl, die bei 0 beginnt und für die in StatefulSet angegebene Anzahl von Replikaten um 1 erhöht wird. In diesem Beispiel gibtweb-appStatefulSet drei Replikate an.
-
- Sie setzen
spec.resources.requests.storageauf denselben Wert wie für das PVC FlexVolume angegeben. In diesem Beispiel geben Sie50Gian. - Sie setzen
spec.volumeNameauf einen der Namen (csi-pv-web-app-0,csi-pv-web-app-1odercsi-pv-web-app-2), den Sie für die neuen CSI-PV-Objekte in Beispielschritt 2: Neue CSI-PV-Objekte erstellen und an Block-Volumes binden angegeben haben.
Nach Eingabe der Informationen enthält die Datei migrated-CSI-pvc.yaml die folgenden drei CSI-PVC-Definitionen:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: storage-csi-web-app-0 spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi volumeName: csi-pv-web-app-0 storageClassName: oci-bv --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: storage-csi-web-app-1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi volumeName: csi-pv-web-app-1 storageClassName: oci-bv --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: storage-csi-web-app-2 spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi volumeName: csi-pv-web-app-2 storageClassName: oci-bv -
-
Sie erstellen die neuen CSI-PVC-Objekte, indem Sie Folgendes eingeben:
kubectl apply -f migrated-csi-pvc.yaml persistentvolumeclaim/storage-csi-web-app-0 created persistentvolumeclaim/storage-csi-web-app-1 created persistentvolumeclaim/storage-csi-web-app-2 created -
Sie bestätigen, dass die neuen CSI-PVC-Objekte erstellt und an die CSI-PV-Objekte gebunden wurden, indem Sie Folgendes eingeben:
kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE storage-csi-web-app-0 Bound csi-pv-web-app-0 50Gi RWO oci-bv <unset> 2m32s storage-csi-web-app-1 Bound csi-pv-web-app-1 50Gi RWO oci-bv <unset> 2m31s storage-csi-web-app-2 Bound csi-pv-web-app-2 50Gi RWO oci-bv <unset> 2m31s storage-flex-web-app-0 Bound ocid1.volume.oc1.phx.aaaaaa______xbd 50Gi RWO oci <unset> 38m storage-flex-web-app-1 Bound ocid1.volume.oc1.phx.aaaaaa______xbe 50Gi RWO oci <unset> 31m storage-flex-web-app-2 Bound ocid1.volume.oc1.phx.aaaaaa______xbf 50Gi RWO oci <unset> 30m -
Sie prüfen, ob die Ausgabe Folgendes zeigt:
- Für jedes PVC-Objekt FlexVolume wurde ein CSI-PVC-Objekt erstellt.
- Alle drei CSI-PVC-Objekte haben den Status
Bound. - Jedes CSI PVC-Objekt ist an das im Manifest angegebene CSI PV-Objekt gebunden.
Beispielschritt 4: Erstellen Sie das Objekt StatefulSet neu, um die neuen CSI-PVC-Objekte zu verwenden
- Sie erstellen ein neues StatefulSet-Manifest, indem Sie die Datei mit dem Manifest des vorhandenen StatefulSet (flex-statefulset.yaml) kopieren und die neue Manifestdatei als csi.statefulset.yaml speichern.
- Sie aktualisieren das neue Manifest in csi.statefulset.yaml, sodass StatefulSet die neuen CSI-PVCs verwendet, die Sie in Beispielschritt 3: Neue CSI-PVC-Objekte erstellen und an die CSI-PV-Objekte binden erstellt haben, wie folgt:
- Sie ändern
spec.template.spec.containers.volumeMounts.nameinstorage-csi(die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben). - Sie ändern
spec.volumeClaimTemplates.metadata.nameinstorage-csi(die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben). - Sie ändern
spec.volumeClaimTemplates.spec.storageClassNameinoci-bv(die vom CSI-Volume-Plug-in verwendete Speicherklasse).
Das neue StatefulSet-Manifest in csi.statefulset.yaml sieht jetzt wie folgt aus:
apiVersion: apps/v1 kind: StatefulSet metadata: name: web-app spec: serviceName: "nginx" replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 name: web volumeMounts: - name: storage-csi mountPath: /usr/share/nginx/html volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: creationTimestamp: null name: storage-csi spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi storageClassName: oci-bv volumeMode: Filesystem - Sie ändern
-
Löschen Sie das vorhandene
web-appStatefulSet-Objekt, indem Sie Folgendes eingeben:kubectl delete statefulsets web-app statefulset.apps "web-app" deleted -
Erstellen Sie ein neues
web-appStatefulSet-Objekt aus dem neuen Manifest, indem Sie Folgendes eingeben:kubectl apply -f csi.statefulset.yaml
Beispielschritt 5: Löschen Sie die ursprünglichen PVC- und PV-Objekte FlexVolume
Having changed the FlexVolume PV's persistentVolumeReclaimPolicy to Retain in Example Step 1: Change the reclaim policy of existing FlexVolume PV objects to "Retain", and completed the other steps in this section, you can now delete the original FlexVolume PV and PVC objects.
-
Löschen Sie für jedes FlexVolume PV-Objekt das PV-Objekt, indem Sie Folgendes eingeben:
kubectl delete pv <flexvolume-pv-name>In diesem Beispiel gilt:
kubectl delete pv ocid1.volume.oc1.phx.aaaaaa______xbd persistentvolume ocid1.volume.oc1.phx.aaaaaa______xbd deletedkubectl delete pv ocid1.volume.oc1.phx.aaaaaa______xbe persistentvolume ocid1.volume.oc1.phx.aaaaaa______xbe deletedkubectl delete pv ocid1.volume.oc1.phx.aaaaaa______xbf persistentvolume ocid1.volume.oc1.phx.aaaaaa______xbf deleted -
Löschen Sie für jedes FlexVolume PVC-Objekt das PVC-Objekt, indem Sie Folgendes eingeben:
kubectl delete pvc <flexvolume-pv-name>In diesem Beispiel gilt:
kubectl delete pvc storage-flex-web-app-0 persistentvolumeclaim storage-flex-web-app-0 deletedkubectl delete pvc storage-flex-web-app-1 persistentvolumeclaim storage-flex-web-app-1 deletedkubectl delete pvc storage-flex-web-app-2 persistentvolumeclaim storage-flex-web-app-2 deleted