Migration du module d'extension de volume FlexVolume vers le module d'extension de volume CSI
Découvrez comment migrer une charge globale Kubernetes (gérée par StatefulSet) du module d'extension de volume FlexVolume vers le module d'extension de volume CSI.
- Le projet Kubernetes en amont abandonne le module d'extension de volume FlexVolume dans la version 1.23 de Kubernetes.
- Une nouvelle fonctionnalité est uniquement ajoutée au module d'extension de volume CSI, et non au module d'extension de volume FlexVolume.
- Le module d'extension de volume CSI ne nécessite pas d'accès aux dépendances sous-jacentes du système d'exploitation et du système de fichiers racine.
Dans Kubernetes, une façon de gérer les applications avec conservation de statut nécessitant un stockage persistant consiste à utiliser des objets StatefulSet. Pour plus d'informations sur les objets StatefulSet, reportez-vous à StatefulSets dans la documentation Kubernetes.
Si vous disposez d'une application avec conservation de statut nécessitant un stockage persistant et que le service StatefulSet qui gère l'application utilise actuellement le module d'extension de volume FlexVolume pour provisionner un volume persistant, nous vous recommandons de migrer la charge globale pour utiliser le module d'extension de volume CSI à la place.
Cette section fournit les étapes génériques de migration d'une charge globale (gérée par StatefulSet) du module d'extension de volume FlexVolume vers le module d'extension de volume CSI, comme suit :
- Etape 1 : remplacez la stratégie de récupération des objets PV FlexVolume existants par "Conserver".
- Etape 2 : créer de nouveaux objets CSI PV et les lier à des volumes de blocs
- Etape 3 : Créer de nouveaux objets CSI PVC et les lier aux objets CSI PV
- Etape 4 : recréez l'objet StatefulSet pour utiliser les nouveaux objets PVC CSI
- Etape 5 : suppression des objets PVC et PV FlexVolume d'origine
Cette section comprend également un exemple complet, qui vous permet de voir les étapes de la pratique. Reportez-vous à Exemple de migration d'une charge globale du module d'extension de volume FlexVolume vers le module d'extension de volume CSI.
Notez que dans cette section :
- Les volumes persistants et les demandes de volume persistant créées par le module d'extension de volume FlexVolume sont respectivement appelés FlexVolume PV et FlexVolume PVC.
- Les volumes persistants et les demandes de volume persistant créées par le module d'extension de volume CSI sont respectivement appelées CSI PV et CSI PVC.
Etape 1 : remplacez la stratégie de récupération des objets PV FlexVolume existants par "Conserver".
-
Pour connaître les noms des PV FlexVolume qui sont liés aux PVC FlexVolume dans le fichier StatefulSet, entrez :
kubectl get pvc
-
Remplacez la stratégie de récupération des objets PV FlexVolume existants par
Retain
pour empêcher la suppression des volumes de blocs qui soutiennent les PV lors de la migration, en saisissant ce qui suit :kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
-
Vérifiez que chaque PV FlexVolume a été mis à jour en saisissant la commande suivante :
kubectl get pv <volume-name>
-
Vérifiez que la sortie indique que la stratégie de récupération a été définie sur Conserver pour chaque PV FlexVolume.
Important
Vérifiez à nouveau que la stratégie de récupération a été définie sur Conserver pour chaque PV FlexVolume. Si la stratégie de récupération n'est pas définie sur Conserver, le volume de blocs qui sauvegarde la valeur PV FlexVolume sera supprimé pendant la migration.
Etape 2 : créer de nouveaux objets CSI PV et les lier à des volumes de blocs
- Créez un fichier manifeste PV.
-
Pour chaque objet PV FlexVolume existant, copiez la définition PV de modèle suivante dans le fichier pour définir un nouvel objet PV CSI correspondant :
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>
-
Pour chaque nouvelle définition d'objet PV CSI, fournissez les valeurs suivantes :
- Définissez
metadata.name
sur une chaîne de votre choix pour le nom du nouvel objet PV CSI. - Définissez
spec.capacity.storage
sur la capacité de la PV FlexVolume existante. Par exemple :50Gi
- Définissez
spec.csi.fstype
sur le type de système de fichiers sauvegardant la valeur PV FlexVolume existante. Par exemple,ext4
.A savoir : si vous n'êtes pas sûr du type de système de fichiers qui soutienne la valeur PV FlexVolume existante, consultez les détails de la valeur PV FlexVolume en saisissant ce qui suit :kubectl get pv <original-pv-name> -o yaml
- Définissez
spec.csi.volumeHandle
sur l'OCID du volume de blocs d'origine qui sauvegarde la valeur PV FlexVolume existante. L'OCID a également été utilisé comme nom de la page PV FlexVolume. Par exemple,ocid1.volume.oc1.phx.aaaaaa______xbd
- Définissez
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone.values
sur le domaine de disponibilité pour CSI PV, en fonction de la valeurfailure-domain.beta.kubernetes.io/zone
de Flex PV. Par exemple,PHX-AD-1
.A savoir : Si vous n'êtes pas sûr de la valeurfailure-domain.beta.kubernetes.io/zone
de la variable flexible existante, consultez les détails de la variable FlexVolume en saisissant ce qui suit :kubectl get pv <original-pv-name> -o yaml
Dans le modèle,
spec.storageClassName
est déjà défini sur la classe de stockage utilisée par le module d'extension de volume CSI (oci-bv
).Par exemple :
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
- Définissez
-
Créez les nouveaux objets CSI PV en saisissant la commande suivante :
kubectl apply -f <pv-manifest-filename>.yaml
-
Vérifiez que les nouveaux objets CSI PV ont été créés en saisissant la commande suivante :
kubectl get pv
-
Vérifiez que la sortie indique :
- Nouvel objet PV CSI pour chaque objet PV FlexVolume.
- Tous les nouveaux objets PV CSI ont le statut
Available
.
Etape 3 : Créer de nouveaux objets CSI PVC et les lier aux objets CSI PV
Vous définissez maintenant un nouvel objet PVC CSI pour chaque objet PV CSI que vous avez créé à l'étape précédente :
- Créez un fichier manifeste PVC.
-
Pour chaque objet PVC FlexVolume existant, copiez la définition de PVC de modèle suivante dans le nouveau fichier pour définir un nouvel objet 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
- Pour chaque nouvelle définition d'objet PVC CSI, fournissez les valeurs suivantes :
- Définissez
metadata.name
pour indiquer le nom de la nouvelle demande de volume persistant CSI au format suivant :<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
où :
<new-volumeClaimTemplates.metadata.name>
est une chaîne de votre choix qui doit être la première partie du nom de la nouvelle demande de volume persistant CSI. La chaîne que vous indiquez ici doit être différente de la valeurvolumeClaimTemplates.metadata.name
d'origine dans le manifeste StatefulSet. A l'étape 4 : recréation de l'objet StatefulSet pour utiliser les nouveaux objets PVC CSI, vous mettez à jour le manifeste StatefulSet et indiquez cette chaîne comme valeur devolumeClaimTemplates.metadata.name
.<statefulset-name>
est le nom de StatefulSet qui gère l'application.<index>
est un nombre ordinal, commençant à 0 et incrémenté de 1 pour le nombre de répliques indiqué dans StatefulSet.
- Définissez
spec.resources.requests.storage
sur la même valeur que celle indiquée pour la demande de volume persistant FlexVolume. Par exemple,50Gi
- Définissez
spec.volumeName
sur le nom que vous avez indiqué comme nom du nouvel objet PV CSI à l'étape 2 : création de nouveaux objets PV CSI et liaison aux volumes de blocs.
Dans le modèle,
spec.storageClassName
est déjà défini sur la classe de stockage utilisée par le module d'extension de volume CSI (oci-bv
).Par exemple :
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
- Définissez
-
Créez les objets PVC CSI en saisissant ce qui suit :
kubectl apply -f <pvc-manifest-filename>.yaml
-
Vérifiez que les nouveaux objets CSI PVC ont été créés et liés aux objets CSI PV en saisissant la commande suivante :
kubectl get pvc
-
Vérifiez que la sortie indique :
- Un objet PVC CSI a été créé pour chaque objet PVC FlexVolume.
- Tous les objets PVC CSI ont le statut
Bound
. - Chaque objet PVC CSI est lié à l'objet PV CSI spécifié dans le manifeste.
Etape 4 : recréez l'objet StatefulSet pour utiliser les nouveaux objets PVC CSI
- Créez un manifeste StatefulSet en copiant le fichier contenant le manifeste du fichier StatefulSet existant, puis enregistrez le nouveau fichier manifeste sous un nouveau nom.
-
Mettez à jour le nouveau manifeste, de sorte que StatefulSet utilise les nouvelles demandes de volume persistant CSI que vous avez créées à l'Step 3 : Create new CSI PVC objects and bind them to CSI PV objects, comme suit :
- Remplacez
spec.template.spec.containers.volumeMounts.name
par la chaîne que vous avez choisie comme première partie des nouveaux noms CSI PVC. - Remplacez
spec.volumeClaimTemplates.metadata.name
par la chaîne que vous avez choisie comme première partie des nouveaux noms CSI PVC. - Remplacez
spec.volumeClaimTemplates.spec.storageClassName
paroci-bv
(classe de stockage utilisée par le module d'extension de volume CSI).
- Remplacez
-
Supprimez l'objet StatefulSet existant en saisissant ce qui suit :
kubectl delete statefulsets <statefulset-name>
-
Créez un objet StatefulSet à partir du nouveau manifeste en saisissant ce qui suit :
kubectl apply -f <statefulset-manifest-filename>
Etape 5 : suppression des objets PVC et PV FlexVolume d'origine
Après avoir remplacé la valeur persistentVolumeReclaimPolicy de FlexVolume PV par Conserver lors de l'étape 1 : modification de la stratégie de récupération des objets PV FlexVolume existants par Conserver et exécution des autres étapes de cette section, vous pouvez supprimer les objets PV et PVC FlexVolume d'origine.
-
Pour chaque objet PV FlexVolume, supprimez l'objet PV en saisissant ce qui suit :
kubectl delete pv <flexvolume-pv-name>
-
Pour chaque objet PVC FlexVolume, supprimez l'objet PVC en saisissant ce qui suit :
kubectl delete pvc <flexvolume-pvc-name>
Exemple de migration d'une charge globale du module d'extension de volume FlexVolume vers le module d'extension de volume CSI
Cet exemple montre comment migrer un exemple de charge globale du module d'extension de volume FlexVolume vers le module d'extension de volume CSI. Les instructions de cet exemple supposent une charge globale gérée par un objet StatefulSet nommé web-app
.
Exemple de charge globale StatefulSet
Initialement, StatefulSet utilise le module d'extension de volume FlexVolume pour provisionner le stockage. La valeur StatefulSet d'origine est définie dans flex-statefulset.yaml comme suit :
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
Le manifeste StatefulSet d'origine définit :
- Nom de StatefulSet en tant que
web-app
(valeur demetadata.name
). - Nom d'un élément volumeClaimTemplate en tant que
storage-flex
(valeur devolumeClaimTemplates.metadata.name
). - Trois répliques (valeur de
spec.replicas
).
Lors de la création de demandes de volume persistant pour une valeur StatefulSet, Kubernetes utilise la convention suivante pour nommer les demandes de volume persistant :
<volumeClaimTemplate-name>-<StatefulSet-name>-<index>
où :
<volumeClaimTemplate-name>
est le nom de volumeClaimTemplate spécifié par la valeur devolumeClaimTemplates.metadata.name
dans le manifeste StatefulSet. Dans cet exemple,storage-flex
.<StatefulSet-name>
est le nom de StatefulSet spécifié par la valeur demetadata.name
dans le manifeste StatefulSet. Dans cet exemple,web-app
.<index>
est un nombre ordinal, commençant à 0 et incrémenté de 1 pour le nombre de répliques indiqué dans StatefulSet. Dans cet exemple, trois répliques sont spécifiées.
Ainsi, lorsque Kubernetes a créé les demandes de volume persistant FlexVolume d'origine pour web-app
StatefulSet, il a créé trois demandes de volume persistant portant les noms suivants :
storage-flex-web-app-0
storage-flex-web-app-1
storage-flex-web-app-2
Exemple d'étape 1 : remplacez la stratégie de récupération des objets PV FlexVolume existants par "Conserver".
-
Pour connaître les noms des trois PV FlexVolume qui sont liés aux trois PVC FlexVolume dans le fichier StatefulSet, entrez :
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
-
Vous modifiez la stratégie de récupération des trois objets PV FlexVolume existants en
Retain
afin d'empêcher la suppression des volumes de blocs qui soutiennent les PV lors de la migration, en saisissant ce qui suit :kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
Dans cet exemple :
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
-
Vérifiez que chaque PV FlexVolume a été mis à jour en saisissant la commande suivante :
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
-
Vérifiez que la sortie indique que la stratégie de récupération a été définie sur Conserver pour chaque PV FlexVolume.
Important
Vérifiez à nouveau que la stratégie de récupération a été définie sur Conserver pour chaque PV FlexVolume. Si la stratégie de récupération n'est pas définie sur Conserver, le volume de blocs qui sauvegarde la valeur PV FlexVolume sera supprimé pendant la migration.
Exemple Etape 2 : créer de nouveaux objets CSI PV et les lier à des volumes de blocs
-
Créez un fichier manifeste PV et enregistrez-le sous migrated-csi-pv.yaml.
-
Pour chacun des trois objets PV FlexVolume existants, copiez la définition PV de modèle suivante dans le fichier migrated-CSI-pv.yaml pour définir un nouvel objet PV CSI correspondant.
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>
-
Pour chaque nouvelle définition d'objet PV CSI, vous devez fournir les valeurs suivantes :
- Définissez
metadata.name
sur une chaîne de votre choix pour le nom du nouvel objet PV CSI. Dans cet exemple, vous nommez les nouveaux objets PV CSIcsi-pv-web-app-0
,csi-pv-web-app-1
etcsi-pv-web-app-2
. - Définissez
spec.capacity.storage
sur la capacité de la PV FlexVolume existante. Dans cet exemple, vous indiquez50Gi
pour les trois nouveaux objets PV CSI. - Définissez
spec.csi.fstype
sur le type de système de fichiers sauvegardant la valeur PV FlexVolume existante. Dans cet exemple, vous indiquezext4
pour les trois nouveaux objets PV CSI. - Définissez
spec.csi.volumeHandle
sur l'OCID du volume de blocs d'origine qui sauvegarde la valeur PV FlexVolume existante. L'OCID a également été utilisé comme nom de l'objet PV FlexVolume. Dans cet exemple, vous indiquez les OCID suivants pour les trois nouveaux objets CSI PV :ocid1.volume.oc1.phx.aaaaaa______xbd
ocid1.volume.oc1.phx.aaaaaa______xbe
ocid1.volume.oc1.phx.aaaaaa______xbf
- Définissez
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone
sur le domaine de disponibilité pour CSI PV, en fonction de la valeurfailure-domain.beta.kubernetes.io/zone
de Flex PV. Dans cet exemple, vous indiquez les domaines de disponibilité suivants pour les trois nouveaux objets PV CSI :PHX-AD-1
PHX-AD-2
PHX-AD-3
Après avoir saisi les informations, le fichier migrated-CSI-pv.yaml contient les trois définitions CSI PV suivantes :
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
- Définissez
-
Pour créer les trois nouveaux objets CSI PV, entrez :
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
-
Vous confirmez que les trois nouveaux objets CSI PV ont été créés en saisissant la commande suivante :
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
-
Vous vérifiez que la sortie indique :
- Nouvel objet PV CSI pour chacun des objets PV FlexVolume d'origine.
- Les trois nouveaux objets PV CSI ont le statut
Available
.
Exemple Etape 3 : Créer de nouveaux objets CSI PVC et les lier aux objets CSI PV
Vous définissez maintenant un nouvel objet PVC CSI pour chaque objet PV CSI que vous avez créé à l'étape précédente :
-
Créez un fichier manifeste PVC et enregistrez-le en tant que migrated-csi-pvc.yaml.
-
Pour chacun des trois objets PVC FlexVolume existants, copiez la définition de PVC de modèle suivante dans le fichier migrated-CSI-pvc.yaml pour définir un nouvel objet 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
-
Pour chaque nouvelle définition d'objet PVC CSI, vous fournissez les valeurs suivantes :
-
Vous définissez
metadata.name
pour indiquer le nom de la nouvelle demande de volume persistant CSI au format suivant :<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
où :
<new-volumeClaimTemplates.metadata.name>
est une chaîne de votre choix qui doit être la première partie du nom de la nouvelle demande de volume persistant CSI. La chaîne que vous indiquez ici doit être différente de la valeurvolumeClaimTemplates.metadata.name
d'origine dans le manifeste StatefulSet. Dans l'exemple d'étape 4 : recréation de l'objet StatefulSet pour utiliser les nouveaux objets PVC CSI, vous mettez à jour le manifeste StatefulSet et indiquez cette chaîne comme nouvelle valeur devolumeClaimTemplates.metadata.name
. Dans cet exemple, vous indiquezstorage-csi
.<statefulset-name>
estweb-app
(nom du fichier StatefulSet qui gère l'exemple d'application).<index>
est un nombre ordinal, commençant à 0 et incrémenté de 1 pour le nombre de répliques indiqué dans StatefulSet. Dans cet exemple,web-app
StatefulSet indique trois répliques.
- Vous définissez
spec.resources.requests.storage
sur la même valeur que celle indiquée pour la demande de volume persistant FlexVolume. Dans cet exemple, vous indiquez50Gi
- Vous définissez
spec.volumeName
sur l'un des noms (csi-pv-web-app-0
,csi-pv-web-app-1
oucsi-pv-web-app-2
) que vous avez indiqués pour les nouveaux objets PV CSI dans l'exemple d'étape 2 : création de nouveaux objets PV CSI et liaison aux volumes de blocs.
Après avoir entré les informations, le fichier migrated-CSI-pvc.yaml contient les trois définitions CSI PVC suivantes :
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
-
-
Pour créer les nouveaux objets CSI PVC, entrez :
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
-
Vous confirmez que les nouveaux objets CSI PVC ont été créés et liés aux objets CSI PV en saisissant :
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
-
Vérifiez que la sortie affiche :
- Un objet PVC CSI a été créé pour chaque objet PVC FlexVolume.
- Les trois objets PVC CSI ont le statut
Bound
. - Chaque objet PVC CSI est lié à l'objet PV CSI spécifié dans le manifeste.
Exemple d'étape 4 : recréez l'objet StatefulSet pour utiliser les nouveaux objets PVC CSI
- Pour créer un manifeste StatefulSet, copiez le fichier contenant le manifeste de l'élément StatefulSet existant (flex-statefulset.yaml), puis enregistrez le nouveau fichier manifeste en tant que csi.statefulset.yaml.
- Vous mettez à jour le nouveau manifeste dans csi.statefulset.yaml, de sorte que StatefulSet utilise les nouvelles demandes de volume persistant CSI que vous avez créées dans l'exemple d'étape 3 : création de nouveaux objets de demande de volume persistant CSI et liaison aux objets PV CSI, comme suit :
- Vous remplacez
spec.template.spec.containers.volumeMounts.name
parstorage-csi
(chaîne que vous avez choisie comme première partie des nouveaux noms de demande de volume persistant CSI). - Vous remplacez
spec.volumeClaimTemplates.metadata.name
parstorage-csi
(chaîne que vous avez choisie comme première partie des nouveaux noms de demande de volume persistant CSI). - Vous remplacez
spec.volumeClaimTemplates.spec.storageClassName
paroci-bv
(classe de stockage utilisée par le module d'extension de volume CSI).
Le nouveau manifeste StatefulSet dans csi.statefulset.yaml se présente désormais comme suit :
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
- Vous remplacez
-
Supprimez l'objet
web-app
StatefulSet existant en saisissant ce qui suit :kubectl delete statefulsets web-app statefulset.apps "web-app" deleted
-
Créez un objet
web-app
StatefulSet à partir du nouveau manifeste en saisissant la commande suivante :kubectl apply -f csi.statefulset.yaml
Exemple d'étape 5 : suppression des objets PVC et PV FlexVolume d'origine
Après avoir remplacé la valeur persistentVolumeReclaimPolicy de FlexVolume PV par Conserver dans l'exemple d'étape 1 : remplacez la stratégie de récupération des objets PV FlexVolume existants par Conserver, puis effectuez les autres étapes de cette section, vous pouvez supprimer les objets PV et PVC FlexVolume d'origine.
-
Pour chaque objet PV FlexVolume, supprimez l'objet PV en saisissant ce qui suit :
kubectl delete pv <flexvolume-pv-name>
Dans cet exemple :
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
-
Pour chaque objet PVC FlexVolume, supprimez l'objet PVC en saisissant ce qui suit :
kubectl delete pvc <flexvolume-pv-name>
Dans cet exemple :
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