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.

È possibile utilizzare il plugin del volume CSI o il plugin del volume FlexVolume per connettere i cluster ai volumi a blocchi dal servizio per volumi a blocchi. Tuttavia, Oracle consiglia di utilizzare il plugin volume CSI per i seguenti motivi:
  • 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.

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"

  1. Per conoscere i nomi dei PV FlexVolume associati ai PVC FlexVolume nel file StatefulSet, immettere:

    kubectl get pvc
  2. 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"}}'
  3. Verificare che ogni PV FlexVolume sia stato aggiornato immettendo:

    kubectl get pv <volume-name>
  4. 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

  1. Creare un nuovo file manifest PV.
  2. 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>
  3. 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 esempio 50Gi
    • 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 valore failure-domain.beta.kubernetes.io/zone del PV Flex. Ad esempio, PHX-AD-1.
      Suggerimento: se non si è certi del valore del valore failure-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
  4. Creare i nuovi oggetti PV CSI immettendo:

    kubectl apply -f <pv-manifest-filename>.yaml
  5. Verificare che i nuovi oggetti PV CSI siano stati creati immettendo:

    kubectl get pv
  6. 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:

  1. Creare un nuovo file manifesto PVC.
  2. 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

  3. 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 valore volumeClaimTemplates.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 di volumeClaimTemplates.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 esempio 50Gi
    • 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
  4. Creare i nuovi oggetti in PVC CSI inserendo:

    kubectl apply -f <pvc-manifest-filename>.yaml
  5. Verificare che i nuovi oggetti in PVC CSI siano stati creati e associati agli oggetti PV CSI immettendo:

    kubectl get pvc
  6. 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

  1. 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.
  2. 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 in oci-bv (la classe di storage utilizzata dal plugin volume CSI).
  3. Eliminare l'oggetto StatefulSet esistente immettendo:

    kubectl delete statefulsets <statefulset-name>
  4. 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.

  1. Per ogni oggetto FlexVolume PV, eliminare l'oggetto PV immettendo:

    kubectl delete pv <flexvolume-pv-name>
  2. 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 di metadata.name).
  • Il nome di un volumeClaimTemplate come storage-flex (il valore di volumeClaimTemplates.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 valore volumeClaimTemplates.metadata.name nel file manifesto StatefulSet. In questo esempio, storage-flex.
  • <StatefulSet-name> è il nome del valore StatefulSet specificato dal valore metadata.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"

  1. 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              
  2. 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
  3. 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
  4. 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

  1. È possibile creare un nuovo file manifest PV e salvarlo come migrated-csi-pv.yaml.

  2. 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>
  3. 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 denominati csi-pv-web-app-0, csi-pv-web-app-1 e csi-pv-web-app-2.
    • Impostare spec.capacity.storage sulla capacità del PV FlexVolume esistente. In questo esempio, si specifica 50Gi 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 specifica ext4 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 valore failure-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
  4. 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
  5. 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
  6. 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:

  1. Creare un nuovo file manifesto in PVC e salvarlo come migrated-csi-pvc.yaml.

  2. 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
  3. 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 valore volumeClaimTemplates.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 di volumeClaimTemplates.metadata.name. In questo esempio, si specifica storage-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 specificato 50Gi
    • Impostare spec.volumeName su uno dei nomi (csi-pv-web-app-0, csi-pv-web-app-1 o csi-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
  4. È 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
  5. 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
  6. 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

  1. 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.
  2. 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 in storage-csi (la stringa scelta come prima parte dei nuovi nomi in PVC CSI).
    • Si modifica spec.volumeClaimTemplates.metadata.name in storage-csi (la stringa scelta come prima parte dei nuovi nomi in PVC CSI).
    • Si modifica spec.volumeClaimTemplates.spec.storageClassName in oci-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
  3. Eliminare l'oggetto web-app StatefulSet esistente immettendo:

    kubectl delete statefulsets web-app
    
    statefulset.apps "web-app" deleted
  4. 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.

  1. 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
  2. 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