Migrazione dal plugin volume FlexVolume al plugin volume CSI
Scopri come eseguire la migrazione di un carico di lavoro Kubernetes (gestito da un StatefulSet) dal plugin volume FlexVolume al plugin volume CSI.
- Il progetto Kubernetes a monte non è più valido per il plugin volume FlexVolume in Kubernetes versione 1.23.
- La nuova funzionalità viene aggiunta solo al plugin del volume CSI, non al plugin del volume FlexVolume.
- Il plugin del volume CSI non richiede l'accesso alle dipendenze del sistema operativo e del file system root di base.
In Kubernetes, un modo per gestire le applicazioni con conservazione dello stato che richiedono storage persistente è utilizzare gli oggetti StatefulSet. Per ulteriori informazioni sugli oggetti StatefulSet, vedere StatefulSets nella documentazione di Kubernetes.
Se si dispone di un'applicazione con conservazione dello stato che richiede lo storage persistente e StatefulSet che gestisce l'applicazione sta attualmente utilizzando il plugin volume FlexVolume per eseguire il provisioning di un volume persistente, si consiglia di eseguire la migrazione del carico di lavoro per utilizzare il plugin volume CSI.
Questa sezione fornisce i passi generici per eseguire la migrazione di un carico di lavoro (gestito da un file StatefulSet) dal plugin volume FlexVolume al plugin volume CSI, come riportato di seguito.
- Passo 1: modificare il criterio di recupero degli oggetti PV FlexVolume esistenti in "Mantieni"
- Passo 2: creare nuovi oggetti PV CSI e associarli ai volumi a blocchi
- Passo 3: Creare nuovi oggetti in PVC CSI e legarli agli oggetti PV CSI
- Passo 4: Ricreare l'oggetto StatefulSet per utilizzare i nuovi oggetti in PVC CSI
- Passo 5: Eliminare gli oggetti originali in PVC e PV FlexVolume
Questa sezione include anche un esempio completo, che consente di visualizzare i passi nella pratica. Vedere Esempio di migrazione di un carico di lavoro dal plugin volume FlexVolume al plugin volume CSI.
Si noti che in questa sezione:
- I volumi persistenti e le richieste di volume persistenti create dal plugin volume FlexVolume vengono definiti rispettivamente FlexVolume PV e FlexVolume PVC.
- I volumi persistenti e le richieste di volume persistenti create dal plugin del volume CSI sono indicati rispettivamente come PV CSI e PVC CSI.
Passo 1: modificare il criterio di recupero degli oggetti PV FlexVolume esistenti in "Mantieni"
-
Per conoscere i nomi dei PV FlexVolume associati ai PVC FlexVolume nel file StatefulSet, immettere:
kubectl get pvc
-
Modificare il criterio di recupero degli oggetti PV FlexVolume esistenti in
Retain
per impedire l'eliminazione dei volumi a blocchi che supportano i PV durante la migrazione, immettendo:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
-
Verificare che ogni PV FlexVolume sia stato aggiornato immettendo:
kubectl get pv <volume-name>
-
Verificare che l'output mostri che il criterio di recupero è stato impostato su Conserva per ogni PV FlexVolume.
Importante
Verificare che il criterio di recupero sia stato impostato su Conserva per ogni PV FlexVolume. Se il criterio di recupero non è impostato su Conserva, il volume a blocchi che supporta il PV FlexVolume verrà eliminato durante la migrazione.
Passo 2: creare nuovi oggetti PV CSI e associarli ai volumi a blocchi
- Creare un nuovo file manifest PV.
-
Per ogni oggetto PV FlexVolume esistente, copiare la seguente definizione PV modello nel file per definire un nuovo oggetto PV CSI corrispondente:
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>
-
Per ogni nuova definizione di oggetto PV CSI, fornire i valori riportati di seguito.
- Impostare
metadata.name
su una stringa a scelta per il nome del nuovo oggetto PV CSI. - Impostare
spec.capacity.storage
sulla capacità del PV FlexVolume esistente. Ad esempio50Gi
- Impostare
spec.csi.fstype
sul tipo di file system che supporta il PV FlexVolume esistente. Ad esempio,ext4
.Suggerimento: se non si è certi del tipo di file system che supporta il PV FlexVolume esistente, vedere i dettagli del PV FlexVolume immettendo:kubectl get pv <original-pv-name> -o yaml
- Impostare
spec.csi.volumeHandle
sull'OCID del volume a blocchi originale che esegue il backup del PV FlexVolume esistente. L'OCID è stato utilizzato anche come nome del PV FlexVolume. Ad esempio,ocid1.volume.oc1.phx.aaaaaa______xbd
- Impostare
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone.values
sul dominio di disponibilità per il PV CSI, in base al valore del valorefailure-domain.beta.kubernetes.io/zone
del PV Flex. Ad esempio,PHX-AD-1
.Suggerimento: se non si è certi del valore del valorefailure-domain.beta.kubernetes.io/zone
di Flex PV esistente, vedere i dettagli del valore PV FlexVolume immettendo:kubectl get pv <original-pv-name> -o yaml
Si noti che nel modello
spec.storageClassName
è già impostato sulla classe di memorizzazione utilizzata dal plugin volume CSI (oci-bv
).Ad esempio:
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
- Impostare
-
Creare i nuovi oggetti PV CSI immettendo:
kubectl apply -f <pv-manifest-filename>.yaml
-
Verificare che i nuovi oggetti PV CSI siano stati creati immettendo:
kubectl get pv
-
Verificare che venga visualizzato quanto indicato di seguito.
- Un nuovo oggetto PV CSI per ogni oggetto PV FlexVolume.
- Tutti i nuovi oggetti PV CSI hanno lo stato
Available
.
Passo 3: Creare nuovi oggetti in PVC CSI e legarli agli oggetti PV CSI
È ora possibile definire un nuovo oggetto in PVC CSI per ogni oggetto PV CSI creato nel passo precedente:
- Creare un nuovo file manifesto PVC.
-
Per ogni oggetto in PVC FlexVolume esistente, copiare la seguente definizione di PVC modello nel nuovo file per definire un nuovo oggetto in PVC CSI:
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
- Per ogni nuova definizione di oggetto in PVC CSI, fornire i valori riportati di seguito.
- Impostare
metadata.name
per specificare il nome del nuovo PVC CSI nel seguente formato:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
Dove:
<new-volumeClaimTemplates.metadata.name>
è una stringa a scelta per essere la prima parte del nome del nuovo PVC CSI. La stringa specificata qui deve essere diversa dal valorevolumeClaimTemplates.metadata.name
originale nel file manifesto StatefulSet. In Passo 4: ricreare l'oggetto StatefulSet per utilizzare i nuovi oggetti CSI in PVC, aggiornare il file manifesto StatefulSet e specificare questa stringa come valore divolumeClaimTemplates.metadata.name
.<statefulset-name>
è il nome del file StatefulSet che gestisce l'applicazione.<index>
è un numero ordinale a partire da 0 e incrementato di 1 per il numero di repliche specificate nel file StatefulSet.
- Impostare
spec.resources.requests.storage
sullo stesso valore specificato per il PVC FlexVolume. Ad esempio50Gi
- Impostare
spec.volumeName
sul nome specificato come nome del nuovo oggetto PV CSI nel Passo 2: creare nuovi oggetti PV CSI e associarli ai volumi a blocchi.
Si noti che nel modello
spec.storageClassName
è già impostato sulla classe di memorizzazione utilizzata dal plugin volume CSI (oci-bv
).Ad esempio:
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
- Impostare
-
Creare i nuovi oggetti in PVC CSI inserendo:
kubectl apply -f <pvc-manifest-filename>.yaml
-
Verificare che i nuovi oggetti in PVC CSI siano stati creati e associati agli oggetti PV CSI immettendo:
kubectl get pvc
-
Verificare che venga visualizzato quanto indicato di seguito.
- È stato creato un oggetto in PVC CSI per ogni oggetto in PVC FlexVolume.
- Tutti gli oggetti in PVC CSI hanno lo stato
Bound
. - Ogni oggetto CSI PVC è associato all'oggetto CSI PV specificato nel file manifesto.
Passo 4: Ricreare l'oggetto StatefulSet per utilizzare i nuovi oggetti in PVC CSI
- Creare un nuovo file manifesto StatefulSet copiando il file contenente il file manifesto del file StatefulSet esistente e salvare il nuovo file manifest con un nuovo nome.
-
Aggiornare il nuovo manifesto in modo che StatefulSet utilizzi i nuovi PVC CSI creati al Passo 3: creare nuovi oggetti PVC CSI e associarli agli oggetti PV CSI, come indicato di seguito.
- Modificare
spec.template.spec.containers.volumeMounts.name
nella stringa scelta come prima parte dei nuovi nomi in PVC CSI. - Modificare
spec.volumeClaimTemplates.metadata.name
nella stringa scelta come prima parte dei nuovi nomi in PVC CSI. - Modificare
spec.volumeClaimTemplates.spec.storageClassName
inoci-bv
(la classe di storage utilizzata dal plugin volume CSI).
- Modificare
-
Eliminare l'oggetto StatefulSet esistente immettendo:
kubectl delete statefulsets <statefulset-name>
-
Creare un nuovo oggetto StatefulSet dal nuovo manifesto immettendo:
kubectl apply -f <statefulset-manifest-filename>
Passo 5: Eliminare gli oggetti originali in PVC e PV FlexVolume
Dopo aver modificato persistentVolumeReclaimPolicy di FlexVolume PV in Mantieni in Passo 1: modificare il criterio di recupero degli oggetti FlexVolume PV esistenti in "Mantieni" e aver completato gli altri passi in questa sezione, è ora possibile eliminare gli oggetti FlexVolume PV e PVC originali.
-
Per ogni oggetto FlexVolume PV, eliminare l'oggetto PV immettendo:
kubectl delete pv <flexvolume-pv-name>
-
Per ogni oggetto in PVC FlexVolume, eliminare l'oggetto in PVC immettendo:
kubectl delete pvc <flexvolume-pvc-name>
Esempio di migrazione di un carico di lavoro dal plugin volume FlexVolume al plugin volume CSI
Questo esempio mostra come eseguire la migrazione di un carico di lavoro di esempio dal plugin volume FlexVolume al plugin volume CSI. Le istruzioni riportate in questo esempio presuppongono un carico di lavoro gestito da un oggetto StatefulSet denominato web-app
.
Esempio di carico di lavoro StatefulSet
Inizialmente, StatefulSet utilizza il plugin volume FlexVolume per eseguire il provisioning dello storage. L'originale StatefulSet è definito in flex-statefulset.yaml come segue:
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
Il file manifesto StatefulSet originale definisce:
- Il nome del valore StatefulSet come
web-app
(il valore dimetadata.name
). - Il nome di un volumeClaimTemplate come
storage-flex
(il valore divolumeClaimTemplates.metadata.name
). - Tre repliche (il valore di
spec.replicas
).
Quando si creano PVC per un StatefulSet, Kubernetes utilizza la seguente convenzione per denominare i PVC:
<volumeClaimTemplate-name>-<StatefulSet-name>-<index>
Dove:
<volumeClaimTemplate-name>
è il nome del valore volumeClaimTemplate specificato dal valorevolumeClaimTemplates.metadata.name
nel file manifesto StatefulSet. In questo esempio,storage-flex
.<StatefulSet-name>
è il nome del valore StatefulSet specificato dal valoremetadata.name
nel file manifesto StatefulSet. In questo esempio,web-app
.<index>
è un numero ordinale a partire da 0 e incrementato di 1 per il numero di repliche specificate nel file StatefulSet. In questo esempio vengono specificate tre repliche.
Pertanto, quando Kubernetes ha creato i PVC FlexVolume originali per web-app
StatefulSet, ha creato tre PVC con i seguenti nomi:
storage-flex-web-app-0
storage-flex-web-app-1
storage-flex-web-app-2
Esempio Passo 1: modificare il criterio di recupero degli oggetti PV FlexVolume esistenti in "Mantieni"
-
Per conoscere i nomi dei tre PV FlexVolume associati ai tre PVC FlexVolume nel file StatefulSet, immettere:
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
-
Il criterio di recupero dei tre oggetti FlexVolume PV esistenti viene modificato in
Retain
per impedire l'eliminazione dei volumi a blocchi che supportano i PV durante la migrazione, immettendo:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
In questo esempio:
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
-
Verificare che ogni PV FlexVolume sia stato aggiornato immettendo:
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
-
Verificare che l'output indichi che il criterio di recupero è stato impostato su Conserva per ogni PV FlexVolume.
Importante
Verificare che il criterio di recupero sia stato impostato su Conserva per ogni PV FlexVolume. Se il criterio di recupero non è impostato su Conserva, il volume a blocchi che supporta il PV FlexVolume verrà eliminato durante la migrazione.
Esempio Passo 2: creare nuovi oggetti PV CSI e associarli ai volumi a blocchi
-
È possibile creare un nuovo file manifest PV e salvarlo come migrated-csi-pv.yaml.
-
Per ciascuno dei tre oggetti PV FlexVolume esistenti, copiare la seguente definizione PV modello nel file migrated-CSI-pv.yaml per definire un nuovo oggetto PV CSI corrispondente.
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>
-
Per ogni nuova definizione di oggetto PV CSI, fornire i valori riportati di seguito.
- Impostare
metadata.name
su una stringa a scelta per il nome del nuovo oggetto PV CSI. In questo esempio, i nuovi oggetti PV CSI vengono denominaticsi-pv-web-app-0
,csi-pv-web-app-1
ecsi-pv-web-app-2
. - Impostare
spec.capacity.storage
sulla capacità del PV FlexVolume esistente. In questo esempio, si specifica50Gi
per tutti e tre i nuovi oggetti PV CSI. - Impostare
spec.csi.fstype
sul tipo di file system che supporta il PV FlexVolume esistente. In questo esempio, si specificaext4
per tutti e tre i nuovi oggetti PV CSI. - Impostare
spec.csi.volumeHandle
sull'OCID del volume a blocchi originale che esegue il backup del PV FlexVolume esistente. L'OCID è stato utilizzato anche come nome dell'oggetto PV FlexVolume. In questo esempio, si specificano i seguenti OCID per i tre nuovi oggetti PV CSI:ocid1.volume.oc1.phx.aaaaaa______xbd
ocid1.volume.oc1.phx.aaaaaa______xbe
ocid1.volume.oc1.phx.aaaaaa______xbf
- Impostare
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone
sul dominio di disponibilità per il PV CSI, in base al valore del valorefailure-domain.beta.kubernetes.io/zone
del PV Flex. In questo esempio, è possibile specificare i domini di disponibilità seguenti per i tre nuovi oggetti PV CSI:PHX-AD-1
PHX-AD-2
PHX-AD-3
Dopo aver inserito le informazioni, il file migrated-CSI-pv.yaml contiene le seguenti tre definizioni PV CSI:
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
- Impostare
-
Per creare i tre nuovi oggetti PV CSI, immettere:
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
-
Confermare che i tre nuovi oggetti PV CSI sono stati creati immettendo:
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
-
Verificare che l'output mostri quanto indicato di seguito.
- Un nuovo oggetto PV CSI per ciascuno degli oggetti PV FlexVolume originali.
- Tutti e tre i nuovi oggetti PV CSI hanno lo stato
Available
.
Esempio Passo 3: Creare nuovi oggetti in PVC CSI e associarli agli oggetti PV CSI
È ora possibile definire un nuovo oggetto in PVC CSI per ogni oggetto PV CSI creato nel passo precedente:
-
Creare un nuovo file manifesto in PVC e salvarlo come migrated-csi-pvc.yaml.
-
Per ciascuno dei tre oggetti in PVC FlexVolume esistenti, copiare la seguente definizione di PVC modello nel file migrated-CSI-pvc.yaml per definire un nuovo oggetto in PVC CSI.
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
-
Per ogni nuova definizione di oggetto CSI PVC, fornire i valori riportati di seguito.
-
Impostare
metadata.name
per specificare il nome del nuovo PVC CSI nel seguente formato:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
Dove:
<new-volumeClaimTemplates.metadata.name>
è una stringa a scelta per essere la prima parte del nome del nuovo PVC CSI. La stringa specificata qui deve essere diversa dal valorevolumeClaimTemplates.metadata.name
originale nel file manifesto StatefulSet. Nel Passo di esempio 4: ricreare l'oggetto StatefulSet per utilizzare i nuovi oggetti PVC CSI, aggiornare il file manifesto StatefulSet e specificare questa stringa come nuovo valore divolumeClaimTemplates.metadata.name
. In questo esempio, si specificastorage-csi
.<statefulset-name>
èweb-app
(il nome dell'applicazione StatefulSet che gestisce l'applicazione di esempio).<index>
è un numero ordinale a partire da 0 e incrementato di 1 per il numero di repliche specificate nel file StatefulSet. In questo esempio,web-app
StatefulSet specifica tre repliche.
- Impostare
spec.resources.requests.storage
sullo stesso valore specificato per il PVC FlexVolume. In questo esempio viene specificato50Gi
- Impostare
spec.volumeName
su uno dei nomi (csi-pv-web-app-0
,csi-pv-web-app-1
ocsi-pv-web-app-2
) specificati per i nuovi oggetti PV CSI nel Passo di esempio 2: creare nuovi oggetti PV CSI e associarli ai volumi a blocchi.
Dopo aver inserito le informazioni, il file migrated-CSI-pvc.yaml contiene le seguenti tre definizioni di PVC CSI:
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
-
-
È possibile creare i nuovi oggetti in PVC CSI immettendo:
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
-
Confermare che i nuovi oggetti in PVC CSI sono stati creati e associati agli oggetti PV CSI immettendo:
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
-
Verificare che l'output mostri quanto indicato di seguito.
- È stato creato un oggetto in PVC CSI per ogni oggetto in PVC FlexVolume.
- Tutti e tre gli oggetti in PVC CSI hanno lo stato
Bound
. - Ogni oggetto CSI PVC è associato all'oggetto CSI PV specificato nel file manifesto.
Esempio Passo 4: Ricreare l'oggetto StatefulSet per utilizzare i nuovi oggetti PVC CSI
- Per creare un nuovo file manifesto StatefulSet, copiare il file contenente il file manifesto StatefulSet (flex-statefulset.yaml) esistente e salvare il nuovo file manifesto come csi.statefulset.yaml.
- Il nuovo manifesto viene aggiornato in csi.statefulset.yaml, in modo che StatefulSet utilizzi i nuovi PVC CSI creati nell'Esempio: passo 3: creare nuovi oggetti PVC CSI e associarli agli oggetti PV CSI, come indicato di seguito.
- Si modifica
spec.template.spec.containers.volumeMounts.name
instorage-csi
(la stringa scelta come prima parte dei nuovi nomi in PVC CSI). - Si modifica
spec.volumeClaimTemplates.metadata.name
instorage-csi
(la stringa scelta come prima parte dei nuovi nomi in PVC CSI). - Si modifica
spec.volumeClaimTemplates.spec.storageClassName
inoci-bv
(la classe di memorizzazione utilizzata dal plugin volume CSI).
Il nuovo file manifesto StatefulSet in csi.statefulset.yaml ora ha il seguente aspetto:
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
- Si modifica
-
Eliminare l'oggetto
web-app
StatefulSet esistente immettendo:kubectl delete statefulsets web-app statefulset.apps "web-app" deleted
-
Creare un nuovo oggetto
web-app
StatefulSet dal nuovo manifesto immettendo:kubectl apply -f csi.statefulset.yaml
Esempio Passo 5: Eliminare gli oggetti originali in PVC e PV FlexVolume
Dopo aver modificato persistentVolumeReclaimPolicy di FlexVolume PV in Mantieni in Passo di esempio 1: modificare il criterio di recupero degli oggetti FlexVolume PV esistenti in "Mantieni" e aver completato gli altri passi in questa sezione, è ora possibile eliminare gli oggetti FlexVolume PV e PVC originali.
-
Per ogni oggetto FlexVolume PV, eliminare l'oggetto PV immettendo:
kubectl delete pv <flexvolume-pv-name>
In questo esempio:
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
-
Per ogni oggetto in PVC FlexVolume, eliminare l'oggetto in PVC immettendo:
kubectl delete pvc <flexvolume-pv-name>
In questo esempio:
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