Provisionnement de revendications de volume persistant dans le service de volumes par blocs
Découvrez comment provisionner des revendications de volume persistant pour les grappes que vous avez créées à l'aide de Kubernetes Engine (OKE) en attachant des volumes à partir du service de volume par blocs.
- De nouvelles fonctionnalités sont uniquement ajoutées au plugiciel de volume CSI, et non au plugiciel de volume FlexVolume (bien que les développeurs Kubernetes continuent de tenir à jour le plugiciel de volume FlexVolume).
- Le plugiciel de volume CSI ne nécessite pas l'accès au système d'exploitation sous-jacent ni aux dépendances du système de fichiers racine.
Le projet Kubernetes en amont est en train d'abandonner le plugiciel de volume FlexVolume dans Kubernetes version 1.23. La suppression de la fonction respectera les directives de la politique d'amortissement de Kubernetes.
Nous vous recommandons de migrer les charges de travail existantes du plugiciel de volume FlexVolume vers le plugiciel de volume CSI. Pour les instructions de migration, voir Migration du plugiciel de volume FlexVolume vers le plugiciel de volume CSI.
La ressource StorageClass spécifiée pour une revendication de volume persistant détermine le plugiciel de volume utilisé pour la connexion aux volumes du service Volumes par blocs. Deux classes de stockage sont définies par défaut, oci-bv
pour le plugiciel de volume CSI et oci
pour le plugiciel FlexVolume. Si vous ne spécifiez pas explicitement la valeur storageClassName
dans le fichier yaml qui définit la PVC, la classe de stockage par défaut de la grappe est utilisée. La classe de stockage par défaut de la grappe est initialement définie en fonction de la version de Kubernetes spécifiée lors de la création de la grappe, comme suit :
- Dans les grappes créées par le moteur Kubernetes pour exécuter Kubernetes version 1.24 (ou ultérieure), la classe de stockage
oci-bv
est initialement définie comme classe par défaut. La classe de stockageoci-bv
est utilisée par le plugiciel de volume CSI. - Dans les grappes créées par le moteur Kubernetes pour exécuter Kubernetes version 1.23 (ou antérieure), la classe de stockage
oci
est initialement définie comme classe par défaut. La classe de stockageoci
est utilisée par le plugiciel de volume FlexVolume.
Dans les grappes créées à l'origine par Kubernetes Engine pour exécuter Kubernetes version 1.23 (ou antérieure), puis mises à niveau vers Kubernetes version 1.24 (ou ultérieure), la classe de stockage par défaut n'est pas modifiée pendant le processus de mise à niveau. Ainsi, 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'une grappe que vous avez mise à niveau de Kubernetes version 1.23 (ou antérieure) à Kubernetes version 1.24 (ou ultérieure), modifiez la classe de stockage par défaut comme suit :
- Spécifiez que
oci
n'est pas la classe de stockage par défaut en entrant :kubectl patch storageclass oci -p '{"metadata": {"annotations": {"storageclass.beta.kubernetes.io/is-default-class":"false"}}}'
- Spécifiez que
oci-bv
est la classe de stockage par défaut en entrant :kubectl patch storageclass oci-bv -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class":"true"}}}'
Dans le cas du plugiciel de volume CSI, la fonction de topologie CSI garantit que les noeuds de travail et les volumes se trouvent dans le même domaine de disponibilité. Dans le cas du plugiciel de volume FlexVolume, vous pouvez utiliser l'élément matchLabels
pour sélectionner le domaine de disponibilité dans lequel une revendication de volume persistant est provisionnée. Notez que l'élément matchLabels
ne doit pas être utilisé avec le plugiciel de volume CSI.
Quel que soit le plugiciel de volume que vous choisissez d'utiliser, si une grappe ne se trouve pas dans le même compartiment que ses noeuds de travail, vous devez créer une politique supplémentaire pour activer l'accès aux volumes du service Volumes par blocs. Cette situation survient lorsque le sous-réseau spécifié pour un groupe de noeuds appartient à un compartiment différent de la grappe. Pour permettre aux noeuds de travail d'accéder aux volumes du service Volumes par blocs, créez la politique supplémentaire avec les énoncés suivants :
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'
Pour spécifier explicitement le plugiciel de volume à utiliser pour la connexion au service Volumes par blocs lors du provisionnement d'une revendication de volume persistant, spécifiez une valeur pour storageClassName
dans le fichier yaml qui définit la revendication :
- Pour utiliser le plugiciel de volume CSI, spécifiez
storageClassName: "oci-bv"
- Pour utiliser le plugiciel de volume FlexVolume, spécifiez
storageClassName: "oci"
Notez ce qui suit :
- La quantité minimale de stockage persistant qu'une revendication de volume persistant peut demander est de 50 gigaoctets. Si la demande est inférieure à 50 gigaoctets, elle est arrondie à cette valeur.
- Si vous voulez pouvoir augmenter la quantité de stockage persistant qu'une revendication de volume persistant peut demander, définissez
allowVolumeExpansion: true
dans la définition de la classe de stockage spécifiée pour la revendication de volume persistant. Voir Développement d'un volume par blocs. - Lorsque vous créez une grappe, vous pouvez éventuellement définir des marqueurs à appliquer aux volumes par blocs créés lorsque des revendications de volume persistant (PVC) sont définies. Le service de marquage vous permet de regrouper des ressources disparates dans différents compartiments et d'annoter des ressources avec vos propres métadonnées. Voir Application de marqueurs aux volumes par blocs.
- Après avoir créé une revendication de volume persistant sur un nouveau volume par blocs à l'aide du plugiciel de volume CSI, vous pouvez voir les statistiques de capacité pour le volume par blocs à l'aide d'un outil d'agrégation de mesures (comme Prometheus), 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 revendication de volume persistant sur un volume par blocs à l'aide du plugiciel de volume CSI
Vous pouvez provisionner dynamiquement un volume par blocs à l'aide du plugiciel CSI spécifié par la définition de la classe de stockage oci-bv
(provisioner: blockvolume.csi.oraclecloud.com
). Par exemple, si l'administrateur de grappe n'a créé aucun volume persistant approprié correspondant à la demande de PVC.
La revendication de volume persistant est définie dans un fichier nommé 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 revendication 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 revendication de volume persistant :
persistentvolumeclaim "mynginxclaim" created
Vérifiez que la revendication de volume persistant a été créée en exécutant kubectl get pvc
:
kubectl get pvc
La sortie de la commande ci-dessus montre l'état courant de la revendication 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 revendication de volume persistant lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un nouveau pod à partir de la définition de pod suivante, qui demande au système d'utiliser la revendication de volume persistant mynginxclaim en tant que volume nginx, monté par le pod sur /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 nouveau pod, vous pouvez vérifier que la revendication de volume persistant a été liée à un nouveau volume persistant en entrant :
kubectl get pvc
La sortie de la commande ci-dessus confirme que la revendication 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 revendication de volume persistant en entrant :
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 instantané de volume à partir d'une sauvegarde de volume par blocs à l'aide du plugiciel 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, voir Instantanés de volume dans la documentation sur Kubernetes.
Lorsque vous utilisez le plugiciel de volume CSI pour connecter des grappes à des volumes par blocs dans le service de volume par blocs, vous pouvez utiliser des sauvegardes de volume par blocs pour provisionner des instantanés de volume Kubernetes. Vous pouvez utiliser un instantané de volume pour créer un nouveau volume par blocs et le préalimenter avec des données provenant de la sauvegarde de volume par blocs. Pour plus d'informations sur les sauvegardes de volume par blocs dans le service de volume par blocs, voir Aperçu des sauvegardes de volume par blocs.
Vous pouvez utiliser le plugiciel de volume CSI pour provisionner un instantané de volume de l'une des deux façons suivantes :
- Dynamiquement : Vous pouvez demander la création d'une sauvegarde du provisionnement d'un volume par blocs persistant. Vous spécifiez la revendication de volume persistant à l'aide de l'objet
VolumeSnapshot
et vous spécifiez les paramètres à utiliser pour créer la sauvegarde de volume par blocs à l'aide de l'objetVolumeSnapshotClass
. Les instantanés de volume provisionnés dynamiquement sont également appelés instantanés de volume dynamiques. Voir Création d'instantanés de volume provisionnés dynamiquement. - Statiquement : Vous pouvez fournir les détails d'une sauvegarde de volume par blocs existante à l'aide de l'objet
VolumeSnapshotContent
. Les instantanés de volume provisionnés statiquement sont également appelés instantanés de volume statique, et instantanés de volume préprovisionnés. Création d'instantanés de volume provisionnés statiquement
Lorsque vous créez un instantané de volume provisionné dynamiquement, les mêmes marqueurs à structure libre et marqueurs définis qui ont été appliqués au volume par blocs source sont appliqués à la sauvegarde du volume par blocs. Toutefois, vous pouvez utiliser des paramètres pour appliquer des marqueurs supplémentaires à la sauvegarde de volume par blocs (voir Marquage des sauvegardes de volume par blocs).
Il existe un certain nombre de préalables à respecter avant de créer des instantanés de volume à utiliser avec les grappes créées par le moteur Kubernetes. Voir Préalables à la création d'instantanés de volume.
Notez ce qui suit lors de la création et de l'utilisation d'instantanés de volume :
- Vous ne pouvez créer des instantanés de volume que lorsque vous utilisez le plugiciel de volume CSI (c'est-à-dire que vous ne pouvez pas créer d'instantanés de volume lorsque vous utilisez le plugiciel de volume FlexVolume).
- Dans le cas des sauvegardes de volume dynamiques, le plugiciel de volume CSI crée une nouvelle sauvegarde de volume par blocs pour provisionner un instantané de volume dynamique dans le même compartiment que la grappe. Dans le cas d'instantanés de volume statiques, le provisionnement d'un instantané de volume statique par la sauvegarde du volume par blocs peut se trouver dans un compartiment différent de celui de la grappe, à condition que des énoncés de politique appropriés existent pour permettre à la grappe d'accéder à cet autre compartiment (voir Préalables à la création d'instantanés de volume).
- Vous ne pouvez pas utiliser le plugiciel de volume CSI pour recharger 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 à un état antérieur en modifiant l'instantané de volume spécifié dans le manifeste de la revendication de volume persistant. Vous ne pouvez utiliser le plugiciel de volume CSI que pour alimenter un nouveau volume avec des données.
- Lorsque vous créez une sauvegarde de volume par blocs (par exemple, lors de la création d'un instantané de volume dynamique), la clé de chiffrement utilisée lors de la création du volume par blocs est également utilisée pour créer la sauvegarde de volume par blocs. Vous ne pouvez pas spécifier une nouvelle clé de chiffrement lors de la création d'une sauvegarde de volume par blocs. La sauvegarde de volume par blocs utilise donc le même chiffrement que le volume par 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 initial à partir duquel l'instantané a été créé.
- Lorsque le plugiciel de volume CSI crée un nouveau volume par blocs pour sauvegarder un volume persistant provisionné par un instantané de volume, le positionnement du volume par blocs dépend des exigences de topologie de la demande de création de volume. Par exemple, si le plugiciel de volume CSI crée un volume par blocs pour un pod qui utilise une revendication de volume persistant, le volume par blocs est créé dans le même domaine de disponibilité que le noeud de travail sur lequel le pod est exécuté.
- Les instantanés inter-espaces de noms ne sont pas pris en charge.
- À mesure que le nombre d'objets
VolumeSnapshot
etVolumeSnapshotContent
dans une grappe augmente, ils peuvent consommer de l'espace important dans etcd, ce qui peut entraîner un comportement de grappe inattendu. Pour que la grappe reste saine, nous vous recommandons de mettre en oeuvre un mécanisme d'épuration pour nettoyer régulièrement les objetsVolumeSnapshot
etVolumeSnapshotContent
qui ne sont plus requis.
Préalables à la création d'instantanés de volume
Pour créer des instantanés de volume à utiliser avec des grappes créées par le moteur Kubernetes :
- les noeuds de plan de contrôle de la grappe doivent exécuter Kubernetes version 1.24 ou ultérieure
- les noeuds de travail de la grappe doivent utiliser des formes de calcul de processeur basées sur x86 ou ARM
- les noeuds de travail de la grappe 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 de base. Par conséquent, avant de créer des instantanés de volume à l'aide du plugiciel de volume CSI, vous devez installer les fichiers CRD (Custom Resource Definition) nécessaires sur la grappe, 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 instantané de volume provisionné statiquement pour provisionner un nouveau volume persistant, et que la sauvegarde du volume par blocs sous-jacent se trouve dans un compartiment différent de celui de la grappe, des énoncés de politique appropriés doivent exister pour permettre à la grappe d'accéder aux sauvegardes de volume par blocs dans 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 instantané de volume en créant une sauvegarde du provisionnement d'un volume par blocs pour une revendication de volume persistant, vous définissez d'abord un objet VolumeSnapshotClass
qui spécifie le type de sauvegarde de volume par blocs à créer. Après avoir créé l'objet VolumeSnapshotClass
, vous définissez ensuite un objet VolumeSnapshot
qui utilise VolumeSnapshotClass
. Vous utilisez l'objet VolumeSnapshot
pour spécifier la revendication de volume persistant provisionnée par le volume par blocs que vous voulez sauvegarder.
Lorsque vous créez un instantané de volume provisionné dynamiquement, le moteur Kubernetes crée un objet
VolumeSnapshotContent
. Ne modifiez pas les objets VolumeSnapshotContent
créés par le moteur Kubernetes et ne créez pas vos propres objets VolumeSnapshotContent
lors de la création d'instantanés de volume provisionnés dynamiquement.Par exemple, vous définissez une revendication de volume persistant nommée sample-pvc dans un fichier nommé csi-mypvctobackup.yaml, provisionné par un volume par blocs :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sample-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: "oci-bv"
resources:
requests:
storage: 50Gi
Créez une revendication de volume persistant :
kubectl create -f csi-mypvctobackup.yaml
Vous pouvez utiliser la revendication de volume persistant lors de la définition d'autres objets, tels que des pods. Par exemple, la définition de pod suivante demande au système d'utiliser la revendication de volume persistant sample-pvc en tant que volume nginx, monté par le pod sur /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
Après avoir créé le nouveau pod, la revendication de volume persistant est liée à un nouveau volume persistant provisionné par un volume par blocs.
Pour créer une sauvegarde du provisionnement du volume par blocs pour la revendication de volume persistant, vous définissez des paramètres pour la sauvegarde du volume par 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
spécifie le plugiciel de volume CSI pour provisionner les objetsVolumeSnapshot
.parameters.backupType: full
indique qu'une sauvegarde de volume par blocs doit inclure toutes les modifications depuis la création du volume par blocs. Spécifiezincremental
pour créer une sauvegarde avec uniquement les modifications effectuées depuis la dernière sauvegarde. Notez que pour la récupération de données, il n'y a pas de différence fonctionnelle entre une sauvegarde incrémentielle et une sauvegarde complète. Voir Type de sauvegarde de volume.deletionPolicy: Delete
indique ce qui se passe pour une sauvegarde de volume par blocs si l'objetVolumeSnapshot
associé est supprimé. SpécifiezRetain
pour conserver une sauvegarde de volume par blocs si l'objetVolumeSnapshot
associé est supprimé.
Par défaut, les mêmes marqueurs à structure libre et les mêmes marqueurs définis qui ont été appliqués au volume par blocs source sont appliqués à la sauvegarde du volume par blocs. Toutefois, vous pouvez utiliser des paramètres pour appliquer des marqueurs supplémentaires à la sauvegarde de volume par blocs (voir Marquage des sauvegardes de volume par blocs).
Créez l'objet VolumeSnapshotClass
:
kubectl create -f csi-mysnapshotclass.yaml
Pour créer une sauvegarde du provisionnement du volume par blocs pour la revendication de volume persistant, vous définissez ensuite un objet VolumeSnapshot
en tant qu'instantané my 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
spécifiemy-snapclass
comme objetVolumeSnapshotClass
à partir duquel obtenir les paramètres à utiliser lors de la création de la sauvegarde de volume par blocs. Notez que vous ne pouvez pas modifiervolumeSnapshotClassName
après avoir créé l'objetVolumeSnapshot
(vous devez créer un nouvel objetVolumeSnapshot
).persistentVolumeClaimName: sample-pvc
indiquesample-pvc
en tant que revendication de volume persistant basée sur le volume par blocs pour lequel vous voulez créer une sauvegarde de volume par blocs. Notez que vous ne pouvez pas modifier la source après avoir créé l'objetVolumeSnapshot
(vous devez créer un nouvel 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 par blocs. Vous pouvez utiliser l'instantané de volume pour provisionner un nouveau volume persistant (voir Utilisation d'un instantané de volume pour provisionner un nouveau volume).
Création d'instantanés de volume provisionnés statiquement
Pour provisionner statiquement un instantané de volume à partir d'une sauvegarde de volume par blocs existante, vous devez d'abord créer la sauvegarde (voir Création d'une sauvegarde manuelle pour un volume par blocs).
Après avoir créé la sauvegarde de volume par blocs, définissez un objet VolumeSnapshotContent
et spécifiez les détails (y compris l'OCID) de la sauvegarde de volume par blocs existante. Vous pouvez ensuite définir un objet VolumeSnapshot
et spécifier l'objet VolumeSnapshotContent
qui fournit les détails de la sauvegarde de volume par blocs existante.
Par exemple, vous définissez l'objet VolumeSnapshotContent
en tant que mon-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 se passe pour une sauvegarde de volume par blocs si l'objetVolumeSnapshot
associé est supprimé. SpécifiezDelete
pour supprimer une sauvegarde de volume par blocs si l'objetVolumeSnapshot
associé est supprimé.driver: blockvolume.csi.oraclecloud.com
spécifie d'utiliser le plugiciel de volume CSI pour provisionner les objetsVolumeSnapshot
.snapshotHandle: ocid1.volumebackup.oc1.iad.aaaaaa______xbd
indique l'OCID de la sauvegarde de volume par blocs existante.volumeSnapshotRef.name: my-static-snapshot
indique le nom de l'objetVolumeSnapshot
correspondant à provisionner à partir de la sauvegarde de volume par blocs existante. Ce champ est obligatoire. Notez que 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 par blocs existante. Ce champ est obligatoire.
Créez l'objet VolumeSnapshotContent
:
kubectl create -f csi-mystaticsnapshotcontent.yaml
Vous définissez l'objet VolumeSnapshot
provisionné statiquement en tant qu'instantané 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. Notez que vous ne pouvez pas modifier la source après avoir créé l'objet VolumeSnapshot
(vous devez créer un nouvel 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 par blocs spécifiée dans l'objet VolumeSnapshotContent
. Vous pouvez utiliser l'instantané de volume pour provisionner un nouveau volume persistant (voir Utilisation d'un instantané de volume pour provisionner un nouveau volume).
Utilisation d'un instantané de volume pour provisionner un nouveau volume
Après avoir créé un instantané de volume provisionné dynamiquement ou provisionné statiquement, vous pouvez spécifier l'instantané de volume en tant que source de données pour une revendication de volume persistant afin de provisionner un nouveau volume persistant.
Par exemple, vous définissez une revendication 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
spécifie l'instantané de test comme nom de l'objetVolumeSnapshot
à utiliser comme source de données pour le volume persistant.datasource.apiGroup: snapshot.storage.k8s.io
indique la version de l'API de stockage d'instantanés Kubernetes à utiliser.
Créez une revendication de volume persistant :
kubectl create -f csi-mypvcfromsnapshot.yaml
Lorsque la revendication 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 spécifié est utilisé pour alimenter le volume par blocs sous-jacent. Par exemple, vous pouvez créer un nouveau module de réseautage à partir de la définition de module de réseautage suivante qui demande au système d'utiliser la PVC PVC-fromsnapshot en tant que volume nginx, monté par le module de réseautage sur /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
Après avoir créé le nouveau pod, la revendication de volume persistant est liée à un nouveau volume persistant provisionné par un nouveau volume par blocs alimenté par l'objet VolumeSnapshot
.
Marquage des sauvegardes de volume par blocs
Lorsque vous utilisez le plugiciel de volume CSI pour créer un instantané de volume provisionné dynamiquement, les mêmes marqueurs à structure libre et les mêmes marqueurs définis qui ont été appliqués au volume par blocs source sont également appliqués à la sauvegarde du volume par blocs.
Pour appliquer des marqueurs à structure libre supplémentaires à la nouvelle sauvegarde de volume par 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 marqueurs définis supplémentaires à la nouvelle sauvegarde de volume par 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 revendication de volume persistant en clonant un volume par blocs existant à l'aide du plugiciel de volume CSI
Un clone de Kubernetes est un double exact d'un volume persistant existant sur un système de stockage. Vous pouvez cloner un volume persistant existant pour provisionner une nouvelle revendication 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 aucune incidence sur un environnement de production. Pour plus d'informations sur les clones Kubernetes, voir Clonage de volume CSI dans la documentation sur Kubernetes.
Dans le service de volume par blocs, vous pouvez cloner un volume par blocs pour créer un nouveau volume par blocs préalimenté avec des données du volume par blocs source. Pour plus d'informations sur le clonage de volumes par blocs dans le service de volume par blocs, voir Clonage d'un volume par blocs.
Lorsque vous utilisez le plugiciel de volume CSI pour connecter des grappes aux volumes par blocs du service de volume par blocs, vous pouvez provisionner une nouvelle revendication de volume persistant avec un nouveau volume par blocs qui a été cloné à partir d'un volume par blocs existant provisionnant une autre revendication de volume persistant existante. Pour indiquer que vous voulez que le plugiciel de volume CSI clone le volume par blocs existant pour la nouvelle revendication de volume persistant, vous spécifiez la revendication de volume persistant existante comme source de données pour la nouvelle revendication de volume persistant.
La nouvelle revendication de volume persistant peut être utilisée de la même manière que n'importe quelle autre revendication de volume persistant et est entièrement distincte de la revendication de volume persistant existante spécifiée comme source de données. De même, le nouveau volume par blocs et le volume par blocs existant à partir duquel il est cloné sont des ressources entièrement distinctes qui peuvent être mises à jour, clonées, instantanées et supprimées indépendamment l'une de l'autre.
Dès que le volume par blocs source a été cloné et qu'un nouveau volume par blocs a été créé (généralement en quelques secondes), le nouveau volume par blocs a l'état Disponible. Toutes les données présentes dans le volume par blocs source à ce moment sont copiées vers le nouveau volume par blocs (aucune modification ultérieure n'est copiée). Toutefois, les données sont copiées en arrière-plan, ce qui peut prendre jusqu'à trente minutes en fonction de la taille du volume par blocs (par exemple, la copie d'un volume par blocs de 1 To peut prendre jusqu'à quinze minutes). Par conséquent, pour éviter la possibilité d'erreurs ou de corruption de données, la nouvelle revendication de volume persistant a l'état En attente jusqu'à ce que toutes les données aient été copiées. Lorsque toutes les données ont été copiées, la nouvelle revendication de volume persistant est liée à la valeur actualisée provisionnée par le nouveau volume par blocs et la nouvelle revendication de volume persistant a l'état Disponible.
Il existe un certain nombre de préalables à respecter avant de provisionner une nouvelle revendication de volume persistant en clonant le volume par blocs qui provisionne déjà une revendication de volume persistant existante. Voir Préalables au clonage d'un volume par blocs existant pour provisionner une nouvelle revendication de volume persistant.
Notez ce qui suit lors du clonage d'un volume par blocs pour provisionner une nouvelle revendication de volume persistant :
- Le plugiciel de volume CSI crée le nouveau volume par blocs dans le même domaine de disponibilité, la même région et la même location que le volume par blocs source.
- Le nouveau volume par blocs créé par le plugiciel de volume CSI peut lui-même être cloné dès qu'il a l'état Disponible.
- Toutes les exigences de topologie dans une demande de création de volume sont ignorées. Par exemple, si le plugiciel de volume CSI clone un volume par blocs pour un pod qui utilise une revendication de volume persistant, le nouveau volume par blocs est créé dans le même domaine de disponibilité que le noeud de travail sur lequel le pod est exécuté.
- Vous ne pouvez pas utiliser le plugiciel de volume CSI pour cloner des volumes par blocs créés par le plugiciel de volume FlexVolume.
- Vous ne pouvez pas supprimer la revendication de volume persistant source lorsque le clonage est en cours. De même, vous ne pouvez pas supprimer un volume par blocs source lorsque des données sont copiées vers un volume par blocs qui a été cloné à partir de celui-ci.
- Le clonage inter-espaces de noms n'est pas pris en charge. La nouvelle revendication de volume persistant et la revendication 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 revendication de volume persistant. Si vous spécifiez explicitement une classe de stockage pour la nouvelle revendication 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 revendication de volume persistant source. Si vous ne spécifiez pas de classe de stockage pour la nouvelle revendication de volume persistant, la classe de stockage par défaut est utilisée.
Préalables au clonage d'un volume par blocs existant pour provisionner une nouvelle revendication de volume persistant
Pour provisionner une nouvelle revendication de volume persistant en clonant le volume par blocs qui provisionne déjà une revendication de volume persistant existante :
- Les noeuds de plan de contrôle de la grappe doivent exécuter Kubernetes version 1.25 ou ultérieure.
- Les noeuds de travail de la grappe doivent utiliser des formes de calcul de processeur basées sur x86 ou ARM.
- Les noeuds de travail de la grappe doivent exécuter Oracle Linux 7, Oracle Linux 8 ou Ubuntu.
- La revendication de volume persistant existante que vous spécifiez en tant que source de données pour la nouvelle revendication de volume persistant doit :
- Déjà lié à une PV provisionnée par un volume par blocs.
- Avoir l'état Disponible.
- La nouvelle taille du volume par blocs doit être identique ou supérieure à celle du volume par blocs source à partir duquel il est cloné. Si vous spécifiez une valeur de stockage pour la nouvelle revendication de volume persistant supérieure au volume par blocs source, le nouveau volume par blocs est dimensionné en conséquence. Vous ne pouvez pas spécifier une valeur de stockage pour la nouvelle revendication de volume persistant inférieure au volume par blocs que vous voulez cloner ou inférieure à la valeur de stockage de la revendication de volume persistant source.
- Le type de système de fichiers spécifié pour le nouveau volume par blocs doit être identique au type de système de fichiers du volume par blocs source à partir duquel il est cloné (voir Spécification des types de système de fichiers pour les volumes par blocs).
Clonage d'un volume par blocs existant pour provisionner une nouvelle revendication de volume persistant
Pour provisionner une nouvelle revendication de volume persistant en clonant le volume par blocs qui provisionne déjà une revendication de volume persistant existante, vous spécifiez la revendication de volume persistant existante comme dataSource
de la nouvelle revendication de volume persistant.
Par exemple, vous définissez une revendication de volume persistant nommée my-clone-pvc dans un fichier nommé csi-myclonepvc.yaml. La revendication de volume persistant my-clone-pvc est provisionnée par un volume par blocs créé par clonage du volume par blocs qui provisionne la revendication 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 une revendication de volume persistant :
kubectl create -f csi-myclonepvc.yaml
Vous pouvez utiliser la revendication de volume persistant lors de la définition d'autres objets, tels que des pods. Par exemple, la définition de pod suivante demande au système d'utiliser la revendication de volume persistant my-clone-pvc en tant que volume nginx, monté par le pod sur /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
Après avoir créé le nouveau pod, la revendication de volume persistant my-clone-pvc est liée à un nouveau volume persistant provisionné par un volume par blocs qui a été cloné à partir du provisionnement du volume par blocs de la revendication de volume persistant my-source-pvc.
Marquage de volumes par blocs clonés
Lorsque vous utilisez le plugiciel de volume CSI pour provisionner un volume persistant en clonant un volume par blocs provisionnant une autre revendication de volume persistant, les mêmes marqueurs à structure libre et les mêmes marqueurs définis qui ont été appliqués au volume par blocs source sont également appliqués au nouveau volume par blocs. Le plugiciel de volume CSI n'applique aucun marqueur supplémentaire au nouveau volume par blocs.
Création d'une revendication de volume persistant à partir d'un volume par blocs ou d'une sauvegarde existant à l'aide du plugiciel de volume FlexVolume
Vous pouvez créer une revendication de volume persistant à partir d'un volume par blocs existant ou d'une sauvegarde de volume par blocs pour une utilisation par le plugiciel de volume FlexVolume. Par exemple, si l'administrateur de grappe a créé une sauvegarde de volume par blocs à utiliser lors du provisionnement d'une nouvelle revendication de volume persistant. Une telle sauvegarde de volume par blocs peut être fournie avec des données prêtes à être utilisées par d'autres objets tels que des pods.
La PVC est définie dans un fichier nommé flex-pvcfrombackup.yaml. Vous utilisez l'élément d'annotation volume.beta.kubernetes.io/oci-volume-source
pour spécifier la source du volume par blocs à utiliser lors du provisionnement d'une nouvelle revendication de volume persistant à l'aide du plugiciel de volume FlexVolume. Vous pouvez spécifier l'OCID d'un volume par blocs ou d'une sauvegarde de volume par blocs en tant que valeur de l'annotation. Dans cet exemple, vous spécifiez l'OCID de la sauvegarde de volume par blocs créée par l'administrateur de la grappe. 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
Notez que le fichier flex-pvcfrombackup.yaml comprend l'élément matchLabels
, qui n'est applicable que dans le cas du plugiciel de volume FlexVolume.
Entrez la commande suivante pour créer la revendication 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 revendication de volume persistant :
persistentvolumeclaim "myvolume" created
Vérifiez que la revendication de volume persistant a été créée et liée à un nouveau volume persistant créé à partir de la sauvegarde de volume en entrant :
kubectl get pvc
La sortie de la commande ci-dessus montre l'état courant de la revendication 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 nouveau 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 demande au système d'utiliser la revendication de volume persistant myvolume en tant que volume nginx, monté par le pod sur /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 nouveau pod, vous pouvez vérifier qu'il est en cours d'exécution et qu'il utilise la nouvelle revendication de volume persistant en entrant :
kubectl describe pod nginx
Dans l'exemple FlexVolume de cette rubrique, la revendication de volume persistant demande du stockage dans un domaine de disponibilité dans la région Ashburn à l'aide de l'étiquette topology.kubernetes.io/zone
. Pour plus d'informations sur l'utilisation de cette étiquette (et sur les versions raccourcies des noms de domaine de disponibilité à spécifier), voir topology.kubernetes.io/zone.
Chiffrement des données au repos et des données en transit avec le service de volume par blocs
Le service Oracle Cloud Infrastructure Block Volume chiffre toujours tous les volumes par blocs et toutes les sauvegardes de volume au repos à l'aide de l'algorithme Avancé de chiffrement standard (AES) avec un chiffrement de 256 bits. Par défaut, tous les volumes et leurs sauvegardes sont chiffrés au moyen des clés de chiffrement fournies par Oracle. Chaque fois qu'un volume est cloné ou restauré à partir d'une sauvegarde, une nouvelle clé de chiffrement unique lui est affectée.
Vous avez la possibilité de chiffrer tous vos volumes et leurs sauvegardes à l'aide de clés que vous possédez et gérez au moyen du service de chambre forte. Pour plus d'informations, voir Gestion des clés. Si vous ne configurez pas un volume pour l'utilisation du service de chambre forte ou que vous dissociez ultérieurement une clé du volume, le service de volumes par blocs utilise à la place la clé de chiffrement fournie par Oracle. Cela s'applique à la fois au chiffrement au repos et en transit paravirtualisé.
Toutes les données transmises entre l'instance et le volume par blocs passent par un réseau interne très sécurisé. Si vous avez des exigences de conformité spécifiques relatives au chiffrement des données lors du transfert entre l'instance et le volume par blocs, le service Volumes par blocs permet d'activer le chiffrement en transit pour les attachements de volume paravirtualisés dans les instances de machine virtuelle. Certaines formes sans système d'exploitation prennent en charge le chiffrement en transit pour les volumes par blocs attachés iSCSI de l'instance.
Pour plus d'informations sur le chiffrement des volumes par blocs et sur la prise en charge du chiffrement en transit, voir Chiffrement des volumes par blocs.
Lorsque les PVC Kubernetes sont soutenus par le service de volume par blocs, vous choisissez comment les volumes par blocs sont chiffrés en spécifiant :
- Clé de chiffrement principale à utiliser, en définissant la propriété
kms-key-id
dans la définition de la classe de stockage Kubernetes. Vous pouvez spécifier l'OCID d'une clé de chiffrement principale dans le service de chambre forte. - Comment le volume par blocs est attaché à l'instance de calcul, en réglant la propriété
attachment-type
dans la définition de la classe de stockage Kubernetes àiscsi
ou àparavirtualized
. - Indique si le chiffrement en transit est activé pour chaque groupe de noeuds d'une grappe, en définissant la propriété
isPvEncryptionInTransitEnabled
du groupe de noeuds (à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le chiffrement en transit : du groupe de noeuds dans la console).
L'interaction des paramètres que vous spécifiez détermine comment les volumes par blocs sont chiffrés, comme indiqué dans le tableau :
Propriété du groupe de noeuds isPvEncryptionInTransitEnabled réglée à : |
Propriété de stockage class kms-key-id réglée à : |
Propriété attachment-type de classe de stockage réglée à |
Les données sont-elles chiffrées au repos? | Les données sont-elles chiffrées en transit? | Notes |
---|---|---|---|---|---|
true |
OCID d'une clé dans la chambre forte | paravirtualized |
Oui (clé gérée par l'utilisateur) | Oui (clé gérée par l'utilisateur) | |
true |
OCID d'une clé dans la chambre forte | iscsi |
Erreur | Erreur | Le PV ne peut pas être provisionné, car la propriété attachment-type doit être réglée à paravirtualized lorsque isPvEncryptionInTransitEnabled est réglé à True . |
true |
non réglée | paravirtualized |
Oui (clé gérée par Oracle) | Oui (clé gérée par Oracle) | |
true |
non réglée | iscsi |
Erreur | Erreur | Le PV ne peut pas être provisionné, car la propriété attachment-type doit être réglée à paravirtualized lorsque isPvEncryptionInTransitEnabled est réglé à True . |
false |
OCID d'une clé dans la chambre forte | paravirtualized |
Oui (clé gérée par l'utilisateur) | Non | |
false |
OCID d'une clé dans la chambre forte | iscsi |
Oui (clé gérée par l'utilisateur) | Non | |
false |
non réglée | paravirtualized |
Oui (clé gérée par Oracle) | Non | |
false |
non réglée | iscsi |
Oui (clé gérée par Oracle) | Non |
Avant de créer une grappe pour laquelle vous voulez gérer vous-même la clé de chiffrement principale, vous devez :
- Créez une clé de chiffrement principale appropriée dans la chambre forte (ou obtenez l'OCID d'une telle clé). Voir Gestion des clés.
- Créez une politique accordant l'accès à la clé de chiffrement principale. Voir Créer une politique pour accéder aux clés de chiffrement gérées par l'utilisateur pour chiffrer les volumes de démarrage, les volumes par blocs ou les systèmes de fichiers.
Pour plus d'informations sur la rotation des clés dans le service de chambre forte, voir Rotation d'une clé de chambre forte.
Exemple : Configuration d'une classe de stockage pour activer le chiffrement au repos et en transit à l'aide de la clé gérée par Oracle par défaut
Pour provisionner une revendication de volume persistant sur un volume par blocs, à l'aide d'une clé de chiffrement principale gérée par Oracle pour chiffrer les données au repos (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 revendication 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 revendication de volume persistant, réglez la propriété isPvEncryptionInTransitEnabled
de chaque groupe de noeuds à true
(à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le chiffrement en transit : du groupe de noeuds dans la console). Notez que le chiffrement des données en transit n'est pris en charge que dans certaines situations (voir Chiffrement des données au repos et des données en transit avec le service de volume par blocs).
Exemple : Configuration d'une classe de stockage pour activer le chiffrement au repos et en transit à l'aide d'une clé que vous gérez
Pour provisionner une revendication de volume persistant sur un volume par blocs, à l'aide d'une clé de chiffrement principale que vous gérez pour chiffrer les données au repos (et éventuellement en transit), vous devez :
- Créez une clé de chiffrement principale appropriée dans la chambre forte (ou obtenez l'OCID d'une telle clé). Voir Gestion des clés.
- Créez une politique accordant l'accès à la clé de chiffrement principale. Voir Créer une politique pour accéder aux clés de chiffrement gérées par l'utilisateur pour chiffrer les volumes de démarrage, les volumes par blocs ou les systèmes de fichiers.
Après avoir créé une clé et une stratégie de chiffrement principales 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
à l'OCID de la clé de chiffrement principale dans le service de chambre forte que vous voulez utiliser pour chiffrer 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 revendication 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 revendication de volume persistant, réglez la propriété isPvEncryptionInTransitEnabled
de chaque groupe de noeuds à true
(à l'aide de l'interface de ligne de commande, de l'API ou de l'option Utiliser le chiffrement en transit : du groupe de noeuds dans la console). Notez que le chiffrement des données en transit n'est pris en charge que dans certaines situations (voir Chiffrement des données au repos et des données en transit avec le service de volume par blocs).
Développement d'un volume par blocs
Lorsqu'une revendication de volume persistant est créée à l'aide du plugiciel de volume CSI (provisioner: blockvolume.csi.oraclecloud.com
), vous pouvez étendre la taille du volume en ligne. Ainsi, vous pouvez d'abord déployer 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 spécifiez pour la revendication 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 pour le plugiciel de volume CSI comporte allowVolumeExpansion: true
par défaut.
Pour développer la taille d'un volume, modifiez le manifeste en PVC et mettez à jour la taille du volume, puis appliquez le manifeste. Lorsque le disque est ensuite balayé pour permettre au système d'exploitation d'identifier la taille de volume étendue (ce qui peut prendre quelques minutes), l'espace de stockage augmenté est automatiquement disponible pour les pods utilisant la revendication de volume persistant. Il n'est pas nécessaire de redémarrer les pods.
Entrez la commande suivante pour confirmer que la revendication de volume persistant a été liée à un volume par blocs nouvellement agrandi :
kubectl get pvc <pvc_name> -o yaml
Notez ce qui suit :
- L'extension de volume est prise en charge dans les grappes exécutant Kubernetes version 1.19 ou ultérieure.
- La classe de stockage
oci-bv
par défaut pour le plugiciel de volume CSI est configurée avecallowVolumeExpansion: true
dans les grappes exécutant Kubernetes 1.19 ou une version ultérieure. Les définitions des classes de stockageoci-bv
dans les grappes existantes 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 par blocs. Vous ne pouvez spécifier qu'une valeur supérieure à la taille courante du volume par blocs. Si vous mettez à jour un manifeste de PVC pour demander moins de stockage que précédemment demandé, la demande de stockage échoue.
- Pour plus d'informations sur l'augmentation de la taille des volumes par blocs dans le service de volume par blocs, voir Redimensionnement d'un volume. En particulier, il est recommandé de créer une sauvegarde avant de redimensionner un volume par blocs.
Exemple : Configuration d'une classe de stockage pour permettre l'expansion d'un volume par blocs
Modifiez le manifeste d'une revendication 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 revendication de volume persistant, dans un fichier nommé 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, il se peut que vous deviez augmenter la quantité de stockage disponible pour la 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 du manifeste déclenche le service de volume par blocs pour augmenter la taille du volume par blocs existant à 200 Go. Lorsque le disque est ensuite balayé (ce qui peut prendre quelques minutes), le stockage augmenté devient automatiquement disponible pour les pods utilisant la revendication de volume persistant.
Spécification de la performance des volumes par blocs
Les volumes par blocs du service de volume par blocs peuvent être configurés pour différents niveaux de performance, en fonction des exigences d'E/S de charge de travail attendues. La performance des volumes par blocs est exprimée en unités de performance de volume (VPU). Plusieurs niveaux de performance sont disponibles, notamment :
- Coût réduit (0 UPV)
- Équilibre (10 UPV)
- Performance élevée (20 UPV)
- Ultra-haute performance (entre 30 UPV et 120 UPV)
Par défaut, les volumes par blocs sont configurés pour le niveau de performance Équilibre (10 UPV). Pour plus d'informations sur les différents niveaux de performance des volumes par blocs, voir Niveaux de performance des volumes par blocs.
Lorsque vous définissez une revendication de volume persistant à l'aide du plugiciel de volume CSI (provisioner: blockvolume.csi.oraclecloud.com
), vous pouvez spécifier un niveau de performance de volume par blocs différent dans la définition de la classe de stockage, qui convient à la charge de travail attendue.
Notez que vous ne pouvez pas modifier ultérieurement le niveau de performance d'un volume par blocs prenant en charge une revendication de volume persistant. Vous devez plutôt définir une nouvelle classe de stockage, définir le niveau de performance requis et créer une nouvelle revendication de volume persistant provisionnée par cette nouvelle classe de stockage.
Création de PVC avec des niveaux de performance à faible coût (0 UPV), équilibrée (10 UPV) et plus haute performance (20 UPV)
Pour créer une revendication de volume persistant soutenue par un volume par blocs avec un niveau de performance Coût réduit, Équilibre ou Performance supérieure, définissez vpusPerGB
dans la définition de la classe de stockage comme suit :
- pour un niveau de performance Coût réduit, définissez
vpusPerGB: "0"
- pour un niveau de performance Équilibre, définissez
vpusPerGB: "10"
- pour un niveau de performance Performance élevée, 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 revendication de volume persistant provisionnée par la classe de stockage oci-high
et incluez une demande de stockage. Par exemple, dans un fichier nommé 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
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 nouveau pod à partir de la définition de pod suivante, qui demande au système d'utiliser la revendication de volume persistant 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 nouveau volume par blocs est créé dans le service de volume par blocs pour sauvegarder la revendication de volume persistant. Le nouveau volume par blocs a le niveau de performance que vous avez spécifié dans la définition de la classe de stockage oci-high
.
Création de PVC avec des niveaux ultra-haute performance (30 à 120 UPV)
Pour créer une revendication de volume persistant soutenue par un volume par blocs avec un niveau Ultra-haute performance, 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 groupe de noeuds avec des noeuds de travail d'une forme prise en charge.
- Si vous attachez un volume par blocs à des instances de calcul en tant qu'attachement iSCSI, installez et activez le plugiciel de gestion des volumes par blocs sur les instances hébergeant les noeuds de travail.
- Créez une définition de classe de stockage et réglez
vpusPerGB
dans la définition de classe de stockage à une valeur comprise entre 30 et 120. - Créez une revendication de volume persistant provisionnée par la classe de stockage et incluez une demande de stockage.
Après avoir créé une revendication de volume persistant appropriée, vous pouvez définir un pod qui utilise un volume par blocs Ultra-haute performance et programmer le pod sur un noeud qui prend en charge les volumes par blocs Ultra-haute performance.
Pour offrir les caractéristiques Ultra-haute performance, les volumes par blocs Ultra-haute performance doivent être attachés aux instances de calcul hébergeant des noeuds de travail à l'aide d'un attachement multichemin. Toutefois, seul le premier volume par blocs Ultra-haute performance attaché à une instance est attaché avec un attachement multichemin. Par conséquent, seul le premier volume par blocs Ultra-haute performance attaché à une instance a des caractéristiques Ultra-haute performance.
Si vous avez l'intention d'utiliser plus d'un volume par blocs Ultra-haute performance dans une grappe, créez le même nombre de noeuds qui prennent en charge les volumes par blocs Ultra-haute performance que les volumes par blocs Ultra-haute performance.
Pour créer une revendication de volume persistant soutenue par un volume par blocs avec un niveau Ultra-haute performance :
- Suivez les instructions pour créer un groupe de noeuds (voir Création d'un groupe de noeuds géré) et spécifiez les informations suivantes :
- Spécifiez une forme sans système d'exploitation ou de machine virtuelle qui est à la fois prise en charge par Kubernetes Engine et qui prend également en charge le niveau Ultra-haute performance.
Notez que les volumes par blocs Ultra-haute performance nécessitent des formes qui prennent en charge les attachements multichemins.
Voir :
- Formes prises en charge pour les noeuds gérés et les noeuds virtuels pour les formes prises en charge par Kubernetes Engine
- Détails de la performance pour les formes d'instance pour les formes qui prennent en charge le niveau Ultra-haute performance.
- Spécifiez une étiquette à ajouter à tous les noeuds de travail du groupe de noeuds pour indiquer que les noeuds de travail prennent en charge le niveau Ultra-haute performance. Par exemple,
uhp: supported
- Spécifiez une forme sans système d'exploitation ou de machine virtuelle qui est à la fois prise en charge par Kubernetes Engine et qui prend également en charge le niveau Ultra-haute performance.
- Si vous voulez attacher un volume par blocs Ultra-haute performance aux instances de calcul hébergeant des noeuds de travail dans le groupe de noeuds en tant qu'attachement iSCSI, installez et activez le plugiciel de gestion des volumes par blocs sur les instances.
Il existe différentes façons d'installer et d'activer le plugiciel de gestion des volumes par blocs, par exemple à l'aide de la console ou de l'interface de ligne de commande. Vous pouvez également installer et activer le plugiciel de gestion des volumes par blocs en spécifiant un script d'initialisation en nuage personnalisé semblable au suivant :
#!/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."
Notez ce qui suit lors de l'installation et de l'activation du plugiciel de gestion des volumes par blocs :
- Le plugiciel de gestion des volumes par 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 autorisations doivent être configurées pour permettre au plugiciel de gestion des volumes par blocs de signaler les résultats de la configuration iSCSI des attachements iSCSI multichemins.
Pour plus d'informations :
- À propos du plugiciel de gestion des volumes par blocs, voir Activation du plugiciel de gestion des volumes par blocs.
- À propos de l'écriture de scripts personnalisés cloud-init, voir Utilisation de scripts d'initialisation personnalisés Cloud-init pour configurer des noeuds gérés.
- Créez une définition de classe de stockage pour les volumes par blocs ayant un niveau de performance Ultra-haute performance et réglez
vpusPerGB
dans la définition de classe de stockage à 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 revendication 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 revendication de volume persistant.
Par exemple, dans un fichier nommé 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 revendication de volume persistant à partir du fichier manifeste.
Par exemple, en entrant :
kubectl apply -f csi-bvs-pvc-uhp.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 nouveau 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 spécifié :
- Étiquette du pod indiquant qu'il utilise un volume par blocs Ultra-haute performance. Dans cet exemple,
uhp-pod: "true"
- Règle anti-affinité qui utilise l'étiquette de pod pour garantir qu'un seul pod utilisant le volume par blocs Ultra-haute performance s'exécute sur un noeud de travail.
- Un sélecteur de noeuds, de sorte que le pod s'exécute uniquement sur les noeuds de travail ayant une étiquette particulière (dérivée de l'étiquette du groupe de noeuds). Dans cet exemple,
uhp: supported
- PVC appuyé par un volume par blocs Ultra-haute performance. Dans cet exemple,
claimName: uhp-claim
Lorsque vous créez un pod en fonction de la définition, celui-ci s'exécute sur un noeud de travail hébergé sur une instance ayant une forme adaptée au niveau de performance Ultra-haute performance. Un nouveau volume par blocs est créé dans le service de volume par blocs pour sauvegarder la revendication de volume persistant. Le nouveau volume par blocs a le niveau de performance Ultra-haute performance que vous avez spécifié dans la définition de la classe de stockage.
Spécification des types de système de fichiers pour les volumes par blocs
Les volumes par blocs du service de volume par blocs 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ème de fichiers sont disponibles, notamment :
- ext3 : Le type de système de fichiers ext3 inclut des fonctions 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 sont inutiles.
- ext4 : En plus des fonctions ext3, le type de système de fichiers ext4 prend en charge les extents (blocs physiques contigus), la pré-affectation, l'affectation différé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 haute performance, qui offre une grande évolutivité pour les unités d'exécution d'E/S, la bande passante du système de fichiers, la taille des fichiers et du système 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 une seule unité d'exécution de lecture/écriture et de petits fichiers. Alors que, le système de fichiers XFS est généralement considéré comme mieux adapté pour les applications qui ont plusieurs threads de lecture/écriture et des fichiers plus volumineux.
Lorsqu'une revendication de volume persistant est créée à l'aide du plugiciel de volume CSI (provisioner: blockvolume.csi.oraclecloud.com
), vous pouvez spécifier un type de système de fichiers pour le volume par blocs approprié pour la charge de travail attendue.
Les volumes par 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 de travail attendue, vous n'avez pas à 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 par 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 de travail attendue, vous pouvez spécifier un autre type de système de fichiers dans la définition de la classe de stockage.
Pour créer une revendication de volume persistant soutenue par un volume par blocs avec un système de fichiers ext3 ou XFS, définissez le paramètre fstype
dans la définition de la 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 revendication de volume persistant soutenue par un volume par blocs avec un système de fichiers ext3 :
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 revendication de volume persistant provisionnée par la classe de stockage oci-bv-ext3
et incluez une demande de stockage. Par exemple, dans un fichier nommé 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
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 nouveau pod à partir de la définition de pod suivante, qui demande au système d'utiliser la PVC oci-bv-claim-ext3 en tant que volume nginx, monté par le pod sur /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 nouveau pod, vous pouvez vérifier que la revendication de volume persistant a été liée à un nouveau volume persistant en entrant :
kubectl get pvc
La sortie de la commande ci-dessus confirme que la revendication 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 revendication de volume persistant en entrant :
kubectl describe pod nginx
Notez que vous ne pouvez pas modifier ultérieurement le système de fichiers d'un volume par blocs prenant en charge une revendication de volume persistant. Vous devez plutôt définir une nouvelle classe de stockage, définir le système de fichiers comme requis et créer une nouvelle revendication de volume persistant provisionnée par cette nouvelle classe de stockage.
Spécification des volumes par blocs bruts
Lorsque vous utilisez le plugiciel de volume CSI (provisioner: blockvolume.csi.oraclecloud.com
) pour connecter des grappes à des volumes par blocs dans le service de volume par blocs, vous pouvez lier une revendication de volume persistant à une valeur ajoutée provisionnée par un volume par blocs configuré en tant que volume par blocs brut. Lorsqu'un volume par blocs a été configuré en tant que volume par blocs brut, plutôt qu'en tant que système de fichiers monté, une réserve de disponibilité provisionnée par ce volume par blocs s'affiche en tant que périphérique par blocs pour les conteneurs s'exécutant sur une grappe. Par conséquent, les applications qui s'exécutent à l'intérieur du conteneur peuvent accéder au volume par blocs attaché en tant que périphérique par blocs, sans la surcharge de performances causée par l'accès au périphérique au moyen d'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 périphériques de traitement par blocs.
Pour configurer le volume par blocs qui sauvegarde une revendication de volume persistant en tant que volume par blocs brut, spécifiez volumeMode: Block
dans le manifeste de revendication de volume persistant. Notez que si elle n'est pas spécifiée, volumeMode: Filesystem
est supposé et les volumes par 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 nommé 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 PVC à 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 nouveau pod à partir de la définition de pod suivante, qui indique au système d'utiliser la revendication de volume persistant PVC-raw-block-volume comme volume de stockage pour le conteneur raw-volume-test, 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 nouveau pod, vous pouvez vérifier que la revendication de volume persistant a été liée à un nouveau volume persistant en entrant :
kubectl get pvc
La sortie de la commande ci-dessus confirme que la revendication 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 revendication de volume persistant en entrant :
kubectl describe pod raw-volume-test-pod
Notez que vous ne pouvez pas modifier ultérieurement si le volume par blocs prenant en charge une revendication de volume persistant est configuré en tant que volume par blocs brut ou en tant que système de fichiers monté. À la place, vous devez créer une nouvelle revendication de volume persistant et définir volumeMode:
de manière appropriée dans le manifeste de revendication de volume persistant.
Notez que les volumes par blocs bruts ne sont pas pris en charge pour les volumes par blocs Ultra High Performance.
Réglage du volume par blocs brut accessModes à ReadWriteOnce ou ReadWriteMany
Lorsque vous voulez qu'un volume par 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 de données ou des incohérences), réglez accessModes
à ReadWriteOnce
dans le manifeste PVC. Le mode ReadWriteOnce
est le mode d'accès le plus courant et par défaut.
Lorsque vous voulez qu'un volume par blocs brut soit accessible par plusieurs pods simultanément (par exemple, lorsque plusieurs pods s'exécutant sur des noeuds différents ont besoin d'un accès simultané au même stockage partagé), réglez accessModes
à ReadWriteMany
dans le manifeste PVC. Notez qu'il est de votre responsabilité de mettre en place les contrôles d'accès et les autorisations appropriés pour garantir l'intégrité des données lorsque vous spécifiez ReadWriteMany
comme mode d'accès.
Notez ce qui suit :
- Vous ne pouvez pas mettre à jour le mode d'accès d'une revendication de volume persistant existante de
ReadWriteOnce
àReadWriteMany
. De même, vous ne pouvez pas mettre à jour le mode d'accès d'une revendication de volume persistant existante deReadWriteMany
àReadWriteOnce
. - Vous pouvez uniquement spécifier
ReadWriteMany
comme mode d'accès pour les revendications de volumes persistants soutenues par des volumes par blocs bruts.