Migration du plugiciel de volume FlexVolume vers le plugiciel de volume CSI
Découvrez comment migrer une charge de travail Kubernetes (gérée par un StatefulSet) du plugiciel de volume FlexVolume vers le plugiciel de volume CSI.
- Le projet Kubernetes en amont abandonne le plugiciel de volume FlexVolume dans Kubernetes version 1.23.
- De nouvelles fonctionnalités sont uniquement ajoutées au plugiciel de volume CSI, et non au plugiciel de volume FlexVolume.
- Le plugiciel de volume CSI ne nécessite pas l'accès au système d'exploitation sous-jacent ni aux dépendances du système de fichiers racine.
Dans Kubernetes, une façon de gérer les applications avec état qui nécessitent un stockage persistant est d'utiliser des objets StatefulSet. Pour plus d'informations sur les objets StatefulSet, voir StatefulSets dans la documentation sur Kubernetes.
Si vous avez une application avec état qui nécessite un stockage persistant et que StatefulSet qui gère l'application utilise actuellement le plugiciel de volume FlexVolume pour provisionner un volume persistant, nous vous recommandons de migrer la charge de travail pour utiliser le plugiciel de volume CSI à la place.
Cette section fournit des étapes génériques pour migrer une charge de travail (gérée par un StatefulSet) du plugiciel de volume FlexVolume vers le plugiciel de volume CSI, comme suit :
- Étape 1 : Modifier la politique de récupération des objets PV FlexVolume existants à "Conserver"
- Étape 2 : Créer de nouveaux objets PV CSI et les lier aux volumes par blocs
- Étape 3 : Créer de nouveaux objets CSI PVC et les lier aux objets CSI PV
- Étape 4 : Recréez l'objet StatefulSet pour utiliser les nouveaux objets de revendication de volume persistant CSI
- Étape 5 : Supprimer les objets PVC et PV FlexVolume d'origine
Cette section comprend également un exemple de travail complet, afin que vous puissiez voir les étapes dans la pratique. Voir Exemple de migration d'une charge de travail du plugiciel de volume FlexVolume vers le plugiciel de volume CSI.
Notez que dans cette section :
- Les revendications de volumes persistants et de volumes persistants créés par le plugiciel de volume FlexVolume sont appelées FlexVolume PVs et FlexVolume PVCs respectivement.
- Les volumes persistants et les revendications de volume persistants créés par le plugiciel de volume CSI sont appelés PV CSI et PVC CSI respectivement.
Étape 1 : Modifier la politique de récupération des objets PV FlexVolume existants à "Conserver"
-
Recherchez les noms des PV FlexVolume qui sont liés aux PVC FlexVolume dans StatefulSet en entrant :
kubectl get pvc
-
Remplacez la politique de récupération des objets PV FlexVolume existants par
Retain
pour empêcher la suppression des volumes par blocs qui soutiennent les PV lors de la migration, en entrant :kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
-
Confirmez que chaque PV FlexVolume a été mis à jour, en entrant :
kubectl get pv <volume-name>
-
Vérifiez que la sortie indique que la politique de récupération a été réglée à Conserver pour chaque point de vue FlexVolume.
Important
Vérifiez que la politique de récupération a été réglée à Conserver pour chaque point de vente FlexVolume. Si la politique de récupération n'est pas réglée à Conserver, le volume par blocs qui sauvegarde le PV FlexVolume est supprimé lors de la migration.
Étape 2 : Créer de nouveaux objets PV CSI et les lier aux volumes par blocs
- Créez un fichier manifeste PV.
-
Pour chaque objet PV FlexVolume existant, copiez la définition de 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 :
- Réglez
metadata.name
à une chaîne de votre choix pour le nom du nouvel objet PV CSI. - Réglez
spec.capacity.storage
à la capacité du point de vue FlexVolume existant. Par exemple,50Gi
- Réglez
spec.csi.fstype
au type de système de fichiers qui sauvegarde le point de vue FlexVolume existant. Par exemple :ext4
.Conseil : Si vous n'êtes pas sûr du type de système de fichiers qui sauvegarde le point de vue FlexVolume existant, voir les détails du point de vue FlexVolume en entrant :kubectl get pv <original-pv-name> -o yaml
- Réglez
spec.csi.volumeHandle
à l'OCID du volume par blocs initial soutenant le volume FlexVolume existant. L'OCID a également été utilisé comme nom du point de vue FlexVolume. Par exemple,ocid1.volume.oc1.phx.aaaaaa______xbd
- Réglez
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone.values
au domaine de disponibilité pour le PV CSI, en fonction de la valeur du PV Flexfailure-domain.beta.kubernetes.io/zone
. Par exemple :PHX-AD-1
.Conseil : Si vous n'êtes pas sûr de la valeur de la valeurfailure-domain.beta.kubernetes.io/zone
de la fonction PV Flex existante, consultez les détails de la fonction PV FlexVolume en entrant :kubectl get pv <original-pv-name> -o yaml
Notez que dans le modèle,
spec.storageClassName
est déjà réglé à la classe de stockage utilisée par le plugiciel 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
- Réglez
-
Créez les nouveaux objets PV CSI en entrant :
kubectl apply -f <pv-manifest-filename>.yaml
-
Vérifiez que les nouveaux objets PV CSI ont été créés en entrant :
kubectl get pv
-
Vérifiez que la sortie affiche :
- Nouvel objet PV CSI pour chaque objet PV FlexVolume.
- Tous les nouveaux objets PV CSI ont le statut
Available
.
Étape 3 : Créer de nouveaux objets CSI PVC et les lier aux objets CSI PV
Vous allez maintenant définir un nouvel objet PVC CSI pour chaque objet PV CSI que vous avez créé à l'étape précédente :
- Créez un fichier manifeste de PVC.
-
Pour chaque objet de revendication de volume persistant FlexVolume existant, copiez la définition de revendication de volume persistant de modèle suivante dans le nouveau fichier pour définir un nouvel objet de revendication de volume persistant 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 de revendication de volume persistant CSI, fournissez les valeurs suivantes :
- Définissez
metadata.name
pour spécifier le nom de la nouvelle revendication de volume persistant CSI dans le format suivant :<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
où :
<new-volumeClaimTemplates.metadata.name>
est une chaîne de votre choix pour être la première partie du nom de la nouvelle revendication de volume persistant CSI. La chaîne que vous spécifiez ici doit être différente de la valeurvolumeClaimTemplates.metadata.name
initiale dans le manifeste StatefulSet. À l'étape 4 : Recréez l'objet StatefulSet pour utiliser les nouveaux objets de revendication de volume persistant CSI, vous mettez à jour le manifeste StatefulSet et spécifiez 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 spécifié dans StatefulSet.
- Réglez
spec.resources.requests.storage
à la même valeur que celle spécifiée pour la revendication de volume persistant FlexVolume. Par exemple,50Gi
- Réglez
spec.volumeName
au nom que vous avez spécifié en tant que nom du nouvel objet PV CSI à l'étape 2 : Créer de nouveaux objets PV CSI et les lier aux volumes par blocs.
Notez que dans le modèle,
spec.storageClassName
est déjà réglé à la classe de stockage utilisée par le plugiciel 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 nouveaux objets de PVC CSI en entrant :
kubectl apply -f <pvc-manifest-filename>.yaml
-
Vérifiez que les nouveaux objets de PVC CSI ont été créés et liés aux objets PV CSI en entrant :
kubectl get pvc
-
Vérifiez que la sortie affiche :
- Un objet de revendication de volume persistant CSI a été créé pour chaque objet de revendication de volume persistant FlexVolume.
- Tous les objets de revendication de volume persistant CSI ont le statut
Bound
. - Chaque objet PVC CSI est lié à l'objet PV CSI spécifié dans le manifeste.
Étape 4 : Recréez l'objet StatefulSet pour utiliser les nouveaux objets de revendication de volume persistant CSI
- Créez un nouveau manifeste StatefulSet en copiant le fichier contenant le manifeste du fichier StatefulSet existant et enregistrez le nouveau fichier manifeste sous un nouveau nom.
-
Mettez à jour le nouveau manifeste, de sorte que StatefulSet utilise les nouvelles PVC CSI que vous avez créées à l'étape 3 : Créer de nouveaux objets de PVC CSI et les lier aux objets PV CSI, comme suit :
- Remplacez
spec.template.spec.containers.volumeMounts.name
par la chaîne que vous avez sélectionnée comme première partie des nouveaux noms de revendication de volume persistant CSI. - Remplacez
spec.volumeClaimTemplates.metadata.name
par la chaîne que vous avez sélectionnée comme première partie des nouveaux noms de revendication de volume persistant CSI. - Remplacez
spec.volumeClaimTemplates.spec.storageClassName
paroci-bv
(classe de stockage utilisée par le plugiciel de volume CSI).
- Remplacez
-
Supprimez l'objet StatefulSet existant en entrant :
kubectl delete statefulsets <statefulset-name>
-
Créez un nouvel objet StatefulSet à partir du nouveau manifeste en entrant :
kubectl apply -f <statefulset-manifest-filename>
Étape 5 : Supprimer les objets PVC et PV FlexVolume d'origine
Après avoir modifié la valeur persistentVolumeReclaimPolicy de la valeur FlexVolume pour Conserver à l'étape 1 : Modifier la politique de récupération des objets PV FlexVolume existants à "Conserver" et terminé les autres étapes de cette section, vous pouvez maintenant supprimer les objets PV et PVC FlexVolume initiaux.
-
Pour chaque objet PV FlexVolume, supprimez l'objet PV en entrant :
kubectl delete pv <flexvolume-pv-name>
-
Pour chaque objet PVC FlexVolume, supprimez l'objet PVC en entrant :
kubectl delete pvc <flexvolume-pvc-name>
Exemple de migration d'une charge de travail du plugiciel de volume FlexVolume vers le plugiciel de volume CSI
Cet exemple montre comment migrer un exemple de charge de travail du plugiciel de volume FlexVolume vers le plugiciel de volume CSI. Les instructions de cet exemple supposent une charge de travail gérée par un objet StatefulSet nommé web-app
.
Exemple de charge de travail StatefulSet
Initialement, StatefulSet utilise le plugiciel de volume FlexVolume pour provisionner le stockage. La valeur StatefulSet initiale 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 initial définit :
- Nom de StatefulSet en tant que
web-app
(valeur demetadata.name
). - Nom d'une valeur volumeClaimTemplate en tant que
storage-flex
(valeur devolumeClaimTemplates.metadata.name
). - Trois répliques (valeur de
spec.replicas
).
Lors de la création d'une revendication de volume persistant pour une instance StatefulSet, Kubernetes utilise la convention suivante pour nommer les revendications 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 spécifié dans StatefulSet. Dans cet exemple, trois répliques sont spécifiées.
Ainsi, lorsque Kubernetes a créé les PVC FlexVolume d'origine pour web-app
StatefulSet, il a créé trois PVC avec les noms suivants :
storage-flex-web-app-0
storage-flex-web-app-1
storage-flex-web-app-2
Exemple Étape 1 : Modifier la politique de récupération des objets PV FlexVolume existants à "Conserver"
-
Pour connaître les noms des trois PV FlexVolume qui sont liés aux trois PVC FlexVolume dans 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 remplacez la politique de récupération des trois objets PV FlexVolume existants par
Retain
pour empêcher la suppression des volumes par blocs qui soutiennent les PV lors de la migration, en entrant :kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
Dans ce cas :
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
-
Confirmez que chaque PV FlexVolume a été mis à jour, en entrant :
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 politique de récupération a été réglée à Conserver pour chaque point de vue FlexVolume.
Important
Vérifiez que la politique de récupération a été réglée à Conserver pour chaque point de vente FlexVolume. Si la politique de récupération n'est pas réglée à Conserver, le volume par blocs qui sauvegarde le PV FlexVolume est supprimé lors de la migration.
Exemple Étape 2 : Créer de nouveaux objets PV CSI et les lier aux volumes par blocs
-
Vous créez un nouveau fichier manifeste PV et l'enregistrez sous le nom migrated-csi-pv.yaml.
-
Pour chacun des trois objets PV FlexVolume existants, vous copiez la définition de PV de modèle suivante dans le fichier migré-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 fournissez les valeurs suivantes :
- Réglez
metadata.name
à 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
. - Réglez
spec.capacity.storage
à la capacité du point de vue FlexVolume existant. Dans cet exemple, vous spécifiez50Gi
pour les trois nouveaux objets PV CSI. - Réglez
spec.csi.fstype
au type de système de fichiers qui sauvegarde le point de vue FlexVolume existant. Dans cet exemple, vous spécifiezext4
pour les trois nouveaux objets PV CSI. - Réglez
spec.csi.volumeHandle
à l'OCID du volume par blocs initial soutenant le volume FlexVolume existant. L'OCID a également été utilisé comme nom de l'objet PV FlexVolume. Dans cet exemple, vous spécifiez les OCID suivants pour les trois nouveaux objets PV CSI :ocid1.volume.oc1.phx.aaaaaa______xbd
ocid1.volume.oc1.phx.aaaaaa______xbe
ocid1.volume.oc1.phx.aaaaaa______xbf
- Réglez
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone
au domaine de disponibilité pour le PV CSI, en fonction de la valeur du PV Flexfailure-domain.beta.kubernetes.io/zone
. Dans cet exemple, vous spécifiez les domaines de disponibilité suivants pour les trois nouveaux objets PV CSI :PHX-AD-1
PHX-AD-2
PHX-AD-3
Après avoir entré les informations, le fichier migrated-CSI-pv.yaml contient les trois définitions PV CSI 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
- Réglez
-
Vous créez les trois nouveaux objets PV CSI en entrant :
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 PV CSI ont été créés en entrant :
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 affiche :
- Nouvel objet PV CSI pour chacun des objets PV FlexVolume d'origine.
- Les trois nouveaux objets PV CSI ont le statut
Available
.
Exemple Étape 3 : Créer de nouveaux objets PVC CSI et les lier aux objets PV CSI
Vous allez maintenant définir un nouvel objet PVC CSI pour chaque objet PV CSI que vous avez créé à l'étape précédente :
-
Vous créez un nouveau fichier manifeste de revendication de volume persistant et vous l'enregistrez sous le nom migrated-csi-pvc.yaml.
-
Pour chacun des trois objets de PVC FlexVolume existants, vous copiez la définition de PVC de modèle suivante dans le fichier migré-CSI-pvc.yaml pour définir un nouvel objet de 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 de PVC CSI, vous fournissez les valeurs suivantes :
-
Vous définissez
metadata.name
pour spécifier le nom de la nouvelle revendication de volume persistant CSI dans le format suivant :<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
où :
<new-volumeClaimTemplates.metadata.name>
est une chaîne de votre choix pour être la première partie du nom de la nouvelle revendication de volume persistant CSI. La chaîne que vous spécifiez ici doit être différente de la valeurvolumeClaimTemplates.metadata.name
initiale dans le manifeste StatefulSet. Dans l'Exemple d'étape 4 : Recréez l'objet StatefulSet pour utiliser les nouveaux objets de revendication de volume persistant CSI, vous mettez à jour le manifeste StatefulSet et spécifiez cette chaîne en tant que nouvelle valeur devolumeClaimTemplates.metadata.name
. Dans cet exemple, vous spécifiezstorage-csi
.<statefulset-name>
estweb-app
(nom de l'application 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 spécifié dans StatefulSet. Dans cet exemple,web-app
StatefulSet spécifie trois répliques.
- Vous réglez
spec.resources.requests.storage
à la même valeur que celle spécifiée pour la revendication de volume persistant FlexVolume. Dans cet exemple, vous spécifiez50Gi
- Vous réglez
spec.volumeName
à l'un des noms (csi-pv-web-app-0
,csi-pv-web-app-1
oucsi-pv-web-app-2
) que vous avez spécifiés pour les nouveaux objets PV CSI dans Exemple d'étape 2 : Créer de nouveaux objets PV CSI et les lier aux volumes par blocs.
Après avoir entré les informations, le fichier migrated-CSI-pvc.yaml contient les trois définitions de PVC CSI 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
-
-
Vous créez de nouveaux objets de PVC CSI en entrant :
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 de PVC CSI ont été créés et liés aux objets PV CSI en entrant :
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
-
Vous vérifiez que la sortie affiche :
- Un objet de revendication de volume persistant CSI a été créé pour chaque objet de revendication de volume persistant FlexVolume.
- Les trois objets de PVC CSI ont le statut
Bound
. - Chaque objet PVC CSI est lié à l'objet PV CSI spécifié dans le manifeste.
Exemple Étape 4 : Recréez l'objet StatefulSet pour utiliser les nouveaux objets de revendication de volume persistant CSI
- Vous créez un nouveau manifeste StatefulSet en copiant le fichier contenant le manifeste du fichier StatefulSet existant (flex-statefulset.yaml) et en enregistrant le nouveau fichier manifeste sous csi.statefulset.yaml.
- Vous mettez à jour le nouveau manifeste dans csi.statefulset.yaml, de sorte que StatefulSet utilise les nouvelles PVC CSI que vous avez créées à l'Exemple d'étape 3 : Créer de nouveaux objets PVC CSI et les lier aux objets PV CSI, comme suit :
- Vous remplacez
spec.template.spec.containers.volumeMounts.name
parstorage-csi
(chaîne que vous avez sélectionnée comme première partie des nouveaux noms de revendication de volume persistant CSI). - Vous remplacez
spec.volumeClaimTemplates.metadata.name
parstorage-csi
(chaîne que vous avez sélectionnée comme première partie des nouveaux noms de revendication de volume persistant CSI). - Vous remplacez
spec.volumeClaimTemplates.spec.storageClassName
paroci-bv
(classe de stockage utilisée par le plugiciel de volume CSI).
Le nouveau manifeste StatefulSet dans csi.statefulset.yaml se présente maintenant 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 entrant :kubectl delete statefulsets web-app statefulset.apps "web-app" deleted
-
Créez un nouvel objet
web-app
StatefulSet à partir du nouveau manifeste en entrant :kubectl apply -f csi.statefulset.yaml
Exemple Étape 5 : Supprimer les objets PVC et PV FlexVolume d'origine
Après avoir modifié persistentVolumeReclaimPolicy de la valeur PV FlexVolume pour Conserver dans Exemple d'étape 1 : Modifier la politique de récupération des objets PV FlexVolume existants à "Conserver" et terminé les autres étapes de cette section, vous pouvez maintenant supprimer les objets PV et PVC FlexVolume initiaux.
-
Pour chaque objet PV FlexVolume, vous supprimez l'objet PV en entrant :
kubectl delete pv <flexvolume-pv-name>
Dans ce cas :
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, vous supprimez l'objet PVC en entrant :
kubectl delete pvc <flexvolume-pv-name>
Dans ce cas :
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