Migración del plugin de volumen FlexVolume al plugin de volumen CSI
Descubra cómo migrar una carga de trabajo de Kubernetes (gestionada por StatefulSet) del plugin de volumen FlexVolume al plugin de volumen CSI.
- El proyecto ascendente de Kubernetes descarta el plugin de volumen FlexVolume en la versión 1.23 de Kubernetes.
- La nueva funcionalidad solo se está agregando al plugin de volumen CSI, no al plugin de volumen FlexVolume.
- El plugin de volumen CSI no requiere acceso a dependencias subyacentes del sistema operativo y del sistema de archivos raíz.
En Kubernetes, una forma de gestionar aplicaciones con estado que requieren almacenamiento persistente es utilizar objetos StatefulSet. Para obtener más información sobre los objetos StatefulSet, consulte StatefulSets en la documentación de Kubernetes.
Si tiene una aplicación con estado que requiere almacenamiento persistente y StatefulSet que gestiona la aplicación está utilizando actualmente el plugin de volumen FlexVolume para aprovisionar un volumen persistente, le recomendamos que migre la carga de trabajo para utilizar el plugin de volumen CSI en su lugar.
En esta sección, se proporcionan pasos genéricos para migrar una carga de trabajo (gestionada por StatefulSet) del plugin de volumen FlexVolume al plugin de volumen CSI, de la siguiente manera:
- Paso 1: Cambie la política de reclamación de los objetos PV FlexVolume existentes a "Retener"
- Paso 2: Crear nuevos objetos CSI PV y enlazarlos a volúmenes en bloque
- Paso 3: Crear nuevos objetos CSI PVC y enlazarlos a los objetos CSI PV
- Paso 4: Vuelva a crear el objeto StatefulSet para utilizar los nuevos objetos CSI PVC
- Paso 5: Suprima los objetos PVC y PV FlexVolume originales
Esta sección también incluye un ejemplo totalmente práctico, para que pueda ver los pasos de la práctica. Consulte Ejemplo de migración de una carga de trabajo del plugin de volumen FlexVolume al plugin de volumen CSI.
Tenga en cuenta que en esta sección:
- Los volúmenes persistentes y las reclamaciones de volúmenes persistentes creadas por el plugin de volumen FlexVolume se denominan PV FlexVolume y PVC FlexVolume, respectivamente.
- Los volúmenes persistentes y las reclamaciones de volúmenes persistentes creadas por el plugin de volumen CSI se denominan PV CSI y PVC CSI respectivamente.
Paso 1: Cambie la política de reclamación de los objetos PV FlexVolume existentes a "Retener"
-
Para averiguar los nombres de los PV FlexVolume enlazados a las PVC FlexVolume en StatefulSet, introduzca:
kubectl get pvc
-
Cambie la política de reclamación de los objetos PV FlexVolume existentes a
Retain
para evitar que los volúmenes en bloque que realizan la copia de seguridad de los PV se supriman durante la migración introduciendo:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
-
Confirme que se ha actualizado cada PV FlexVolume introduciendo:
kubectl get pv <volume-name>
-
Verifique que la salida muestre que la política de reclamación se ha definido en Retener para cada PV FlexVolume.
Importante
Vuelva a comprobar que la política de reclamación se ha definido en Retener para cada PV FlexVolume. Si la política de reclamación no está definida en Retener, el volumen en bloque que realiza la copia de seguridad del PV FlexVolume se suprimirá durante la migración.
Paso 2: Crear nuevos objetos CSI PV y enlazarlos a volúmenes en bloque
- Cree un nuevo archivo de manifiesto PV.
-
Para cada objeto PV FlexVolume existente, copie la siguiente definición PV de plantilla en el archivo para definir un nuevo objeto PV CSI correspondiente:
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>
-
Para cada nueva definición de objeto CSI PV, proporcione los siguientes valores:
- Defina
metadata.name
en una cadena de su elección para el nombre del nuevo objeto PV de CSI. - Defina
spec.capacity.storage
en la capacidad de PV FlexVolume existente. Por ejemplo,50Gi
- Defina
spec.csi.fstype
en el tipo de sistema de archivos que realiza una copia de seguridad del PV FlexVolume existente. Por ejemplo,ext4
.Consejo: si no está seguro del tipo de sistema de archivos que realiza una copia de seguridad del PV FlexVolume existente, consulte los detalles del PV FlexVolume introduciendo:kubectl get pv <original-pv-name> -o yaml
- Defina
spec.csi.volumeHandle
en el OCID del volumen en bloque original que realiza la copia de seguridad del PV FlexVolume existente. El OCID también se ha utilizado como nombre del PV FlexVolume. Por ejemplo,ocid1.volume.oc1.phx.aaaaaa______xbd
- Defina
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone.values
en el dominio de disponibilidad para el PV de CSI, según el valor defailure-domain.beta.kubernetes.io/zone
del PV flexible. Por ejemplo,PHX-AD-1
.Consejo: si no está seguro del valor defailure-domain.beta.kubernetes.io/zone
del PV flexible existente, consulte los detalles del PV FlexVolume introduciendo:kubectl get pv <original-pv-name> -o yaml
Tenga en cuenta que en la plantilla,
spec.storageClassName
ya está definido en la clase de almacenamiento utilizada por el plugin de volumen CSI (oci-bv
).Por ejemplo:
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
- Defina
-
Cree los nuevos objetos PV de CSI introduciendo:
kubectl apply -f <pv-manifest-filename>.yaml
-
Confirme que los nuevos objetos PV de CSI se hayan creado introduciendo:
kubectl get pv
-
Verifique que la salida muestre:
- Un nuevo objeto PV de CSI para cada objeto PV FlexVolume.
- Todos los objetos PV de CSI nuevos tienen el estado
Available
.
Paso 3: Crear nuevos objetos CSI PVC y enlazarlos a los objetos CSI PV
Ahora definirá un nuevo objeto CSI PVC para cada objeto CSI PV que haya creado en el paso anterior:
- Cree un nuevo archivo de manifiesto de PVC.
-
Para cada objeto de PVC FlexVolume existente, copie la siguiente definición de PVC de plantilla en el nuevo archivo para definir un nuevo objeto 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
- Para cada nueva definición de objeto CSI PVC, proporcione los valores siguientes:
- Defina
metadata.name
para especificar el nombre de la nueva PVC CSI con el siguiente formato:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
donde:
<new-volumeClaimTemplates.metadata.name>
es una cadena de su elección para ser la primera parte del nombre de la nueva PVC CSI. La cadena que especifique aquí debe ser diferente al valorvolumeClaimTemplates.metadata.name
original en el manifiesto StatefulSet. En el Step 4: Recreate the StatefulSet object to use the new CSI PVC objects, actualice el manifiesto StatefulSet y especifique esta cadena como el valor devolumeClaimTemplates.metadata.name
.<statefulset-name>
es el nombre de StatefulSet que gestiona la aplicación.<index>
es un número ordinal, que comienza en 0 y se incrementa en 1 para el número de réplicas especificado en StatefulSet.
- Defina
spec.resources.requests.storage
en el mismo valor que el especificado para la PVC FlexVolume. Por ejemplo,50Gi
- Establezca
spec.volumeName
en el nombre que especificó como nombre del nuevo objeto PV de CSI en el Step 2: Create new CSI PV objects and bind them to block volume.
Tenga en cuenta que en la plantilla,
spec.storageClassName
ya está definido en la clase de almacenamiento utilizada por el plugin de volumen CSI (oci-bv
).Por ejemplo:
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
- Defina
-
Cree los nuevos objetos CSI PVC introduciendo:
kubectl apply -f <pvc-manifest-filename>.yaml
-
Confirme que los nuevos objetos CSI PVC se hayan creado y enlazado a los objetos CSI PV introduciendo:
kubectl get pvc
-
Verifique que la salida muestre:
- Se ha creado un objeto PVC CSI para cada objeto PVC FlexVolume.
- Todos los objetos PVC CSI tienen el estado
Bound
. - Cada objeto CSI PVC está enlazado al objeto CSI PV especificado en el manifiesto.
Paso 4: Vuelva a crear el objeto StatefulSet para utilizar los nuevos objetos CSI PVC
- Cree un nuevo manifiesto StatefulSet copiando el archivo que contiene el manifiesto del archivo StatefulSet existente y guarde el nuevo archivo de manifiesto con un nuevo nombre.
-
Actualice el nuevo manifiesto, de modo que StatefulSet utilice las nuevas PVC CSI que creó en el Step 3: Create new CSI PVC objects and bind them to the CSI PV objects, de la siguiente manera:
- Cambie
spec.template.spec.containers.volumeMounts.name
por la cadena que haya elegido como primera parte de los nuevos nombres PVC de CSI. - Cambie
spec.volumeClaimTemplates.metadata.name
por la cadena que haya elegido como primera parte de los nuevos nombres PVC de CSI. - Cambie
spec.volumeClaimTemplates.spec.storageClassName
aoci-bv
(la clase de almacenamiento utilizada por el plugin de volumen CSI).
- Cambie
-
Suprima el objeto StatefulSet existente introduciendo:
kubectl delete statefulsets <statefulset-name>
-
Cree un nuevo objeto StatefulSet a partir del nuevo manifiesto introduciendo:
kubectl apply -f <statefulset-manifest-filename>
Paso 5: Suprima los objetos PVC y PV FlexVolume originales
Después de haber cambiado persistentVolumeReclaimPolicy del PV FlexVolume a Retener en el Paso 1: Cambie la política de reclamación de los objetos PV FlexVolume existentes a "Retener" y haya completado los otros pasos de esta sección, ahora puede suprimir los objetos PV y PVC FlexVolume originales.
-
Para cada objeto PV FlexVolume, suprima el objeto PV introduciendo:
kubectl delete pv <flexvolume-pv-name>
-
Para cada objeto PVC FlexVolume, suprima el objeto PVC introduciendo:
kubectl delete pvc <flexvolume-pvc-name>
Ejemplo de migración de una carga de trabajo del plugin de volumen FlexVolume al plugin de volumen CSI
En este ejemplo se muestra cómo migrar una carga de trabajo de ejemplo del plugin de volumen FlexVolume al plugin de volumen CSI. En las instrucciones de este ejemplo se asume una carga de trabajo gestionada por un objeto StatefulSet denominado web-app
.
Ejemplo de carga de trabajo StatefulSet
Inicialmente, StatefulSet utiliza el plugin de volumen FlexVolume para aprovisionar el almacenamiento. El StatefulSet original se define en flex-statefulset.yaml de la siguiente manera:
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
El manifiesto StatefulSet original define:
- Nombre de StatefulSet como
web-app
(valor demetadata.name
). - Nombre de volumeClaimTemplate como
storage-flex
(valor devolumeClaimTemplates.metadata.name
). - Tres réplicas (el valor de
spec.replicas
).
Al crear PVC para StatefulSet, Kubernetes utiliza la siguiente convención para asignar un nombre a las PVC:
<volumeClaimTemplate-name>-<StatefulSet-name>-<index>
donde:
<volumeClaimTemplate-name>
es el nombre de volumeClaimTemplate especificado por el valor devolumeClaimTemplates.metadata.name
en el manifiesto StatefulSet. En este ejemplo,storage-flex
.<StatefulSet-name>
es el nombre de StatefulSet especificado por el valor demetadata.name
en el manifiesto StatefulSet. En este ejemplo,web-app
.<index>
es un número ordinal, que comienza en 0 y se incrementa en 1 para el número de réplicas especificado en StatefulSet. En este ejemplo, se especifican tres réplicas.
Por lo tanto, cuando Kubernetes creó las PVC FlexVolume originales para web-app
StatefulSet, creó tres PVC con los siguientes nombres:
storage-flex-web-app-0
storage-flex-web-app-1
storage-flex-web-app-2
Ejemplo Paso 1: Cambie la política de reclamación de los objetos PV FlexVolume existentes a "Retener"
-
Para averiguar los nombres de los tres PV FlexVolume enlazados a las tres PVC FlexVolume en StatefulSet, introduzca:
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
-
Puede cambiar la política de reclamación de los tres objetos PV FlexVolume existentes a
Retain
para evitar que los volúmenes en bloque que realizan la copia de seguridad de los PV se supriman durante la migración introduciendo:kubectl patch pv <volume-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
En este ejemplo:
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
-
Confirme que se ha actualizado cada PV FlexVolume introduciendo:
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
-
Verifique que la salida muestre que la política de reclamación se ha definido en Retener para cada PV FlexVolume.
Importante
Vuelva a comprobar que la política de reclamación se ha definido en Retener para cada PV FlexVolume. Si la política de reclamación no está definida en Retener, el volumen en bloque que realiza la copia de seguridad del PV FlexVolume se suprimirá durante la migración.
Ejemplo Paso 2: Crear nuevos objetos CSI PV y enlazarlos a volúmenes en bloque
-
Cree un nuevo archivo de manifiesto PV y guárdelo como migrado-csi-pv.yaml.
-
Para cada uno de los tres objetos PV FlexVolume existentes, copie la siguiente definición PV de plantilla en el archivo migrado-CSI-pv.yaml para definir un nuevo objeto PV CSI correspondiente.
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>
-
Para cada nueva definición de objeto CSI PV, proporcione los valores siguientes:
- Defina
metadata.name
en una cadena de su elección para el nombre del nuevo objeto PV de CSI. En este ejemplo, asigne a los nuevos objetos PV de CSI el nombrecsi-pv-web-app-0
,csi-pv-web-app-1
ycsi-pv-web-app-2
. - Defina
spec.capacity.storage
en la capacidad de PV FlexVolume existente. En este ejemplo, especifique50Gi
para los tres nuevos objetos PV de CSI. - Defina
spec.csi.fstype
en el tipo de sistema de archivos que realiza una copia de seguridad del PV FlexVolume existente. En este ejemplo, especifiqueext4
para los tres nuevos objetos PV de CSI. - Defina
spec.csi.volumeHandle
en el OCID del volumen en bloque original que realiza la copia de seguridad del PV FlexVolume existente. El OCID también se ha utilizado como nombre del objeto PV FlexVolume. En este ejemplo, especifique los siguientes OCID para los tres nuevos objetos PV de CSI:ocid1.volume.oc1.phx.aaaaaa______xbd
ocid1.volume.oc1.phx.aaaaaa______xbe
ocid1.volume.oc1.phx.aaaaaa______xbf
- Defina
spec.nodeAffinity.required.nodeSelectorTerms.matchExpressions.key: topology.kubernetes.io/zone
en el dominio de disponibilidad para el PV de CSI, según el valor defailure-domain.beta.kubernetes.io/zone
del PV flexible. En este ejemplo, se especifican los siguientes dominios de disponibilidad para los tres nuevos objetos PV de CSI:PHX-AD-1
PHX-AD-2
PHX-AD-3
Una vez introducida la información, el archivo migrado-CSI-pv.yaml contiene las siguientes tres definiciones de CSI PV:
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
- Defina
-
Para crear los tres nuevos objetos PV de CSI, introduzca:
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
-
Confirme que los tres nuevos objetos CSI PV se han creado introduciendo:
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
-
Compruebe que en la salida se muestra lo siguiente:
- Un nuevo objeto PV de CSI para cada uno de los objetos PV FlexVolume originales.
- Los tres nuevos objetos PV de CSI tienen el estado
Available
.
Ejemplo Paso 3: Crear nuevos objetos CSI PVC y enlazarlos a los objetos CSI PV
Ahora definirá un nuevo objeto CSI PVC para cada objeto CSI PV que haya creado en el paso anterior:
-
Cree un nuevo archivo de manifiesto de PVC y guárdelo como migrado-csi-pvc.yaml.
-
Para cada uno de los tres objetos PVC FlexVolume existentes, copie la siguiente definición de PVC de plantilla en el archivo migrado-CSI-pvc.yaml para definir un nuevo objeto 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
-
Para cada nueva definición de objeto CSI PVC, proporcione los valores siguientes:
-
Defina
metadata.name
para especificar el nombre de la nueva PVC CSI con el siguiente formato:<new-volumeClaimTemplates.metadata.name>-<statefulset-name>-<index>
donde:
<new-volumeClaimTemplates.metadata.name>
es una cadena de su elección para ser la primera parte del nombre de la nueva PVC CSI. La cadena que especifique aquí debe ser diferente al valorvolumeClaimTemplates.metadata.name
original en el manifiesto StatefulSet. En el Paso 4 de ejemplo: Vuelva a crear el objeto StatefulSet para utilizar los nuevos objetos PVC de CSI, actualice el manifiesto StatefulSet y especifique esta cadena como el nuevo valor devolumeClaimTemplates.metadata.name
. En este ejemplo, especifiquestorage-csi
.<statefulset-name>
esweb-app
(nombre de StatefulSet que gestiona la aplicación de ejemplo).<index>
es un número ordinal, que comienza en 0 y se incrementa en 1 para el número de réplicas especificado en StatefulSet. En este ejemplo,web-app
StatefulSet especifica tres réplicas.
- Defina
spec.resources.requests.storage
en el mismo valor que el especificado para la PVC FlexVolume. En este ejemplo, especifique50Gi
- Defina
spec.volumeName
en uno de los nombres (csi-pv-web-app-0
,csi-pv-web-app-1
ocsi-pv-web-app-2
) especificados para los nuevos objetos PV de CSI en el Paso 2 de ejemplo: Crear nuevos objetos PV de CSI y enlazarlos a volúmenes en bloque.
Una vez introducida la información, el archivo migrado-CSI-pvc.yaml contiene las siguientes tres definiciones de 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
-
-
Puede crear los nuevos objetos CSI PVC introduciendo:
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
-
Confirme que los nuevos objetos CSI PVC se han creado y enlazado a los objetos CSI PV introduciendo:
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
-
Compruebe que en la salida se muestra lo siguiente:
- Se ha creado un objeto PVC CSI para cada objeto PVC FlexVolume.
- Los tres objetos PVC CSI tienen el estado
Bound
. - Cada objeto CSI PVC está enlazado al objeto CSI PV especificado en el manifiesto.
Ejemplo Paso 4: Vuelva a crear el objeto StatefulSet para utilizar los nuevos objetos CSI PVC
- Para crear un nuevo manifiesto StatefulSet, copie el archivo que contiene el manifiesto del archivo StatefulSet existente (flex-statefulset.yaml) y guarde el nuevo archivo de manifiesto como csi.statefulset.yaml.
- Actualice el nuevo manifiesto en csi.statefulset.yaml, de modo que StatefulSet utilice las nuevas PVC CSI que creó en el Example Step 3: Create new CSI PVC objects and bind them to the CSI PV objects, de la siguiente manera:
- Cambie
spec.template.spec.containers.volumeMounts.name
astorage-csi
(la cadena que ha elegido como la primera parte de los nuevos nombres PVC de CSI). - Cambie
spec.volumeClaimTemplates.metadata.name
astorage-csi
(la cadena que ha elegido como la primera parte de los nuevos nombres PVC de CSI). - Cambie
spec.volumeClaimTemplates.spec.storageClassName
aoci-bv
(la clase de almacenamiento utilizada por el plugin de volumen CSI).
El nuevo manifiesto StatefulSet en csi.statefulset.yaml ahora tiene el siguiente aspecto:
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
- Cambie
-
Suprima el objeto
web-app
StatefulSet existente introduciendo:kubectl delete statefulsets web-app statefulset.apps "web-app" deleted
-
Cree un nuevo objeto
web-app
StatefulSet a partir del nuevo manifiesto introduciendo:kubectl apply -f csi.statefulset.yaml
Ejemplo Paso 5: Suprima los objetos PVC y PV FlexVolume originales
Después de haber cambiado persistentVolumeReclaimPolicy del PV FlexVolume a Retener en el Paso 1 de ejemplo: Cambie la política de reclamación de los objetos PV FlexVolume existentes a "Retener" y haya completado los otros pasos de esta sección, ahora puede suprimir los objetos PV y PVC FlexVolume originales.
-
Para cada objeto PV FlexVolume, suprima el objeto PV introduciendo:
kubectl delete pv <flexvolume-pv-name>
En este ejemplo:
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
-
Para cada objeto PVC FlexVolume, suprima el objeto PVC introduciendo:
kubectl delete pvc <flexvolume-pv-name>
En este ejemplo:
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