Découvrez les volumes, les PV, les PVC et les StorageClasses pour configurer le stockage persistant dans ACK.
Volumes
Les systèmes de fichiers des conteneurs sont éphémères : les fichiers sont perdus lors d'un redémarrage. Les volumes définissent un stockage externe dans la spécification du pod ; Kubernetes le monte dans les conteneurs au moment de l'exécution.
ACK prend en charge les types de volumes suivants :
|**Type**
|
**Description**
| | --- | --- | |
Stockage local
|
Volumes locaux au nœud, tels que `hostPath` et `emptyDir`. Les données sont liées au nœud et sont perdues en cas de panne. Ce type ne convient pas aux charges de travail avec état susceptibles d'être replanifiées.
| |
Stockage réseau
|
Volumes distants tels que Ceph, GlusterFS, NFS et iSCSI. Les données résident sur un service distant, mais le service doit être monté localement.
| |
Secret et ConfigMap
|
Volumes spéciaux qui exposent les données des objets du cluster (identifiants, configuration) aux pods sous forme de fichiers.
| |
PVC
|
Un volume soutenu par une PersistentVolumeClaim qui abstrait le stockage en tant qu'objet indépendant. À utiliser pour un stockage durable et portable.
|
Remarques d'utilisation :
Un pod peut monter plusieurs volumes, y compris de types différents.
Tous les conteneurs d'un pod partagent ses volumes montés.
Un volume partage le cycle de vie du pod. La persistance des données après la suppression du pod dépend du type de volume et de sa configuration.
Pour des données durables, utilisez des PVC et des PV.
PV et PVC
Tous les volumes Kubernetes ne sont pas persistants. Pour un stockage durable, Kubernetes introduit deux objets qui séparent la manière dont le stockage est approvisionné de la manière dont le stockage est consommé :
Un PV est une ressource de stockage du cluster, analogue à un nœud : les pods consomment des nœuds, et les PVC consomment des PV. Un PV possède son propre cycle de vie, indépendant de tout pod.
Un PVC est une demande de stockage, analogue à un pod : tout comme un pod demande du CPU et de la mémoire à un nœud, un PVC demande de la capacité et des modes d'accès à un PV.
Les développeurs déclarent leurs besoins en stockage (PVC), tandis que les administrateurs gèrent l'approvisionnement (PV).
Exemple de PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 20Gi # adjust to match the actual cloud disk size
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: diskplugin.csi.alibabacloud.com
volumeHandle: <disk ID>
volumeMode: Filesystem
Exemple de PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeName: pv-example
Règles de liaison
Les PV et les PVC entretiennent une relation un-à-un : exactement un PVC se lie à chaque PV. Avant qu'un PVC puisse être utilisé par un pod, Kubernetes doit trouver un PV qui satisfait les conditions suivantes :
|**Champ**
|
**Exigence**
| | --- | --- | |
`volumeMode`
|
Doit correspondre au mode de volume du PVC
| |
`accessModes`
|
Doit inclure les modes d'accès demandés par le PVC
| |
`storageClassName`
|
Si spécifié dans le PVC, le PV doit avoir la même StorageClass
| |
Sélecteur d'étiquettes
|
Le PV doit correspondre à tout sélecteur d'étiquettes défini dans le PVC
| |
`storage`
|
La capacité du PV doit être **au moins** égale à la quantité demandée par le PVC
|
Fonctionnement du champ storage :
Kubernetes utilise
storagepour faire correspondre et lier les PV aux PVC.Dans l'approvisionnement dynamique, la valeur
storagedu PVC définit la capacité du PV et de la ressource sous-jacente (tel qu'un disque cloud).Pour les types de stockage qui prennent en charge le redimensionnement, la valeur
storagedu PVC définit la capacité cible après une extension.storageest une déclaration de capacité logique. La capacité réelle accessible en écriture dépend du support de stockage sous-jacent, et non du champstorage.
Modes d'accès aux volumes
Utilisez le champ accessModes pour définir la manière dont un volume peut être monté :
**Mode d'accès**
|
**Abréviation**
|
**Description**
|
**Exemple**
| | --- | --- | --- | --- | |
ReadWriteOnce
|
RWO
|
Lecture-écriture par un seul nœud
|
Disque Alibaba Cloud
| |
ReadOnlyMany
|
ROX
|
Lecture seule par plusieurs nœuds
|
Bucket OSS
| |
ReadWriteMany
|
RWX
|
Lecture-écriture par plusieurs nœuds
|
Système de fichiers NAS
|
Approvisionnement des volumes
ACK prend en charge deux flux de travail d'approvisionnement : statique et dynamique.
Approvisionnement statique
Dans l'approvisionnement statique, l'administrateur du cluster crée les PV à l'avance. Les disques cloud, les systèmes de fichiers NAS et les buckets OSS prennent en charge l'approvisionnement statique.
L'administrateur alloue les ressources de stockage (par exemple, des disques cloud ou des systèmes de fichiers NAS) en fonction des exigences des pods.
L'administrateur crée des PV décrivant ces ressources, y compris la capacité et la configuration.
Les développeurs créent des PVC qui déclarent ce dont leurs charges de travail ont besoin.
Lors de la création d'un pod, Kubernetes lie le PVC à un PV correspondant.
Approvisionnement dynamique
Dans l'approvisionnement dynamique, un provisionneur CSI crée automatiquement des PV lorsqu'un PVC est créé. Les disques cloud, les systèmes de fichiers NAS et les buckets OSS prennent en charge l'approvisionnement dynamique.
L'administrateur crée une StorageClass qui définit le type de stockage et le provisionneur. Par exemple,
diskplugin.csi.alibabacloud.comapprovisionne des disques cloud.Les développeurs créent des PVC faisant référence à une StorageClass. Aucune création manuelle de PV n'est nécessaire.
Lors de la création d'un pod, le provisionneur CSI lit la StorageClass, crée un PV et la ressource de stockage sous-jacente, puis lie le PV au PVC.
L'approvisionnement dynamique offre trois avantages :
Gestion automatisée du cycle de vie : le provisionneur gère automatiquement la création et la suppression des PV.
Réduction de la charge opérationnelle : les administrateurs gèrent les StorageClasses plutôt que les PV individuels.
Cohérence de la capacité : le PV et la ressource sous-jacente correspondent toujours à la capacité demandée par le PVC.
StorageClasses
Une StorageClass définit le type de stockage, le provisionneur et les paramètres utilisés pour l'approvisionnement dynamique. Lorsqu'un PVC fait référence à une StorageClass et qu'aucun PV correspondant n'existe, Kubernetes déclenche le provisionneur pour créer automatiquement un PV et le stockage sous-jacent.
Exemple de StorageClass
La StorageClass suivante approvisionne des disques Alibaba Cloud :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-alltype
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_auto,cloud_essd,cloud_ssd,cloud_efficiency
fstype: ext4
diskTags/a: b
encrypted: "false"
performanceLevel: PL1
provisionedIops: "40000"
burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Paramètres clés
|**Paramètre**
|
**Description**
| | --- | --- | |
`provisioner`
|
Le pilote CSI pour l'approvisionnement du stockage. Utilisez `diskplugin.csi.alibabacloud.com` pour les disques cloud, `nasplugin.csi.alibabacloud.com` pour le NAS, ou `ossplugin.csi.alibabacloud.com` pour l'OSS.
| |
`parameters`
|
Paramètres spécifiques au pilote, tels que le type de disque, le type de système de fichiers et les paramètres de performance.
| |
`reclaimPolicy`
|
Ce qui arrive au PV et au stockage sous-jacent lorsque le PVC est supprimé. `Delete` (par défaut) supprime à la fois le PV et le disque cloud. `Retain` conserve les deux : vous devez les supprimer manuellement. Définissez sur `Retain` si la sécurité des données est une priorité.
| |
`allowVolumeExpansion`
|
Définissez sur `true` pour activer l'extension de disque en ligne.
| |
`volumeBindingMode`
|
Moment de l'approvisionnement du PV. Voir le tableau ci-dessous.
|
Choix d'un volumeBindingMode :
**Mode**
|
**Moment de la création du PV**
|
**Recommandé pour**
| | --- | --- | --- | |
`Immediate` (par défaut)
|
Lors de la création du PVC, avant toute planification de pod
|
Clusters mono-zone
| |
`WaitForFirstConsumer`
|
Après qu'un pod utilisant le PVC a été planifié sur un nœud
|
Clusters multi-zones
|
Utilisez WaitForFirstConsumer dans les clusters multi-zones. Les disques cloud ne peuvent pas être montés entre différentes zones. Si un PV se trouve dans la zone A mais qu'un pod est planifié dans la zone B, le pod ne parvient pas à démarrer. Avec WaitForFirstConsumer, le provisionneur attend la planification du pod, puis crée le disque dans la zone du pod.
Fonctionnement de WaitForFirstConsumer :
Lorsqu'un PVC est créé, le provisionneur attend qu'un pod le consomme. L'ordonnanceur place le pod sur un nœud et écrit le résultat (région et nœud) dans les métadonnées du PVC. Le provisionneur crée ensuite le PV et le disque dans la zone correcte.
StorageClass par défaut
Une StorageClass par défaut approvisionne automatiquement un PV pour tout PVC qui omet le nom d'une StorageClass.
Les clusters ACK n'incluent pas de StorageClass par défaut. Une StorageClass par défaut s'applique à tous les PVC sans storageClassName. Si votre cluster utilise plusieurs types de stockage, il risque d'approvisionner le mauvais type. Activez-la uniquement si tous les PVC utilisent le même type de stockage.
Définir une StorageClass par défaut :
Marquez alicloud-disk-topology-alltype comme valeur par défaut :
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=true
Vérifiez la modification :
kubectl get sc
Sortie attendue :
NAME PROVISIONER AGE
alicloud-disk-topology-alltype (default) diskplugin.csi.alibabacloud.com 96m
Créer un PVC sans spécifier de StorageClass :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
Le cluster crée automatiquement un PV de disque cloud en utilisant alicloud-disk-topology-alltype.
kubectl get pvc
Sortie attendue :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
disk-pvc Bound d-bp18pbai447qverm**** 20Gi RWO alicloud-disk-topology-alltype 49s
Supprimer la StorageClass par défaut :
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-
StorageClasses fournies par ACK
|**StorageClass**
|
**Type de disque**
|
**Notes**
| | --- | --- | --- | |
`alicloud-disk-efficiency`
|
[Disque ultra](t9556.xdita#294044a857t6y)
|
Disque cloud de génération précédente
| |
`alicloud-disk-ssd`
|
[SSD standard](t9556.xdita#294044a857t6y)
|
Disque cloud de génération précédente
| |
`alicloud-disk-essd`
|
[ESSD](t583241.xdita#concept-727754)
|
SSD Enterprise de niveau de performance 1 (PL1)
| |
`alicloud-disk-topology-alltype`
|
Multi-type
|
Tente d'utiliser d'abord l'ESSD, puis le SSD standard, puis le disque ultra. Recommandé pour les clusters multi-zones.
| |
`alibabacloud-cnfs-nas`
|
NAS géré par CNFS
|
Crée des volumes NAS gérés par [Container Network File System (CNFS)](https://www.alibabacloud.com/help/en/document_detail/2678292.html)
|
La StorageClass alicloud-disk-topology-alltype sélectionne le meilleur type de disque disponible :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-alltype
parameters:
type: cloud_essd,cloud_ssd,cloud_efficiency
provisioner: diskplugin.csi.alibabacloud.com
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Étapes suivantes
Consultez Stockage pour obtenir tous les types de stockage et guides.
Pour approvisionner des types de stockage spécifiques :