Provisionnement des demandes de volume persistant dans le service Block Volume

Découvrez comment provisionner des demandes de volume persistant pour les clusters créés à l'aide de Kubernetes Engine (OKE) en associant des volumes à partir du service Block Volume.

Le service Oracle Cloud Infrastructure Block Volume (service Block Volume) fournit un stockage de blocs persistant, durable et hautes performances pour vos données. Vous pouvez utiliser le module d'extension de volume CSI ou FlexVolume pour connecter des clusters à des volumes du service Block Volume. Oracle recommande d'utiliser le module d'extension de volume CSI pour les raisons suivantes :
  • La nouvelle fonctionnalité est uniquement ajoutée au module d'extension de volume CSI, et non au module d'extension de volume FlexVolume (même si les développeurs Kubernetes continueront de gérer le 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.
Remarque

Le projet Kubernetes en amont est en phase d'abandon du module d'extension de volume FlexVolume dans Kubernetes version 1.23. La suppression de la fonctionnalité respectera les directives de la stratégie d'abandon de Kubernetes.

Nous vous recommandons de migrer les charges globales existantes du module d'extension de volume FlexVolume vers le module d'extension de volume CSI. Pour obtenir des instructions sur la migration, reportez-vous à Migration du module d'extension de volume FlexVolume vers le module d'extension de volume CSI.

La classe de stockage spécifiée pour une demande de volume persistant détermine le module d'extension de volume à utiliser pour la connexion aux volumes de service Block Volume. Deux classes de stockage sont définies par défaut, oci-bv pour le module d'extension de volume CSI et oci pour le module d'extension FlexVolume. Si vous n'indiquez pas explicitement de valeur pour storageClassName dans le fichier YAML qui définit la PVC, la classe de stockage par défaut du cluster est utilisée. La classe de stockage par défaut du cluster est initialement définie en fonction de la version de Kubernetes indiquée lors de la création du cluster, comme suit :

  • Dans les clusters créés par Kubernetes Engine pour exécuter Kubernetes version 1.24 (ou ultérieure), la classe de stockage oci-bv est initialement définie comme valeur par défaut. La classe de stockage oci-bv est utilisée par le module d'extension de volume CSI.
  • Dans les clusters créés par Kubernetes Engine pour exécuter Kubernetes version 1.23 (ou antérieure), la classe de stockage oci est initialement définie comme valeur par défaut. La classe de stockage oci est utilisée par le module d'extension de volume FlexVolume.
Remarque

Dans les clusters créés à l'origine par Kubernetes Engine pour exécuter Kubernetes version 1.23 (ou antérieure), puis mis à niveau vers Kubernetes version 1.24 (ou ultérieure), la classe de stockage par défaut n'est pas modifiée lors du processus de mise à niveau. Par conséquent, si la classe de stockage par défaut était oci avant la mise à niveau, la classe de stockage par défaut continue d'être oci après la mise à niveau.

Si vous voulez que oci-bv au lieu de oci soit la classe de stockage par défaut d'un cluster que vous avez mis à niveau de Kubernetes version 1.23 (ou antérieure) vers Kubernetes version 1.24 (ou ultérieure), modifiez la classe de stockage par défaut comme suit :

  1. Indiquez que oci n'est pas la classe de stockage par défaut en saisissant ce qui suit :
    kubectl patch storageclass oci -p '{"metadata": {"annotations": {"storageclass.beta.kubernetes.io/is-default-class":"false"}}}'
  2. Indiquez que oci-bv est la classe de stockage par défaut en saisissant ce qui suit :
    kubectl patch storageclass oci-bv -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class":"true"}}}'

Dans le cas du module d'extension de volume CSI, la fonctionnalité de topologie CSI garantit que les noeuds de processus actifs et les volumes se trouvent dans le même domaine de disponibilité. Dans le cas du module d'extension de volume FlexVolume, vous pouvez utiliser l'élément matchLabels pour sélectionner le domaine de disponibilité dans lequel une demande de volume persistant est provisionnée. Vous n'utilisez pas l'élément matchLabels avec le module d'extension de volume CSI.

Quel que soit le module d'extension de volume que vous choisissez d'utiliser, si un cluster se trouve dans un compartiment différent de celui de ses noeuds de processus actif, vous devez créer une stratégie supplémentaire pour permettre l'accès aux volumes du service Block Volume. Cette situation survient lorsque le sous-réseau indiqué pour un pool de noeuds appartient à un compartiment différent de celui du cluster. Pour permettre aux noeuds de processus actif d'accéder aux volumes du service Block Volume, créez la stratégie supplémentaire avec les deux instructions de stratégie ci-dessous :

  • ALLOW any-user to manage volumes in TENANCY where request.principal.type = 'cluster'
  • ALLOW any-user to manage volume-attachments in TENANCY where request.principal.type = 'cluster'

Afin de spécifier explicitement le module d'extension de volume à utiliser pour la connexion au service Block Volume lors du provisionnement d'une demande de volume persistant, indiquez la valeur de storageClassName dans le fichier YAML définissant la demande :

  • Pour utiliser le module d'extension de volume CSI, indiquez storageClassName: "oci-bv".
  • Pour utiliser le module d'extension de volume FlexVolume, indiquez storageClassName: "oci".

Tenez compte des éléments suivants :

  • La quantité minimale de stockage persistant qu'une demande de volume persistant peut demander est de 50 Go. Si la demande est inférieure à 50 Go, elle est arrondie à 50 Go.
  • Pour pouvoir augmenter la quantité de stockage persistant qu'une demande de volume persistant peut demander, définissez allowVolumeExpansion: true dans la définition de la classe de stockage indiquée pour la demande de volume persistant. Reportez-vous à Développement d'un volume de blocs.
  • Lorsque vous créez un cluster, vous pouvez éventuellement définir des balises à appliquer aux volumes de blocs créés lorsque des demandes de volume persistant (PVC) sont définies. Le balisage vous permet de regrouper des ressources disparates entre différents compartiments, ainsi que d'annoter des ressources avec vos propres métadonnées. Reportez-vous à Application de balises aux volumes de blocs.
  • Après avoir créé une demande de volume persistant sur un nouveau volume de blocs à l'aide du module d'extension de volume CSI, vous pouvez visualiser les statistiques de capacité du volume de blocs à l'aide d'un outil d'agrégation de mesures (tel que Prométhée), notamment :
    • kubelet_volume_stats_available_bytes
    • kubelet_volume_stats_capacity_bytes
    • kubelet_volume_stats_inodes
    • kubelet_volume_stats_inodes_free
    • kubelet_volume_stats_inodes_used
    • kubelet_volume_stats_used_bytes

Création d'une demande de volume persistant sur un volume de blocs à l'aide du module d'extension de volume CSI

Vous pouvez provisionner un volume de blocs de façon dynamique à l'aide du module d'extension CSI indiqué par la définition de la classe de stockage oci-bv (provisioner: blockvolume.csi.oraclecloud.com). Par exemple, si l'administrateur de cluster n'a créé aucun volume persistant correspondant à la demande.

Définissez une demande de volume persistant dans un fichier appelé csi-bvs-pvc.yaml. Par exemple :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mynginxclaim
spec:
  storageClassName: "oci-bv"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

Entrez la commande suivante pour créer la demande de volume persistant à partir du fichier csi-bvs-pvc.yaml :

kubectl create -f  csi-bvs-pvc.yaml

La sortie de la commande ci-dessus confirme la création de la demande de volume persistant :

persistentvolumeclaim "mynginxclaim" created

Vérifiez que la demande de volume persistant a été créée en exécutant kubectl get pvc :

kubectl get pvc

La sortie de la commande ci-dessus indique le statut en cours de la demande de volume persistant :

		
NAME               STATUS   VOLUME   CAPACITY   ACCESSMODES   STORAGECLASS   AGE
mynginxclaim       Pending                                    oci-bv         4m

La PVC a le statut Pending car la définition de la classe de stockage oci-bv inclut volumeBindingMode: WaitForFirstConsumer.

Vous pouvez utiliser cette demande de volume persistant lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante, qui indique au système d'utiliser la demande de volume persistant mynginxclaim comme volume nginx, monté par le pod dans /data.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - name: http
          containerPort: 80
      volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: mynginxclaim

Après avoir créé le pod, vous pouvez vérifier que la demande de volume persistant a été liée à un nouveau volume persistant en saisissant la commande suivante :

kubectl get pvc

La sortie de la commande ci-dessus confirme que la demande de volume persistant a été liée :

			
NAME               STATUS    VOLUME                               CAPACITY   ACCESSMODES   STORAGECLASS   AGE
mynginxclaim       Bound     ocid1.volume.oc1.iad.<unique_ID>     50Gi       RWO           oci-bv         4m

Vous pouvez vérifier que le pod utilise la nouvelle demande de volume persistant en saisissant ce qui suit :

kubectl describe pod nginx

Vous pouvez afficher les statistiques de capacité du nouveau volume persistant à l'aide d'un outil d'agrégation de mesures tel que Prometheus.

Création d'un cliché de volume à partir d'une sauvegarde de volume de blocs à l'aide du module d'extension de volume CSI

Un instantané de volume Kubernetes est un instantané d'un volume persistant sur un système de stockage. Vous pouvez utiliser un instantané de volume pour provisionner un nouveau volume persistant. Pour plus d'informations sur les instantanés de volume Kubernetes, reportez-vous à Instantanés de volume dans la documentation Kubernetes.

Lorsque vous utilisez le module d'extension de volume CSI pour connecter des clusters à des volumes de blocs dans le service Block Volume, vous pouvez utiliser des sauvegardes de volume de blocs pour provisionner des clichés de volume Kubernetes. Vous pouvez utiliser un cliché de volume pour créer un volume de blocs et le préremplir avec les données de la sauvegarde de volume de blocs. Pour plus d'informations sur les sauvegardes de volume de blocs dans le service Block Volume, reportez-vous à Présentation des sauvegardes de volume de blocs.

Vous pouvez utiliser le module d'extension de volume CSI pour provisionner un instantané de volume de l'une des deux manières suivantes :

  • Dynamiquement : vous pouvez demander la création d'une sauvegarde du volume de blocs provisionnant un volume persistant. Vous indiquez la demande de volume persistant à l'aide de l'objet VolumeSnapshot et les paramètres à utiliser pour créer la sauvegarde de volume de blocs à l'aide de l'objet VolumeSnapshotClass. Les instantanés de volume provisionnés dynamiquement sont également appelés instantanés de volume dynamiques. Reportez-vous à Création d'instantanés de volume provisionnés dynamiquement.
  • Statiquement : vous pouvez fournir des détails sur une sauvegarde de volume de blocs existante à l'aide de l'objet VolumeSnapshotContent. Les instantanés de volume provisionnés de manière statique sont également appelés instantanés de volume statiques et instantanés de volume pré-provisionnés. Création d'instantanés de volume provisionnés de manière statique

Lorsque vous créez un cliché de volume provisionné dynamiquement, les mêmes balises à format libre et les mêmes balises définies qui ont été appliquées au volume de blocs source sont appliquées à la sauvegarde de volume de blocs. Toutefois, vous pouvez utiliser des paramètres pour appliquer des balises supplémentaires à la sauvegarde de volume de blocs (reportez-vous à Balisage des sauvegardes de volume de blocs).

Vous devez respecter un certain nombre de prérequis avant de créer des clichés de volume à utiliser avec les clusters créés par Kubernetes Engine. Reportez-vous à Prérequis pour la création de clichés de volume.

Tenez compte des points suivants lors de la création et de l'utilisation d'instantanés de volume :

  • Vous pouvez uniquement créer des instantanés de volume lorsque vous utilisez le module d'extension de volume CSI (c'est-à-dire que vous ne pouvez pas créer des instantanés de volume lorsque vous utilisez le module d'extension de volume FlexVolume).
  • Dans le cas de sauvegardes de volume dynamiques, le module d'extension de volume CSI crée une sauvegarde de volume de blocs pour provisionner un cliché de volume dynamique dans le même compartiment que le cluster. Dans le cas des clichés de volume statique, la sauvegarde de volume de blocs provisionnant un cliché de volume statique peut se trouver dans un autre compartiment que le cluster, à condition que des instructions de stratégie appropriées existent pour permettre au cluster d'accéder à cet autre compartiment (reportez-vous à Prérequis pour la création de clichés de volume).
  • Vous ne pouvez pas utiliser le module d'extension de volume CSI pour remplir à nouveau un volume existant avec des données. En d'autres termes, vous ne pouvez pas restaurer (rétablir) les données d'un volume persistant existant dans un état antérieur en modifiant l'instantané de volume spécifié dans le manifeste de la réclamation de volume persistant. Vous pouvez uniquement utiliser le module d'extension de volume CSI pour remplir un nouveau volume avec des données.
  • Lorsque vous créez une sauvegarde de volume de blocs (par exemple, lors de la création d'un cliché de volume dynamique), la clé de cryptage utilisée lors de la création du volume de blocs est également utilisée pour créer la sauvegarde de volume de blocs. Vous ne pouvez pas indiquer de nouvelle clé de cryptage lors de la création d'une sauvegarde de volume de blocs. La sauvegarde de volume de blocs utilise donc le même cryptage que le volume de blocs qu'elle sauvegarde.
  • La taille spécifiée pour un volume persistant provisionné par un instantané de volume ne doit pas être inférieure à la taille du volume d'origine à partir duquel l'instantané a été créé.
  • Lorsque le module d'extension de volume CSI crée un volume de blocs pour sauvegarder un volume persistant provisionné par un instantané de volume, le placement du volume de blocs dépend des exigences de topologie de la demande de création de volume. Par exemple, si le module d'extension de volume CSI crée un volume de blocs pour un pod qui utilise une demande de volume persistant, le volume de blocs est créé dans le même domaine de disponibilité que le noeud de processus actif sur lequel le pod est exécuté.
  • Les instantanés inter-espaces de noms ne sont pas pris en charge.
  • Au fur et à mesure que le nombre d'objets VolumeSnapshot et VolumeSnapshotContent dans un cluster augmente, ils peuvent consommer un espace important dans etcd, ce qui peut entraîner un comportement inattendu du cluster. Pour maintenir le cluster en bon état, nous vous recommandons d'implémenter un mécanisme de purge afin de nettoyer régulièrement les objets VolumeSnapshot et VolumeSnapshotContent qui ne sont plus requis.

Prérequis pour la création des clichés de volume

Pour créer des clichés de volume à utiliser avec les clusters créés par le moteur Kubernetes, procédez comme suit :

  • les noeuds de plan de contrôle du cluster doivent exécuter Kubernetes version 1.24 ou ultérieure
  • les noeuds de processus actif du cluster doivent utiliser des formes de calcul de processeur reposant sur x86 ou Arm
  • les noeuds de processus actif du cluster doivent exécuter Oracle Linux 7, Oracle Linux 8 ou Ubuntu

Les objets VolumeSnapshot, VolumeSnapshotContent et VolumeSnapshotClass ne font pas partie de l'API Kubernetes principale. Par conséquent, avant de pouvoir créer des instantanés de volume à l'aide du module d'extension de volume CSI, vous devez installer les fichiers CRD (Custom Resource Definition) nécessaires sur le cluster, en exécutant les commandes suivantes :

kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml

Si vous voulez utiliser un cliché de volume provisionné de manière statique pour provisionner un nouveau volume persistant et que la sauvegarde de volume de blocs sous-jacente se trouve dans un autre compartiment que le cluster, des instructions de stratégie appropriées doivent exister pour permettre au cluster d'accéder aux sauvegardes de volume de blocs de cet autre compartiment. Par exemple :

ALLOW any-user to manage volume-backups in compartment <compartment-name> where request.principal.type = 'cluster'
ALLOW any-user to use volumes in compartment <compartment-name> where request.principal.type = 'cluster'

Création d'instantanés de volume provisionnés dynamiquement

Pour provisionner dynamiquement un cliché de volume en créant une sauvegarde du volume de blocs en provisionnant une demande de volume persistant, vous devez d'abord définir un objet VolumeSnapshotClass qui indique le type de sauvegarde de volume de blocs à créer. Une fois l'objet VolumeSnapshotClass créé, vous définissez un objet VolumeSnapshot qui utilise VolumeSnapshotClass. Utilisez l'objet VolumeSnapshot pour indiquer la demande de volume persistant provisionnée par le volume de blocs à sauvegarder.

Remarque

Lorsque vous créez un cliché de volume provisionné dynamiquement, Kubernetes Engine crée un objet VolumeSnapshotContent. Ne modifiez pas les objets VolumeSnapshotContent créés par Kubernetes Engine, ni ne créez vos propres objets VolumeSnapshotContent lors de la création de clichés de volume provisionnés dynamiquement.

Par exemple, vous définissez une demande de volume persistant nommée sample-pvc dans un fichier nommé csi-mypvctobackup.yaml, provisionné par un volume de blocs :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sample-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: "oci-bv"
  resources:
    requests:
      storage: 50Gi

Créez la demande de volume persistant :

kubectl create -f csi-mypvctobackup.yaml

Vous pouvez utiliser la demande de volume persistant lors de la définition d'autres objets, tels que des pods. Par exemple, la définition de pod suivante indique au système d'utiliser la demande de volume persistant sample-pvc comme volume nginx, monté par le pod dans /sample-volume.

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: sample-nginx
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: sample-volume
  volumes:
  - name: sample-volume
    persistentVolumeClaim:
      claimName: sample-pvc

Une fois le pod créé, la demande de volume persistant est liée à un volume persistant provisionné par un volume de blocs.

Afin de pouvoir créer une sauvegarde du volume de blocs en provisionnant la demande de volume persistant, vous devez définir les paramètres de la sauvegarde de volume de blocs en définissant un objet VolumeSnapshotClass nommé my-snapclass dans un fichier nommé csi-mysnapshotclass.yaml :

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: my-snapclass
driver: blockvolume.csi.oraclecloud.com
parameters:
  backupType: full
deletionPolicy: Delete

où :

  • driver: blockvolume.csi.oraclecloud.com indique le module d'extension de volume CSI pour provisionner les objets VolumeSnapshot.
  • parameters.backupType: full indique qu'une sauvegarde de volume de blocs doit inclure toutes les modifications apportées depuis la création du volume de blocs. Indiquez incremental pour créer une sauvegarde avec uniquement les modifications effectuées depuis la dernière sauvegarde. Notez qu'à des fins de récupération de données, il n'existe pas de différence fonctionnelle entre une sauvegarde incrémentielle et une sauvegarde complète. Reportez-vous à Types de sauvegarde de volume.
  • deletionPolicy: Delete indique ce qui arrive à une sauvegarde de volume de blocs si l'objet VolumeSnapshot associé est supprimé. Indiquez Retain pour conserver une sauvegarde de volume de blocs si l'objet VolumeSnapshot associé est supprimé.

Par défaut, les mêmes balises à format libre et les mêmes balises définies qui ont été appliquées au volume de blocs source sont appliquées à la sauvegarde de volume de blocs. Toutefois, vous pouvez utiliser des paramètres pour appliquer des balises supplémentaires à la sauvegarde de volume de blocs (reportez-vous à Balisage des sauvegardes de volume de blocs).

Créez l'objet VolumeSnapshotClass :

kubectl create -f csi-mysnapshotclass.yaml

Pour créer une sauvegarde du volume de blocs provisionnant la demande de volume persistant, vous devez définir un objet VolumeSnapshot en tant qu'objet my-snapshot dans un fichier nommé csi-mysnapshot.yaml :

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: my-snapshot
  namespace: default
spec:
  volumeSnapshotClassName: my-snapclass
  source:
    persistentVolumeClaimName: sample-pvc
où :
  • volumeSnapshotClassName: my-snapclass indique my-snapclass en tant qu'objet VolumeSnapshotClass à partir duquel obtenir les paramètres à utiliser lors de la création de la sauvegarde de volume de blocs. Vous ne pouvez pas modifier volumeSnapshotClassName après avoir créé l'objet VolumeSnapshot (vous devez créer un objet VolumeSnapshot).
  • persistentVolumeClaimName: sample-pvc indique sample-pvc en tant que demande de volume persistant en fonction du volume de blocs pour lequel créer une sauvegarde de volume de blocs. Vous ne pouvez pas modifier la source après avoir créé l'objet VolumeSnapshot (vous devez créer un objet VolumeSnapshot).

Créez l'objet VolumeSnapshot :

kubectl create -f csi-mysnapshot.yaml

L'objet VolumeSnapshot est créé et provisionné par une nouvelle sauvegarde de volume de blocs. Vous pouvez utiliser l'instantané de volume pour provisionner un nouveau volume persistant (reportez-vous à Utilisation d'un instantané de volume pour provisionner un nouveau volume).

Création d'instantanés de volume provisionnés de manière statique

Pour provisionner de manière statique un cliché de volume à partir d'une sauvegarde de volume de blocs existante, vous devez d'abord créer la sauvegarde de volume de blocs (reportez-vous à Création d'une sauvegarde manuelle pour un volume de blocs).

Une fois la sauvegarde de volume de blocs créée, définissez un objet VolumeSnapshotContent et indiquez les détails (y compris l'OCID) de la sauvegarde de volume de blocs existante. Vous pouvez ensuite définir un objet VolumeSnapshot et indiquer l'objet VolumeSnapshotContent qui fournit les détails de la sauvegarde de volume de blocs existante.

Par exemple, vous définissez l'objet VolumeSnapshotContent en tant que my-static-snapshot-content dans un fichier nommé csi-mystaticsnapshotcontent.yaml :

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
  name: my-static-snapshot-content
spec:
  deletionPolicy: Retain
  driver: blockvolume.csi.oraclecloud.com
  source:
    snapshotHandle: ocid1.volumebackup.oc1.iad.aaaaaa______xbd
  volumeSnapshotRef:
    name: my-static-snapshot
    namespace: default
où :
  • deletionPolicy: Retain indique ce qui arrive à une sauvegarde de volume de blocs si l'objet VolumeSnapshot associé est supprimé. Indiquez Delete pour supprimer une sauvegarde de volume de blocs si l'objet VolumeSnapshot associé est supprimé.
  • driver: blockvolume.csi.oraclecloud.com indique d'utiliser le module d'extension de volume CSI pour provisionner les objets VolumeSnapshot.
  • snapshotHandle: ocid1.volumebackup.oc1.iad.aaaaaa______xbd indique l'OCID de la sauvegarde de volume de blocs existante.
  • volumeSnapshotRef.name: my-static-snapshot indique le nom de l'objet VolumeSnapshot correspondant à provisionner à partir de la sauvegarde de volume de blocs existante. Ce champ est obligatoire. L'objet VolumeSnapshot n'a pas besoin d'exister lorsque vous créez l'objet VolumeSnapshotContent.
  • namespace: default indique l'espace de noms contenant l'objet VolumeSnapshot correspondant à provisionner à partir de la sauvegarde de volume de blocs existante. Ce champ est obligatoire.

Créez l'objet VolumeSnapshotContent :

kubectl create -f csi-mystaticsnapshotcontent.yaml

Vous définissez l'objet VolumeSnapshot provisionné de manière statique en tant que my-static-snapshot dans un fichier nommé csi-mystaticsnapshot.yaml :

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: my-static-snapshot
spec:
  source:
    volumeSnapshotContentName: my-static-snapshot-content

VolumeSnapshotContentName: my-static-snapshot-content indique le nom de l'objet VolumeSnapshotContent que vous avez créé précédemment. Vous ne pouvez pas modifier la source après avoir créé l'objet VolumeSnapshot (vous devez créer un objet VolumeSnapshot).

Créez l'objet VolumeSnapshot :

kubectl create -f csi-mystaticsnapshot.yaml

L'objet VolumeSnapshot est créé et provisionné par la sauvegarde de volume de blocs indiquée dans l'objet VolumeSnapshotContent. Vous pouvez utiliser l'instantané de volume pour provisionner un nouveau volume persistant (reportez-vous à Utilisation d'un instantané de volume pour provisionner un nouveau volume).

Utilisation d'un cliché de volume pour provisionner un nouveau volume

Après avoir créé un instantané de volume provisionné dynamiquement ou provisionné statiquement, vous pouvez indiquer l'instantané de volume en tant que source de données pour une demande de volume persistant afin de provisionner un nouveau volume persistant.

Par exemple, vous définissez une demande de volume persistant nommée pvc-fromsnapshot dans un fichier nommé csi-mypvcfromsnapshot.yaml, provisionné par un instantané de volume nommé test-snapshot :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-fromsnapshot
  namespace: default
spec:
  storageClassName: oci-bv
  dataSource:
    name: test-snapshot
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

où :

  • datasource.name: test-snapshot indique test-snapshot comme nom de l'objet VolumeSnapshot à utiliser en tant que source de données pour le volume persistant.
  • datasource.apiGroup: snapshot.storage.k8s.io indique la version de l'API de stockage d'instantané Kubernetes à utiliser.

Créez la demande de volume persistant :

kubectl create -f csi-mypvcfromsnapshot.yaml

Lorsque la demande de volume persistant est utilisée pour provisionner un autre objet (tel qu'un pod), un volume persistant est créé et l'objet VolumeSnapshot que vous avez indiqué est utilisé pour remplir le volume de blocs sous-jacent. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante qui indique au système d'utiliser la PVC PVC-fromsnapshot comme volume nginx, monté par le pod dans /data.

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod-restore
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - name: http
          containerPort: 80
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: pvc-fromsnapshot

Une fois le pod créé, la demande de volume persistant est liée à un nouveau volume persistant provisionné par un nouveau volume de blocs rempli par l'objet VolumeSnapshot.

Balisage de sauvegardes de volume de blocs

Lorsque vous utilisez le module d'extension de volume CSI pour créer un cliché de volume provisionné dynamiquement, les mêmes balises à format libre et balises définies qui ont été appliquées au volume de blocs source sont également appliquées à la sauvegarde de volume de blocs.

Pour appliquer des balises à format libre supplémentaires à la nouvelle sauvegarde de volume de blocs, incluez le paramètre suivant dans la section des paramètres du fichier manifeste VolumeSnapshotClass :

oci.oraclecloud.com/freeform-tags: '{"<first-tag-key>":","<first-tag-value>","<second-tag-key>":"<second-tag-value>"...}'

Pour appliquer des balises définies supplémentaires à la nouvelle sauvegarde de volume de blocs, incluez le paramètre suivant dans la section des paramètres du fichier manifeste VolumeSnapshotClass :

oci.oraclecloud.com/defined-tags: '{"<tag-namespace>": {"<first-tag-key>":","<first-tag-value>","<second-tag-key>":"<second-tag-value>"...}}'

Par exemple :

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: my-snapclass
driver: blockvolume.csi.oraclecloud.com
parameters:
  backupType: full
  oci.oraclecloud.com/freeform-tags: '{"<first-tag-key>":","<first-tag-value>","<second-tag-key>":"<second-tag-value>"...}'
deletionPolicy: Delete

Création d'une demande de volume persistant en clonant un volume de blocs existant à l'aide du module d'extension de volume CSI

Un clone Kubernetes est un doublon exact d'un volume persistant existant sur un système de stockage. Vous pouvez cloner un volume persistant existant pour provisionner une nouvelle demande de volume persistant. Le nouveau volume persistant contient une copie des données du volume persistant source, mais il est indépendant du volume persistant source. Vous pouvez utiliser des clones de volume pour tester rapidement les modifications de configuration, sans impact sur un environnement de production. Pour plus d'informations sur les clones Kubernetes, reportez-vous à Clonage de volume CSI dans la documentation Kubernetes.

Dans le service Block Volume, vous pouvez cloner un volume de blocs pour créer un volume de blocs prérempli avec des données du volume de blocs source. Pour plus d'informations sur le clonage de volumes de blocs dans le service Block Volume, reportez-vous à Clonage d'un volume de blocs.

Lorsque vous utilisez le module d'extension de volume CSI pour connecter des clusters à des volumes de blocs dans le service Block Volume, vous pouvez provisionner une nouvelle demande de volume persistant avec un nouveau volume de blocs cloné à partir d'un volume de blocs existant provisionnant une autre demande de volume persistant existante. Pour indiquer que vous voulez que le module d'extension de volume CSI clone le volume de blocs existant pour la nouvelle demande de volume persistant, indiquez la demande de volume persistant existante comme source de données pour la nouvelle demande de volume persistant.

Le nouveau PVC peut être utilisé de la même manière que tout autre PVC, et est entièrement séparé du PVC existant spécifié comme source de données. De même, le nouveau volume de blocs et le volume de blocs existant à partir duquel il est cloné sont des ressources entièrement distinctes. Ils peuvent être mis à jour, clonés, instantanés et supprimés indépendamment l'un de l'autre.

Dès que le volume de blocs source a été cloné et qu'un nouveau volume de blocs a été créé (généralement dans quelques secondes), le nouveau volume de blocs a l'état Disponible. Toutes les données présentes dans le volume de blocs source à ce moment-là sont copiées dans le nouveau volume de blocs (aucune modification ultérieure n'est copiée). Cependant, la copie des données en arrière-plan peut prendre jusqu'à trente minutes en fonction de la taille du volume de blocs (par exemple, la copie d'un volume de blocs de 1 To peut prendre jusqu'à quinze minutes). Par conséquent, pour éviter tout risque d'erreur ou d'altération des données, le nouveau PVC a l'état En attente jusqu'à ce que toutes les données aient été copiées. Une fois toutes les données copiées, la nouvelle demande de volume persistant est liée à la demande de volume persistant provisionnée par le nouveau volume de blocs et la nouvelle demande de volume persistant présente l'état Disponible.

Un certain nombre de prérequis doivent être respectés avant de provisionner une nouvelle demande de volume persistant en clonant le volume de blocs qui provisionne déjà une demande de volume persistant existante. Reportez-vous à Prérequis pour le clonage d'un volume de blocs existant afin de provisionner une nouvelle demande de volume persistant.

Lors du clonage d'un volume de blocs pour provisionner une nouvelle demande de volume persistant, tenez compte des points suivants :

  • Le module d'extension de volume CSI crée le volume de blocs dans le même domaine de disponibilité, la même région et la même location que le volume de blocs source.
  • Le nouveau volume de blocs créé par le module d'extension de volume CSI peut lui-même être cloné dès qu'il a l'état Disponible.
  • Les exigences de topologie d'une demande de création de volume sont ignorées. Par exemple, si le module d'extension de volume CSI clone un volume de blocs pour un pod qui utilise une demande de volume persistant, le nouveau volume de blocs est créé dans le même domaine de disponibilité que le noeud de processus actif sur lequel le pod est exécuté.
  • Vous ne pouvez pas utiliser le module d'extension de volume CSI pour cloner des volumes de blocs créés par le module d'extension de volume FlexVolume.
  • Vous ne pouvez pas supprimer la demande de volume persistant source lorsque le clonage est en cours. De même, vous ne pouvez pas supprimer un volume de blocs source lorsque des données sont copiées vers un volume de blocs qui en a été cloné.
  • Le clonage d'espaces de noms croisés n'est pas pris en charge. La nouvelle demande de volume persistant et la demande de volume persistant source doivent toutes deux se trouver dans le même espace de noms.
  • Vous n'avez pas besoin de spécifier explicitement une classe de stockage pour la nouvelle demande de volume persistant. Si vous spécifiez explicitement une classe de stockage pour la nouvelle demande de volume persistant, la classe de stockage que vous spécifiez peut être différente de la classe de stockage spécifiée pour la demande de volume persistant source. Si vous n'indiquez pas de classe de stockage pour la nouvelle demande de volume persistant, la classe de stockage par défaut est utilisée.

Prérequis pour le clonage d'un volume de blocs existant afin de provisionner une nouvelle PVC

Pour provisionner une nouvelle demande de volume persistant en clonant le volume de blocs qui provisionne déjà une demande de volume persistant existante, procédez comme suit :

  • Les noeuds de plan de contrôle du cluster doivent exécuter Kubernetes version 1.25 ou ultérieure.
  • Les noeuds de processus actif du cluster doivent utiliser des formes de calcul de processeur reposant sur x86 ou Arm.
  • Les noeuds de processus actif du cluster doivent exécuter Oracle Linux 7, Oracle Linux 8 ou Ubuntu.
  • Le PVC existant que vous spécifiez comme source de données pour le nouveau PVC doit :
    • Déjà être lié à un PV provisionné par un volume de blocs.
    • Avoir l'état Disponible.
  • Le nouveau volume de blocs doit être de la même taille que le volume de blocs source à partir duquel il est cloné ou supérieur à celui-ci. Si vous indiquez une valeur de stockage supérieure au volume de blocs source pour la nouvelle demande de volume persistant, le nouveau volume de blocs est dimensionné en conséquence. Vous ne pouvez pas indiquer de valeur de stockage pour la nouvelle demande de volume persistant inférieure au volume de blocs à cloner ou inférieure à la valeur de stockage de la demande de volume persistant source.
  • Le type de système de fichiers indiqué pour le nouveau volume de blocs doit être identique au type de système de fichiers du volume de blocs source à partir duquel il est cloné (reportez-vous à Spécification de types de système de fichiers pour les volumes de blocs).

Clonage d'un volume de blocs existant pour provisionner une nouvelle demande de volume persistant

Pour provisionner une nouvelle demande de volume persistant en clonant le volume de blocs qui provisionne déjà une demande de volume persistant existante, vous indiquez la demande de volume persistant existante en tant que dataSource de la nouvelle demande de volume persistant.

Par exemple, vous définissez une demande de volume persistant nommée my-clone-pvc dans un fichier appelé csi-myclonepvc.yaml. La demande de volume persistant my-clone-pvc est provisionnée par un volume de blocs créé en clonant le volume de blocs qui provisionne la demande de volume persistant my-source-pvc :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-clone-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: custom-clone-storage-class
  resources:
    requests:
      storage: 50Gi
  dataSource:
    kind: PersistentVolumeClaim
    name: my-source-pvc

Créez la demande de volume persistant :

kubectl create -f csi-myclonepvc.yaml

Vous pouvez utiliser la demande de volume persistant lors de la définition d'autres objets, tels que des pods. Par exemple, la définition de pod suivante indique au système d'utiliser la demande de volume persistant my-clone-pvc comme volume nginx, monté par le pod dans /sample-volume.

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: sample-nginx
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: sample-volume
  volumes:
  - name: sample-volume
    persistentVolumeClaim:
      claimName: my-clone-pvc

Une fois le pod créé, la demande de volume persistant my-clone-pvc est liée à un nouveau volume persistant provisionné par un volume de blocs qui a été cloné à partir du volume de blocs provisionnant la demande de volume persistant my-source-pvc.

Balisage de volumes de blocs clonés

Lorsque vous utilisez le module d'extension de volume CSI pour provisionner un volume persistant en clonant un volume de blocs en provisionnant une autre demande de volume persistant, les mêmes balises à format libre et balises définies qui ont été appliquées au volume de blocs source sont également appliquées au nouveau volume de blocs. Le module d'extension de volume CSI n'applique aucune balise supplémentaire au nouveau volume de blocs.

Création d'une demande de volume persistant à partir d'un volume de blocs ou d'une sauvegarde existant à l'aide du module d'extension de volume FlexVolume

Vous pouvez créer une demande de volume persistant à partir d'un volume de blocs existant ou d'une sauvegarde de volume de blocs à utiliser par le module d'extension de volume FlexVolume. Par exemple, si l'administrateur de cluster a créé une sauvegarde de volume de blocs à utiliser lors du provisionnement d'une nouvelle demande de volume persistant. Une telle sauvegarde de volume de blocs peut inclure des données prêtes à être utilisées par d'autres objets, tels que des pods.

Définissez une PVC dans un fichier appelé flex-pvcfrombackup.yaml. Utilisez l'élément d'annotation volume.beta.kubernetes.io/oci-volume-source pour indiquer la source du volume de blocs à utiliser lors du provisionnement d'une nouvelle demande de volume persistant à l'aide du module d'extension de volume FlexVolume. Vous pouvez indiquer l'OCID d'un volume de blocs ou d'une sauvegarde de volume de blocs comme valeur de l'annotation. Dans cet exemple, indiquez l'OCID de la sauvegarde de volume de blocs créée par l'administrateur de cluster. Par exemple :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myvolume
  annotations:
    volume.beta.kubernetes.io/oci-volume-source: ocid1.volumebackup.oc1.iad.abuw...
spec:
  selector:
    matchLabels:
      topology.kubernetes.io/zone: US-ASHBURN-AD-1
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

Le fichier flex-pvcfrombackup.yaml inclut l'élément matchLabels, qui n'est applicable que dans le cas du module d'extension de volume FlexVolume.

Entrez la commande suivante pour créer la demande de volume persistant à partir du fichier flex-pvcfrombackup.yaml :

kubectl create -f flex-pvcfrombackup.yaml

La sortie de la commande ci-dessus confirme la création de la demande de volume persistant :

persistentvolumeclaim "myvolume" created

Vérifiez que la demande de volume persistant a été créée et liée à un volume persistant créé à partir de la sauvegarde de volume en saisissant la commande suivante :

kubectl get pvc

La sortie de la commande ci-dessus indique le statut en cours de la demande de volume persistant :

			
NAME           STATUS    VOLUME                               CAPACITY   ACCESSMODES   STORAGECLASS   AGE
myvolume       Bound     ocid1.volume.oc1.iad.<unique_ID>     50Gi       RWO           oci            4m

Vous pouvez utiliser le volume persistant créé à partir de la sauvegarde de volume lors de la définition d'autres objets, tels que des pods. Par exemple, la définition de pod suivante indique au système d'utiliser la demande de volume persistant myvolume comme volume nginx, monté par le pod dans /data.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - name: http
          containerPort: 80
      volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: myvolume

Après avoir créé le pod, vous pouvez vérifier qu'il est en cours d'exécution et qu'il utilise la nouvelle demande de volume persistant en saisissant la commande suivante :

kubectl describe pod nginx
Remarque

Dans l'exemple FlexVolume de cette rubrique, la demande de volume persistant demande du stockage dans un domaine de disponibilité de la région Ashburn à l'aide du libellé topology.kubernetes.io/zone. Pour plus d'informations sur l'utilisation de ce libellé (et sur les versions abrégées des noms de domaine de disponibilité à spécifier), reportez-vous à topology.kubernetes.io/zone.

Chiffrement des données inactives et en transit avec le service Block Volume

Le service Oracle Cloud Infrastructure Block Volume crypte toujours tous les volumes de blocs et les sauvegardes de volume au repos à l'aide de l'algorithme AES (Advanced Encryption Standard) avec un cryptage de 256 bits. Par défaut, tous les volumes et leurs sauvegardes sont cryptés à l'aide des clés de cryptage fournies par Oracle. Chaque fois qu'un volume est cloné ou restauré à partir d'une sauvegarde, une nouvelle clé de cryptage unique lui est affectée.

Vous avez la possibilité de crypter tous vos volumes et leurs sauvegardes à l'aide des clés que vous possédez et gérez à l'aide du service Vault. Pour plus d'informations, reportez-vous à Key Management. Si vous ne configurez pas un volume pour qu'il utilise le service Vault ou si vous annulez ultérieurement l'affectation d'une clé au volume, le service Block Volume utilise à la place la clé de cryptage fournie par Oracle. Ceci s'applique au cryptage au repos et au cryptage en transit paravirtualisé.

Toutes les données déplacées entre l'instance et le volume de blocs sont transférées via un réseau interne hautement sécurisé. Si vous avez des exigences de conformité spécifiques liées au cryptage des données pendant leur déplacement entre l'instance et le volume de blocs, le service Block Volume fournit une option d'activation du cryptage en transit pour les attachements de volume paravirtualisés sur les instances de machine virtuelle. Certaines formes Bare Metal prennent en charge le cryptage en transit pour les volumes de blocs attachés iSCSI de l'instance.

Pour plus d'informations sur le cryptage de volume de blocs et sur la prise en charge du cryptage en transit, reportez-vous à Cryptage de volume de blocs.

Lorsque les demandes de volume persistant Kubernetes sont soutenues par le service Block Volume, vous choisissez le mode de cryptage des volumes de blocs en indiquant les éléments suivants :

  • Clé de cryptage maître à utiliser, en définissant la propriété kms-key-id dans la définition de la classe de stockage Kubernetes. Vous pouvez indiquer l'OCID d'une clé de cryptage maître dans le service Vault.
  • Mode d'attachement du volume de blocs à l'instance de calcul, en définissant la propriété attachment-type dans la définition de la classe de stockage Kubernetes sur iscsi ou paravirtualized.
  • Indique si le cryptage en transit est activé pour chaque pool de noeuds d'un cluster, en définissant la propriété isPvEncryptionInTransitEnabled du pool de noeuds (à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le cryptage en transit : du pool de noeuds dans la console).

L'interaction des paramètres que vous indiquez détermine le mode de cryptage des volumes de blocs, comme indiqué dans le tableau suivant :

Propriété isPvEncryptionInTransitEnabled du pool de noeuds définie sur : Propriété class kms-key-id de stockage définie sur : Propriété attachment-type de la classe de stockage définie sur Les données sont-elles cryptées au repos ? Les données sont-elles cryptées pendant leur transit ? Remarques
true OCID d'une clé dans le coffre paravirtualized Oui (clé gérée par l'utilisateur) Oui (clé gérée par l'utilisateur)
true OCID d'une clé dans le coffre iscsi Erreur Erreur Le PV ne peut pas être provisionné car la propriété attachment-type doit être définie sur paravirtualized lorsque isPvEncryptionInTransitEnabled est défini sur True.
true non défini paravirtualized Oui (clé gérée par Oracle) Oui (clé gérée par Oracle)
true non défini iscsi Erreur Erreur Le PV ne peut pas être provisionné car la propriété attachment-type doit être définie sur paravirtualized lorsque isPvEncryptionInTransitEnabled est défini sur True.
false OCID d'une clé dans le coffre paravirtualized Oui (clé gérée par l'utilisateur) Non
false OCID d'une clé dans le coffre iscsi Oui (clé gérée par l'utilisateur) Non
false non défini paravirtualized Oui (clé gérée par Oracle) Non
false non défini iscsi Oui (clé gérée par Oracle) Non

Pour pouvoir créer un cluster pour lequel vous voulez gérer vous-même la clé de cryptage maître, vous devez effectuer les opérations suivantes :

Pour plus d'informations sur la rotation des clés dans le service Vault, reportez-vous à Rotation d'une clé Vault.

Exemple : configuration d'une classe de stockage pour activer le cryptage au repos et en transit à l'aide de la clé gérée par Oracle par défaut

Pour provisionner une demande de volume de blocs persistant sur un volume de blocs à l'aide d'une clé de cryptage maître gérée par Oracle pour crypter les données inactives (et éventuellement en transit), définissez une classe de stockage et définissez les éléments suivants :

  • provisioner: à blockvolume.csi.oraclecloud.com
  • attachment-type à paravirtualized

Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: bv-encrypted-storage-class
provisioner: blockvolume.csi.oraclecloud.com
parameters:
  attachment-type: "paravirtualized"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

Vous pouvez ensuite créer une demande de volume persistant provisionnée par la classe de stockage que vous avez créée.

Après avoir défini la classe de stockage et créé la demande de volume persistant, définissez la propriété isPvEncryptionInTransitEnabled de chaque pool de noeuds sur true (à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le cryptage en transit : du pool de noeuds dans la console). Le cryptage des données en transit n'est pris en charge que dans certaines situations (reportez-vous à Cryptage des données inactives et des données en transit avec le service Block Volume).

Exemple : configuration d'une classe de stockage pour activer le cryptage au repos et en transit à l'aide d'une clé que vous gérez

Pour provisionner une demande de volume de blocs persistant à l'aide d'une clé de cryptage maître gérée par vous pour crypter les données inactives (et éventuellement en transit), vous devez effectuer les opérations suivantes :

Après avoir créé une stratégie et une clé de cryptage maître appropriées, définissez une classe de stockage et définissez les éléments suivants :

  • provisioner: à blockvolume.csi.oraclecloud.com
  • attachment-type à paravirtualized
  • kms-key-id vers l'OCID de la clé de cryptage maître dans le service Vault à utiliser pour crypter les données

Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: bv-user-encrypted-storage-class
provisioner: blockvolume.csi.oraclecloud.com
parameters:
  attachment-type: "paravirtualized"
  kms-key-id: "ocid1.key.oc1.iad.anntl______usjh"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

Vous pouvez ensuite créer une demande de volume persistant provisionnée par la classe de stockage que vous avez créée.

Après avoir défini la classe de stockage et créé la demande de volume persistant, définissez la propriété isPvEncryptionInTransitEnabled de chaque pool de noeuds sur true (à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le cryptage en transit : du pool de noeuds dans la console). Le cryptage des données en transit n'est pris en charge que dans certaines situations (reportez-vous à Cryptage des données inactives et des données en transit avec le service Block Volume).

Développement d'un volume de blocs

Lorsqu'une demande de volume persistant est créée à l'aide du module d'extension de volume CSI (provisioner: blockvolume.csi.oraclecloud.com), vous pouvez étendre la taille de volume en ligne. Ce faisant, vous pouvez déployer initialement des applications avec une certaine quantité de stockage, puis augmenter le stockage disponible sans aucun temps d'arrêt.

Si vous voulez prendre en charge les augmentations de demande de stockage, définissez allowVolumeExpansion: true dans la définition de la classe de stockage que vous indiquez pour la demande de volume persistant. Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: my-bv
provisioner: blockvolume.csi.oraclecloud.com
parameters:
  attachment-type: "paravirtualized"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

La classe de stockage oci-bv par défaut du module d'extension de volume CSI comporte allowVolumeExpansion: true par défaut.

Pour étendre la taille d'un volume, modifiez le manifeste PVC et mettez à jour la taille du volume, puis appliquez le manifeste. Lorsque le disque est réanalysé pour permettre au système d'exploitation d'identifier la taille de volume étendue (ce qui peut prendre quelques minutes), l'augmentation du stockage devient automatiquement disponible pour les pods utilisant la demande de volume persistant. Il n'est pas nécessaire de redémarrer les pods.

Entrez la commande suivante pour confirmer que la demande de volume persistant a été liée à un volume de blocs nouvellement agrandi :

kubectl get pvc <pvc_name> -o yaml

Tenez compte des éléments suivants :

  • L'extension de volume est prise en charge dans les clusters exécutant Kubernetes 1.19 ou une version ultérieure.
  • La classe de stockage oci-bv par défaut du module d'extension de volume CSI est configurée avec allowVolumeExpansion: true dans les clusters exécutant Kubernetes 1.19 ou une version ultérieure. Les définitions des classes de stockage oci-bv dans les clusters existants exécutant Kubernetes 1.19 ou une version ultérieure sont automatiquement modifiées pour définir allowVolumeExpansion: true.
  • Vous ne pouvez pas réduire la taille d'un volume de blocs. Vous pouvez uniquement indiquer une valeur plus élevée que la taille actuelle du volume de blocs. Si vous mettez à jour un manifeste PVC pour demander moins de stockage que ce qui avait été demandé précédemment, la demande de stockage échoue.
  • Pour plus d'informations sur l'augmentation de la taille des volumes de blocs dans le service Block Volume, reportez-vous à Redimensionnement d'un volume. Notez en particulier la recommandation de créer une sauvegarde avant de redimensionner un volume de blocs.

Exemple : configuration d'une classe de stockage pour activer l'extension de volume de blocs

Modifiez le manifeste d'une demande de volume persistant provisionnée par la classe de stockage oci-bv et incluez une demande de stockage. Par exemple, vous pouvez initialement définir storage: 100Gi pour demander 100 Go de stockage pour la demande de volume persistant, dans un fichier appelé csi-bvs-PVC-exp.yaml :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: my-pvc
spec:
 storageClassName: oci-bv
 resources:
  requests:
    storage: 100Gi
 volumeName: pvc-bv1

Entrez la commande suivante pour créer la PVC à partir du fichier csi-bvs-PVC-exp.yaml :

kubectl apply -f csi-bvs-pvc-exp.yaml

Par la suite, vous devrez peut-être augmenter la quantité de stockage disponible pour le PVC. Par exemple, vous pouvez modifier le manifeste et définir storage: 200Gi :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: my-pvc
spec:
 storageClassName: oci-bv
 resources:
  requests:
    storage: 200Gi
 volumeName: pvc-bv1

Après avoir appliqué le manifeste, le PV qui provisionne le PVC est augmenté à 200 Go. La mise à jour de manifeste déclenche le service Block Volume pour augmenter la taille du volume de blocs existant à 200 Go. Lors de la prochaine nouvelle analyse du disque (qui peut prendre quelques minutes), l'augmentation du stockage devient automatiquement disponible pour les pods à l'aide du PVC.

Spécification des performances de volume de blocs

Les volumes de blocs dans le service Block Volume peuvent être configurés pour différents niveaux de performances, en fonction des exigences d'E/S de charge de travail attendues. Les performances de volume de blocs sont exprimées en unités de performance de volume (VPU). Plusieurs niveaux de performances sont disponibles, notamment :

  • Réduction des coûts (0 VPU)
  • Equilibré (10 VPU)
  • Performances supérieures (20 VPU)
  • Performances très élevées (entre 30 VPU et 120 VPU)

Par défaut, les volumes de blocs sont configurés pour le niveau de performances Equilibré (10 VPU). Pour plus d'informations sur les différents niveaux de performances de volume de blocs, reportez-vous à Niveaux de performances de volume de blocs.

Lorsque vous définissez une demande de volume persistant à l'aide du module d'extension de volume CSI (provisioner: blockvolume.csi.oraclecloud.com), vous pouvez indiquer dans la définition de classe de stockage un niveau de performances de volume de blocs différent adapté à la charge globale attendue.

Vous ne pouvez pas modifier ultérieurement le niveau de performances d'un volume de blocs soutenant une demande de volume persistant. Au lieu de cela, vous devez définir une nouvelle classe de stockage, définir le niveau de performances requis et créer une nouvelle PVC provisionnée par cette nouvelle classe de stockage.

Création de PVC avec des niveaux de performances de coût inférieur (0 VPU), d'équilibre (10 VPU) et de performances supérieures (20 VPU)

Pour créer une demande de volume persistant soutenue par un volume de blocs avec un niveau de performances Coût réduit, Equilibré ou Performances supérieures, définissez vpusPerGB dans la définition de classe de stockage comme suit :

  • pour un niveau de performances Coût réduit, définissez vpusPerGB: "0"
  • pour un niveau de performances Equilibré, définissez vpusPerGB: "10"
  • pour un niveau de performances Performances supérieures, définissez vpusPerGB: "20"

Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: oci-high
provisioner: blockvolume.csi.oraclecloud.com
parameters:
  vpusPerGB: "20"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

La valeur de vpusPerGB doit être "0", "10" ou "20". Les autres valeurs ne sont pas prises en charge.

Créez un manifeste pour une demande de volume persistant provisionnée par la classe de stockage oci-high et incluez une demande de stockage. Par exemple, dans un fichier appelé csi-bvs-pvc-perf.yaml :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: oci-pvc-high
spec:
  storageClassName: oci-high
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

Entrez la commande suivante pour créer la PVC à partir du fichier csi-bvs-PVC-perf.yaml :

kubectl apply -f csi-bvs-pvc-perf.yaml

Une fois la PVC créée, vous pouvez l'utiliser lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante, qui indique au système d'utiliser la PVC oci-pvc-high :

apiVersion: v1
kind: Pod
metadata:
  name: pod-high
spec:
  containers:
    - name: app
      image: busybox:latest
      command: ["/bin/sh"]
      args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
      volumeMounts:
        - name: persistent-storage
          mountPath: /data
  volumes:
    - name: persistent-storage
      persistentVolumeClaim:
        claimName: oci-pvc-high

Lorsque vous créez le pod, un volume de blocs est créé dans le service Block Volume pour soutenir la demande de volume persistant. Le nouveau volume de blocs présente le niveau de performances indiqué dans la définition de classe de stockage oci-high.

Création de PVC avec des niveaux de performances ultra-hautes (30 à 120 VPU)

Pour créer une demande de volume persistant soutenue par un volume de blocs avec un niveau Performances très élevées, vous devez effectuer un certain nombre d'étapes. Les étapes sont décrites en détail dans cette section, mais en résumé, vous devez :

  • Créez un pool de noeuds avec des noeuds de processus actif de forme prise en charge.
  • Si vous attachez un volume de blocs à des instances de calcul en tant qu'attachement iSCSI, installez et activez le module d'extension de gestion des volumes de blocs sur les instances hébergeant les noeuds de processus actif.
  • Créez une définition de classe de stockage et définissez vpusPerGB dans la définition de classe de stockage sur une valeur comprise entre 30 et 120.
  • Créez une demande de volume persistant provisionnée par la classe de stockage et incluez une demande de stockage.

Après avoir créé une demande de volume persistant appropriée, vous pouvez définir un pod qui utilise un volume de blocs Performances très élevées et programmer le pod sur un noeud qui prend en charge les volumes de blocs Performances très élevées.

Pour offrir des caractéristiques Performances très élevées, les volumes de blocs Performances très élevées doivent être attachés à des instances de calcul hébergeant des noeuds de processus actif à l'aide d'un attachement à chemins d'accès multiples. Cependant, seul le premier volume de blocs Performances très élevées attaché à une instance est attaché avec un attachement à chemins d'accès multiples. Par conséquent, seul le premier volume de blocs Performances très élevées attaché à une instance présente des caractéristiques Performances très élevées.

Si vous avez l'intention d'utiliser plusieurs volumes de blocs Performances très élevées dans un cluster, créez le même nombre de noeuds qui prennent en charge les volumes de blocs Performances très élevées que les volumes de blocs Performances très élevées.

Pour créer une demande de volume persistant soutenue par un volume de blocs avec un niveau Performances très élevées, procédez comme suit :

  1. Suivez les instructions pour créer un pool de noeuds (reportez-vous à Création d'un pool de noeuds géré) et spécifiez les éléments suivants :
    1. Indiquez une forme Bare Metal ou de machine virtuelle prise en charge par Kubernetes Engine et prenant également en charge le niveau Performances très élevées.

      Les volumes de blocs Performances très élevées requièrent des formes qui prennent en charge les attachements à chemins d'accès multiples. Si vous voulez attacher le volume de blocs aux instances de calcul hébergeant des noeuds de processus actif dans le pool de noeuds en tant qu'attachement paravirtualisé, utilisez VM.Standard.E4. La forme flexible est la seule forme prise en charge.

      Voir :

    2. Indiquez le libellé à ajouter à tous les noeuds de processus actif du pool de noeuds pour indiquer que les noeuds de processus actif prennent en charge le niveau Performances très élevées. Par exemple, uhp: supported
  2. Si vous voulez attacher un volume de blocs Performances très élevées aux instances de calcul hébergeant des noeuds de processus actif dans le pool de noeuds en tant qu'attachement iSCSI, installez et activez le module d'extension de gestion des volumes de blocs sur les instances.

    Il existe différentes façons d'installer et d'activer le module d'extension de gestion des volumes de blocs, par exemple à l'aide de la console ou de l'interface de ligne de commande. Vous pouvez également installer et activer le module d'extension de gestion des volumes de blocs en indiquant un script cloud-init personnalisé semblable à ce qui suit :

    #!/bin/bash
    curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh
    bash /var/run/oke-init.sh
    
    echo "Installing oci cli package"
    
    sudo yum install -y python36-oci-cli
    echo "Completed oci cli package"
    
    instance_id=$(curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/id)
    
    echo "Instance Id : $instance_id"
    
    echo "Updating compute instance agent config."
    
    oci compute instance update --instance-id $instance_id --force --agent-config '{
        "is-agent-disabled": false,
        "plugins-config": [
            {"name": "Block Volume Management", "desiredState": "ENABLED" }
        ]
    }' --auth instance_principal
    
    echo "Update completed for instance agent config."
    

    Lors de l'installation et de l'activation du module d'extension de gestion des volumes de blocs, tenez compte des points suivants :

    • Le module d'extension de gestion des volumes de blocs doit pouvoir se connecter aux services Oracle, soit parce que l'instance de calcul a une adresse IP publique, soit parce que le VCN a une passerelle de service.
    • Les droits d'accès doivent être configurés de manière à autoriser le module d'extension de gestion des volumes de blocs à signaler les résultats de la configuration iSCSI pour les attachements iSCSI à chemins d'accès multiples.

    Pour plus d'informations :

  3. Créez une définition de classe de stockage pour les volumes de blocs avec un niveau de performances Performances très élevées et définissez vpusPerGB dans la définition de classe de stockage sur une valeur comprise entre 30 et 120.

    Par exemple :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: oci-uhp-sc
    provisioner: blockvolume.csi.oraclecloud.com
    parameters:
      vpusPerGB: "30"
      attachment-type: "iscsi"
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
  4. Créez une demande de volume persistant provisionnée par la classe de stockage que vous venez de créer et incluez une demande de stockage, comme suit :

    1. Créez un manifeste pour la demande de volume persistant.

      Par exemple, dans un fichier appelé csi-bvs-pvc-uhp.yaml :

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: uhp-claim
      spec:
        storageClassName: "oci-uhp-sc"
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
    2. Créez la demande de volume persistant à partir du fichier manifeste.

      Par exemple, entrez la commande suivante :

      kubectl apply -f csi-bvs-pvc-uhp.yaml

Une fois la PVC créée, vous pouvez l'utiliser lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante :

apiVersion: v1
kind: Pod
metadata:
  name: pod-uhp
  labels:
    uhp-pod: "true"
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: uhp-pod
            operator: In
            values:
            - "true"
        topologyKey: kubernetes.io/hostname
  containers:
    - name: app
      image: iad.ocir.io/odx-oke/oke-public/busybox:latest
      command: ["/bin/sh"]
      args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
      volumeMounts:
        - name: persistent-storage
          mountPath: /data
  volumes:
    - name: persistent-storage
      persistentVolumeClaim:
        claimName: uhp-claim
  nodeSelector:
    uhp: supported

Dans cet exemple, vous avez indiqué :

  • Libellé indiquant au pod qu'il utilise un volume de blocs Performances très élevées. Dans cet exemple, uhp-pod: "true"
  • Règle anti-affinité qui utilise le libellé de pod pour garantir l'exécution d'un seul pod à l'aide du volume de blocs Performances très élevées sur un noeud de processus actif.
  • Sélecteur de noeud, de sorte que le pod s'exécute uniquement sur des noeuds de processus actif avec un libellé particulier (dérivé du libellé de pool de noeuds). Dans cet exemple, uhp: supported
  • Une demande de volume persistant soutenue par un volume de blocs Performances très élevées. Dans cet exemple, claimName: uhp-claim

Lorsque vous créez un pod en fonction de la définition, il est exécuté sur un noeud de processus actif hébergé sur une instance dont la forme est adaptée au niveau de performances Performances très élevées. Un volume de blocs est créé dans le service Block Volume pour soutenir la demande de volume persistant. Le nouveau volume de blocs présente le niveau de performances Performances très élevées que vous avez indiqué dans la définition de classe de stockage.

Spécification des types de système de fichiers pour les volumes de blocs

Les volumes de blocs dans le service Block Volume peuvent être configurés pour différents types de système de fichiers. Le système de fichiers le plus approprié à utiliser dépend (entre autres) de la taille de fichier attendue et du nombre de fichiers à traiter. Plusieurs types de systèmes de fichiers sont disponibles, notamment :

  • ext3 : le type de système de fichiers ext3 inclut des fonctionnalités de journalisation pour améliorer la fiabilité et la disponibilité. Les contrôles de cohérence après une panne de courant ou un arrêt non contrôlé du système ne sont pas nécessaires.
  • ext4 : en plus des fonctionnalités ext3, le type de système de fichiers ext4 prend en charge les extents (blocs physiques contigus), la pré-allocation, l'allocation retardée, la vérification plus rapide du système de fichiers, la journalisation plus robuste et d'autres améliorations.
  • XFS : le système de fichiers XFS est un type de système de fichiers de journalisation à hautes performances, qui offre une évolutivité élevée pour les threads d'E/S, la bande passante du système de fichiers, la taille des fichiers et des systèmes de fichiers, même lorsque le système de fichiers couvre de nombreux périphériques de stockage.

Les systèmes de fichiers ext3 et ext4 sont généralement considérés comme mieux adaptés aux applications qui utilisent un seul thread de lecture/écriture et de petits fichiers. En revanche, le système de fichiers XFS est généralement considéré comme mieux adapté aux applications qui disposent de plusieurs threads de lecture/écriture et de fichiers plus volumineux.

Lorsqu'une demande de volume persistant est créée à l'aide du module d'extension de volume CSI (provisioner: blockvolume.csi.oraclecloud.com), vous pouvez indiquer pour le volume de blocs un type de système de fichiers approprié à la charge globale attendue.

Remarque

Les volumes de blocs sont configurés avec un système de fichiers ext4 par défaut. Si un système de fichiers ext4 est approprié pour la charge globale attendue, vous n'avez pas besoin de spécifier explicitement le type de système de fichiers dans la définition de la classe de stockage, comme décrit dans le reste de cette rubrique.

Par défaut, les volumes de blocs sont configurés avec un système de fichiers ext4. Si le système de fichiers ext4 n'est pas le système de fichiers le plus approprié pour la charge globale attendue, vous pouvez indiquer un autre type de système de fichiers dans la définition de la classe de stockage.

Pour créer une demande de volume persistant soutenue par un volume de blocs avec un système de fichiers ext3 ou XFS, définissez le paramètre fstype dans la définition de classe de stockage personnalisée comme suit :

  • pour ext3, définissez csi.storage.k8s.io/fstype: ext3
  • pour XFS, définissez csi.storage.k8s.io/fstype: xfs

Par exemple, pour créer une demande de volume persistant soutenue par un volume de blocs avec un système de fichiers ext3, procédez comme suit :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: oci-bv-ext3
provisioner: blockvolume.csi.oraclecloud.com
parameters:
  csi.storage.k8s.io/fstype: ext3
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForConsumer

Créez un manifeste pour une demande de volume persistant provisionnée par la classe de stockage oci-bv-ext3 et incluez une demande de stockage. Par exemple, dans un fichier appelé csi-bvs-pvc-fstype.yaml :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: oci-bv-claim-ext3
spec:
  storageClassName: oci-bv-ext3
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

Entrez la commande suivante pour créer la PVC à partir du fichier csi-bvs-PVC-fstype.yaml :

kubectl apply -f csi-bvs-pvc-fstype.yaml

Une fois la PVC créée, vous pouvez l'utiliser lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante, qui indique au système d'utiliser la PVC oci-bv-claim-ext3 comme volume nginx, monté par le pod dans /data.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - name: http
          containerPort: 80
      volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: oci-bv-claim-ext3

Après avoir créé le pod, vous pouvez vérifier que la demande de volume persistant a été liée à un nouveau volume persistant en saisissant la commande suivante :

kubectl get pvc

La sortie de la commande ci-dessus confirme que la demande de volume persistant a été liée :

			
NAME                    STATUS    VOLUME                               CAPACITY   ACCESSMODES   STORAGECLASS        AGE
oci-bv-claim-ext3       Bound     ocid1.volume.oc1.iad.<unique_ID>     50Gi       RWO           oci-bv-ext3         4m

Vous pouvez vérifier que le pod utilise la nouvelle demande de volume persistant en saisissant ce qui suit :

kubectl describe pod nginx

Vous ne pouvez pas modifier ultérieurement le système de fichiers d'un volume de blocs soutenant une demande de volume persistant. Au lieu de cela, vous devez définir une nouvelle classe de stockage, définir le système de fichiers comme requis et créer une nouvelle PVC provisionnée par cette nouvelle classe de stockage.

Spécification de volumes de blocs bruts

Lorsque vous utilisez le module d'extension de volume CSI (provisioner: blockvolume.csi.oraclecloud.com) pour connecter des clusters à des volumes de blocs dans le service Block Volume, vous pouvez lier une demande de volume persistant à une valeur PV provisionnée par un volume de blocs configuré en tant que volume de blocs brut. Lorsqu'un volume de blocs a été configuré en tant que volume de blocs brut, plutôt qu'en tant que système de fichiers monté, un PV provisionné par ce volume de blocs apparaît en tant qu'unité de blocs pour les conteneurs exécutés sur un cluster. Par conséquent, les applications en cours d'exécution dans le conteneur peuvent accéder au volume de blocs attaché en tant qu'unité de blocs, sans les surcharges de performances dues à l'accès à l'unité via un système de fichiers. Cette surcharge peut être particulièrement importante pour les applications sensibles aux performances (telles que les bases de données) qui bénéficient d'un accès direct aux unités de blocs.

Pour configurer le volume de blocs qui soutient une demande de volume persistant en tant que volume de blocs brut, spécifiez volumeMode: Block dans le manifeste de demande de volume persistant. S'il n'est pas indiqué, volumeMode: Filesystem est supposé et les volumes de blocs sont configurés avec un système de fichiers ext4 par défaut.

Par exemple, créez un manifeste pour une demande de volume persistant provisionnée par la classe de stockage oci-bv, incluez une demande de stockage et spécifiez volumeMode: Block dans le manifeste. Par exemple, dans un fichier appelé csi-bvs-pvc-raw.yaml :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-raw-block-volume
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: oci-bv
  volumeMode: Block

Entrez la commande suivante pour créer la demande de volume persistant à partir du fichier csi-bvs-PVC-raw.yaml :

kubectl apply -f csi-bvs-pvc-raw.yaml

Après avoir créé la PVC, vous pouvez l'utiliser lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un pod à partir de la définition de pod suivante, qui indique au système d'utiliser la demande de volume persistant PVC-raw-block-volume comme volume de stockage pour le conteneur de test de volume brut, auquel le conteneur peut accéder à l'adresse /dev/block :

apiVersion: v1
kind: Pod
metadata:
  name: raw-volume-test-pod
spec:
  containers:
  - name: raw-volume-test
    image: centos
    command: ["/bin/sh"]
    volumeDevices:
    - name: raw-volume
      devicePath: /dev/block
  volumes:
  - name: raw-volume
    persistentVolumeClaim:
      claimName: pvc-raw-block-volume

Après avoir créé le pod, vous pouvez vérifier que la demande de volume persistant a été liée à un nouveau volume persistant en saisissant la commande suivante :

kubectl get pvc

La sortie de la commande ci-dessus confirme que la demande de volume persistant a été liée :

			
NAME                    STATUS    VOLUME                               CAPACITY   ACCESSMODES   STORAGECLASS        AGE
pvc-raw-block-volume    Bound     ocid1.volume.oc1.iad.<unique_ID>     50Gi       RWO           oci-bv              4m

Vous pouvez vérifier que le pod utilise la nouvelle demande de volume persistant en saisissant ce qui suit :

kubectl describe pod raw-volume-test-pod

Vous ne pouvez pas modifier ultérieurement si le volume de blocs qui soutient une demande de volume persistant est configuré en tant que volume de blocs brut ou en tant que système de fichiers monté. Au lieu de cela, vous devez créer une demande de volume persistant et définir volumeMode: de manière appropriée dans le manifeste de demande de volume persistant.

Remarque

Les volumes de blocs bruts ne sont pas pris en charge pour les volumes de blocs à performances très élevées.

Définition du volume de blocs brut accessModes sur ReadWriteOnce ou ReadWriteMany

Lorsque vous voulez qu'un volume de blocs brut soit monté exclusivement par un seul pod à un moment donné (par exemple, lorsque l'accès simultané au même volume par plusieurs pods peut entraîner une corruption des données ou des incohérences), définissez accessModes sur ReadWriteOnce dans le manifeste de demande de volume persistant. Le mode ReadWriteOnce est le mode d'accès le plus courant et le plus par défaut.

Lorsque vous voulez qu'un volume de blocs brut soit accessible simultanément par plusieurs pods (par exemple, lorsque plusieurs pods exécutés sur différents noeuds ont besoin d'un accès simultané au même stockage partagé), définissez accessModes sur ReadWriteMany dans le manifeste PVC. Il est de votre responsabilité de mettre en place les contrôles d'accès et les droits d'accès appropriés pour garantir l'intégrité des données lorsque vous indiquez ReadWriteMany comme mode d'accès.

Tenez compte des éléments suivants :

  • Vous ne pouvez pas mettre à jour le mode d'accès d'une demande de volume persistant de ReadWriteOnce vers ReadWriteMany. De même, vous ne pouvez pas mettre à jour le mode d'accès d'une demande de volume persistant de ReadWriteMany vers ReadWriteOnce.
  • Vous pouvez uniquement indiquer ReadWriteMany comme mode d'accès pour les demandes de volume persistant soutenues par des volumes de blocs bruts.