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 Wiederherstellungs-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 FlexVolume PVC- und PV-Objekte
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.name
auf eine Zeichenfolge Ihrer Wahl für den Namen des neuen CSI-PV-Objekts. - Setzen Sie
spec.capacity.storage
auf die vorhandene Kapazität von FlexVolume PV. Beispiel:50Gi
- Setzen Sie
spec.csi.fstype
auf 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.volumeHandle
auf 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.values
auf die Availability-Domain für die CSI-PV, basierend auf dem Wert vonfailure-domain.beta.kubernetes.io/zone
der Flex-PV. Beispiel:PHX-AD-1
.Tipp: Wenn Sie sich nicht sicher sind, welchen Wert die vorhandenefailure-domain.beta.kubernetes.io/zone
von 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.storageClassName
bereits 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.name
fest, 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 Manifest StatefulSet unterscheiden. In Schritt 4: StatefulSet-Objekt für die Verwendung der neuen CSI-PVC-Objekte neu erstellen aktualisieren Sie das Manifest StatefulSet und geben diese Zeichenfolge als Wert vonvolumeClaimTemplates.metadata.name
an.<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.storage
auf denselben Wert wie für das PVC FlexVolume angegeben. Beispiel:50Gi
- Setzen Sie
spec.volumeName
auf den Namen, den Sie unter 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.storageClassName
bereits 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 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:
- Ändern Sie
spec.template.spec.containers.volumeMounts.name
in die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben. - Ändern Sie
spec.volumeClaimTemplates.metadata.name
in die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben. - Ändern Sie
spec.volumeClaimTemplates.spec.storageClassName
inoci-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.name
im Manifest StatefulSet angegeben wird. In diesem Beispielstorage-flex
.<StatefulSet-name>
ist der Name des StatefulSet, der durch den Wert vonmetadata.name
im 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 patched
kubectl patch pv ocid1.volume.oc1.phx.aaaaaa______xbe -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/ocid1.volume.oc1.phx.aaaaaa______xbe patched
kubectl 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.name
auf 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-1
undcsi-pv-web-app-2
. - Setzen Sie
spec.capacity.storage
auf die vorhandene Kapazität von FlexVolume PV. In diesem Beispiel geben Sie50Gi
für alle drei neuen CSI PV-Objekte an. - Setzen Sie
spec.csi.fstype
auf den Typ des Dateisystems, das die vorhandene FlexVolume PV unterstützt. In diesem Beispiel geben Sieext4
für alle drei neuen CSI PV-Objekte an. - Setzen Sie
spec.csi.volumeHandle
auf 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/zone
auf die Availability-Domain für die CSI-PV, basierend auf dem Wert vonfailure-domain.beta.kubernetes.io/zone
der 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.name
fest, 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 Manifest StatefulSet unterscheiden. In Beispielschritt 4: StatefulSet-Objekt für die Verwendung der neuen CSI-PVC-Objekte neu erstellen aktualisieren Sie das Manifest StatefulSet und geben diese Zeichenfolge als neuen Wert vonvolumeClaimTemplates.metadata.name
an. In diesem Beispiel geben Siestorage-csi
an.<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-app
StatefulSet drei Replikate an.
- Sie setzen
spec.resources.requests.storage
auf denselben Wert wie für das PVC FlexVolume angegeben. In diesem Beispiel geben Sie50Gi
an. - Sie setzen
spec.volumeName
auf einen der Namen (csi-pv-web-app-0
,csi-pv-web-app-1
odercsi-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:
- Sie ändern
spec.template.spec.containers.volumeMounts.name
instorage-csi
(die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben). - Sie ändern
spec.volumeClaimTemplates.metadata.name
instorage-csi
(die Zeichenfolge, die Sie als ersten Teil der neuen CSI-PVC-Namen ausgewählt haben). - Sie ändern
spec.volumeClaimTemplates.spec.storageClassName
inoci-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-app
StatefulSet-Objekt, indem Sie Folgendes eingeben:kubectl delete statefulsets web-app statefulset.apps "web-app" deleted
-
Erstellen Sie ein neues
web-app
StatefulSet-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 deleted
kubectl delete pv ocid1.volume.oc1.phx.aaaaaa______xbe persistentvolume ocid1.volume.oc1.phx.aaaaaa______xbe deleted
kubectl 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 deleted
kubectl delete pvc storage-flex-web-app-1 persistentvolumeclaim storage-flex-web-app-1 deleted
kubectl delete pvc storage-flex-web-app-2 persistentvolumeclaim storage-flex-web-app-2 deleted