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.
- 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.
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 stockageoci-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 stockageoci
est utilisée par le module d'extension de volume FlexVolume.
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 :
- 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"}}}'
- 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'objetVolumeSnapshotClass
. 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
etVolumeSnapshotContent
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 objetsVolumeSnapshot
etVolumeSnapshotContent
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.
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 objetsVolumeSnapshot
.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. Indiquezincremental
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'objetVolumeSnapshot
associé est supprimé. IndiquezRetain
pour conserver une sauvegarde de volume de blocs si l'objetVolumeSnapshot
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
volumeSnapshotClassName: my-snapclass
indiquemy-snapclass
en tant qu'objetVolumeSnapshotClass
à partir duquel obtenir les paramètres à utiliser lors de la création de la sauvegarde de volume de blocs. Vous ne pouvez pas modifiervolumeSnapshotClassName
après avoir créé l'objetVolumeSnapshot
(vous devez créer un objetVolumeSnapshot
).persistentVolumeClaimName: sample-pvc
indiquesample-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'objetVolumeSnapshot
(vous devez créer un objetVolumeSnapshot
).
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
deletionPolicy: Retain
indique ce qui arrive à une sauvegarde de volume de blocs si l'objetVolumeSnapshot
associé est supprimé. IndiquezDelete
pour supprimer une sauvegarde de volume de blocs si l'objetVolumeSnapshot
associé est supprimé.driver: blockvolume.csi.oraclecloud.com
indique d'utiliser le module d'extension de volume CSI pour provisionner les objetsVolumeSnapshot
.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'objetVolumeSnapshot
correspondant à provisionner à partir de la sauvegarde de volume de blocs existante. Ce champ est obligatoire. L'objetVolumeSnapshot
n'a pas besoin d'exister lorsque vous créez l'objetVolumeSnapshotContent
.namespace: default
indique l'espace de noms contenant l'objetVolumeSnapshot
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
où 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'objetVolumeSnapshot
à 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
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 suriscsi
ouparavirtualized
. - 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 :
- Créez une clé de cryptage maître appropriée dans Vault (ou obtenez l'OCID d'une telle clé). Reportez-vous à Gestion des clés.
- Créez une stratégie accordant l'accès à la clé de cryptage maître. Reportez-vous à Création d'une stratégie pour accéder aux clés de cryptage gérées par l'utilisateur pour le cryptage de volumes d'initialisation, de volumes de blocs et/ou de systèmes de fichiers
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 :
- Créez une clé de cryptage maître appropriée dans Vault (ou obtenez l'OCID d'une telle clé). Reportez-vous à Gestion des clés.
- Créez une stratégie accordant l'accès à la clé de cryptage maître. Reportez-vous à Création d'une stratégie pour accéder aux clés de cryptage gérées par l'utilisateur pour le cryptage de volumes d'initialisation, de volumes de blocs et/ou de systèmes de fichiers
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 avecallowVolumeExpansion: true
dans les clusters exécutant Kubernetes 1.19 ou une version ultérieure. Les définitions des classes de stockageoci-bv
dans les clusters existants exécutant Kubernetes 1.19 ou une version ultérieure sont automatiquement modifiées pour définirallowVolumeExpansion: 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 :
- 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 :
- 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 :
- Formes prises en charge pour les noeuds gérés et les noeuds virtuels pour les formes prises en charge par le moteur Kubernetes
- Détails des performances des formes d'instance pour les formes qui prennent en charge le niveau Performances très élevées.
- 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
- 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.
- 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 :
- A propos du module d'extension de gestion des volumes de blocs, reportez-vous à Activation du module d'extension de gestion des volumes de blocs.
- A propos de l'écriture de scripts cloud-init personnalisés, reportez-vous à Utilisation de scripts d'initialisation cloud-init personnalisés pour configurer des noeuds gérés.
- 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
-
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 :
-
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
- 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.
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.
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.
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
versReadWriteMany
. De même, vous ne pouvez pas mettre à jour le mode d'accès d'une demande de volume persistant deReadWriteMany
versReadWriteOnce
. - Vous pouvez uniquement indiquer
ReadWriteMany
comme mode d'accès pour les demandes de volume persistant soutenues par des volumes de blocs bruts.