Montez un disque cloud existant sur un pod en tant que PersistentVolume (PV) pour bénéficier d'un stockage persistant à haut débit et faible latence dans votre cluster ACK.
Avec le provisionnement statique, vous créez manuellement le PV et la PersistentVolumeClaim (PVC) avant de déployer votre charge de travail. Cette approche vous offre un contrôle total sur le disque utilisé et maintient le disque indépendant du cycle de vie du pod.
Cas d'utilisation
Les volumes de disque statiques sont adaptés aux situations suivantes :
Votre application nécessite des E/S disque élevées, par exemple pour l'exécution de MySQL ou Redis.
Vous devez écrire des journaux à haute vitesse.
Vous disposez d'un disque existant que vous souhaitez réutiliser lors des redémarrages de pod.
Pour plus d'informations sur les volumes de stockage par blocs, consultez la documentation Volumes de stockage par blocs.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Le plugin CSI (Container Storage Interface) est installé dans votre cluster. Vérifiez l'état des composants
csi-pluginetcsi-provisionersur la page Add-ons sous l'onglet Storage. Pour mettre à niveau le plugin CSI afin d'utiliser des fonctionnalités spécifiques, consultez la documentation Mettre à niveau le plugin CSI. Si votre cluster utilise encore FlexVolume, migrer vers le plugin CSI au préalable, car FlexVolume est obsolète.-
Un disque cloud existant qui répond aux exigences suivantes :
Mode de facturation : paiement à l'utilisation
État : Available
Situé dans la même zone que le nœud ECS où le pod s'exécutera
Type de disque compatible avec le type d'instance ECS — consultez la documentation Familles d'instances pour les détails de compatibilité
Les disques ne peuvent pas être montés entre différentes zones. Si le type de disque est incompatible avec le type d'instance du nœud, le montage échouera.
Notes d'utilisation
Un seul disque par pod à la fois. Les diskes constituent un stockage non partagé. Sauf si la fonctionnalité multi-attach est activée, un disque unique ne peut être monté que sur un seul pod à la fois. Consultez la documentation Utiliser les fonctionnalités multi-attach et de réservation des disques NVMe.
Contrainte de zone. Un disque ne peut être monté que sur un pod situé dans la même zone. Le montage inter-zones n'est pas pris en charge.
Comportement lors de la reconstruction d'un pod. Lorsqu'un pod est reconstruit, le disque d'origine est remonté. Si le pod ne peut pas être planifié dans la zone d'origine en raison d'autres contraintes, il reste dans l'état Pending.
Utilisez des StatefulSets ou des pods individuels, et non des Deployments. Lorsque la fonctionnalité multi-attach est désactivée, un disque ne peut être monté que sur un seul pod. Si vous devez monter un disque sur un Deployment, vous devez définir le nombre de réplicas à 1. Même dans ce cas, vous ne pouvez pas garantir la priorité du montage et du démontage, et la stratégie de mise à jour progressive peut empêcher le nouveau pod de monter le disque lors des redémarrages. Par conséquent, il n'est pas recommandé de monter des disques sur des Deployments.
securityContext.fsgroupaugmente le temps de montage. Si vous configurezsecurityContext.fsgroup, kubelet exécutechmodetchownaprès le montage, ce qui ajoute une surcharge proportionnelle au nombre de fichiers. Pour Kubernetes 1.20 et versions ultérieures, définissezfsGroupChangePolicy: OnRootMismatchpour appliquer les modifications de propriété uniquement au premier démarrage du conteneur. Pour un contrôle plus fin, utilisez un conteneur d'initialisation pour gérer les autorisations.
Monter un volume de disque provisionné statiquement à l'aide de kubectl
Étape 1 : Créer un PV
Rôle : administrateur de cluster
Connectez-vous à votre cluster. Utilisez kubectl ou CloudShell et Workbench pour établir la connexion.
-
Créez un fichier nommé
disk-pv.yamlavec le contenu suivant, en remplaçant les espaces réservés par les détails de votre disque.Espace réservé Description Exemple <YOUR-DISK-ID>ID de votre disque existant d-uf628m33r5rsbi******<YOUR-DISK-SIZE>Capacité du disque 20Gi<YOUR-DISK-ZONE-ID>Zone où se trouve le disque cn-shanghai-f<YOUR-DISK-CATEGORY>Valeur du type de disque (voir le tableau ci-dessous) cloud_essdValeurs de type de disque pour
<YOUR-DISK-CATEGORY>:Type de disque Valeur Disque ESSD Entry cloud_essd_entryDisque ESSD AutoPL cloud_autoESSD cloud_essdSSD standard cloud_ssdDisque ultra cloud_efficiencyDisque redondant inter-zone cloud_regional_disk_auto(nécessite unnodeAffinitydifférent — voir le tableau de paramètres ci-dessous)apiVersion: v1 kind: PersistentVolume metadata: name: "<YOUR-DISK-ID>" annotations: csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}' spec: capacity: storage: "<YOUR-DISK-SIZE>" claimRef: apiVersion: v1 kind: PersistentVolumeClaim namespace: default name: disk-pvc accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: diskplugin.csi.alibabacloud.com volumeHandle: "<YOUR-DISK-ID>" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone operator: In values: - "<YOUR-DISK-ZONE-ID>" storageClassName: alicloud-disk-topology-alltype volumeMode: FilesystemParamètres clés :
Paramètre Obligatoire Par défaut Description csi.alibabacloud.com/volume-topologyRecommandé Aucun Restreint la planification des pods aux nœuds prenant en charge le type de disque spécifié. Définissez <YOUR-DISK-CATEGORY>pour éviter les échecs de planification causés par l'incompatibilité entre le type de disque et le type d'instance.claimRefFacultatif Aucun Lie ce PV à une PVC spécifique. Supprimez ce bloc pour permettre à toute PVC compatible de se lier à ce PV. accessModesObligatoire — Doit être ReadWriteOnce— le volume peut être monté en lecture-écriture par un seul pod.persistentVolumeReclaimPolicyObligatoire RetainRetain: le PV et le disque sont conservés lorsque la PVC est supprimée ; vous devez effectuer le nettoyage manuellement.Delete: le PV et le disque sont supprimés lorsque la PVC est supprimée.driverObligatoire — Toujours diskplugin.csi.alibabacloud.compour les volumes de disque Alibaba Cloud.nodeAffinityObligatoire — Restreint la planification des pods à la même zone que le disque. Pour les disques redondants inter-zones, remplacez ce bloc par une affinité au niveau de la région afin que le disque puisse être monté dans n'importe quelle zone de la région : topology.kubernetes.io/region: <YOUR-DISK-REGION-ID>(par exemple,cn-shanghai).storageClassNameObligatoire — Doit correspondre exactement à la storageClassNamede la PVC. La valeuralicloud-disk-topology-alltypeest utilisée ici — vous n'avez pas besoin de créer cette StorageClass à l'avance pour le provisionnement statique.ImportantLa
storageClassNamedoit être identique dans le PV et la PVC. Une incompatibilité entraîne le non-liage de la PVC ou sa liaison à un PV différent. Si votre cluster possède une StorageClass par défaut, définissez explicitementstorageClassNamesur le PV et la PVC pour empêcher la PVC de se lier à un volume provisionné dynamiquement au lieu du PV prévu. -
Créez le PV.
kubectl create -f disk-pv.yaml -
Vérifiez que le PV est dans l'état
Available.kubectl get pvSortie attendue :
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE d-uf628m33r5rsbi****** 20Gi RWO Retain Available default/disk-pvc disk <unset> 1m36s
Étape 2 : Créer une PVC
Rôle : développeur
-
Créez un fichier nommé
disk-pvc.yamlavec le contenu suivant.Paramètre Obligatoire Par défaut Description accessModesObligatoire — Doit correspondre aux accessModesdu PV. SeulReadWriteOnceest pris en charge.storageObligatoire — Capacité de stockage demandée. Ne peut pas dépasser la capacité réelle du disque. storageClassNameObligatoire — Doit correspondre exactement à la storageClassNamedu PV —alicloud-disk-topology-alltypedans cet exemple.volumeNameRecommandé Aucun Lie cette PVC à un PV spécifique par son nom. Supprimez ce champ pour permettre à la PVC de se lier à tout PV compatible. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: "<YOUR-DISK-SIZE>" storageClassName: alicloud-disk-topology-alltype volumeName: "<YOUR-DISK-ID>" -
Créez la PVC.
kubectl create -f disk-pvc.yaml -
Vérifiez que la PVC est liée au PV.
kubectl get pvcSortie attendue montrant l'état
Bound:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-uf628m33r5rsbi****** 20Gi RWO disk <unset> 64s
Étape 3 : Déployer un StatefulSet et monter le disque
Rôle : développeur
-
Créez un fichier nommé
disk-test.yamlavec le contenu suivant. Cela crée un StatefulSet avec un pod qui monte la PVCdisk-pvcsur/data.apiVersion: apps/v1 kind: StatefulSet metadata: name: disk-test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc -
Créez le StatefulSet.
kubectl create -f disk-test.yaml -
Confirmez que le pod est en cours d'exécution.
kubectl get pod -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14s -
Vérifiez que le disque est monté sur
/data.kubectl exec disk-test-0 -- df -h /dataSortie attendue :
Filesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
Monter un volume de disque provisionné statiquement dans la console
Étape 1 : Créer un PV
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Volumes > Persistent Volumes.
Sur la page Persistent Volumes, cliquez sur Create.
-
Définissez les paramètres et cliquez sur Create. Après la création, le PV apparaît sur la page Persistent Volumes.
Paramètre Obligatoire Description Exemple PV type Obligatoire Sélectionnez Cloud Disk. Cloud Disk Access mode Obligatoire Seul ReadWriteOnce est pris en charge. ReadWriteOnce Disk ID Obligatoire Cliquez sur Select Disk et sélectionnez le disque à monter. Le disque doit se trouver dans la même région et la même zone que le nœud. d-uf628m33r5rsbi******File system type Facultatif Système de fichiers utilisé pour formater le disque. Pris en charge : ext4, ext3, xfs, vfat. ext4 (par défaut)
Étape 2 : Créer une PVC
Dans le volet de navigation de gauche, choisissez Volumes > Persistent Volume Claims.
Sur la page Persistent Volume Claims, cliquez sur Create.
-
Définissez les paramètres et cliquez sur OK. Après la création, la PVC apparaît sur la page Persistent Volume Claims avec l'état Bound.
Paramètre Obligatoire Description Exemple PVC type Obligatoire Sélectionnez Cloud Disk. Cloud Disk Name Obligatoire Nom de la PVC. Respectez les exigences de format indiquées dans la console. disk-pvcAllocation mode Obligatoire Sélectionnez Existing Volumes. Existing Volumes Existing volumes Obligatoire Sélectionnez le PV créé à l'étape 1. d-uf690053kttkprgx****, 20GiCapacity Obligatoire Stockage à allouer. Ne peut pas dépasser la capacité du disque. 20Gi
Étape 3 : Déployer un StatefulSet et monter le disque
Dans le volet de navigation de gauche, choisissez Workloads > StatefulSets.
Dans le coin supérieur droit, cliquez sur Create from Image.
-
Définissez les paramètres clés listés ci-dessous, puis cliquez sur Create from Image. Pour tous les autres paramètres, consultez la documentation Créer un StatefulSet.
Page de configuration Paramètre Obligatoire Description Exemple Basic information Name Obligatoire Nom du StatefulSet. Respectez les exigences de format indiquées dans la console. disk-testBasic information Replicas Obligatoire Nombre de pods. Définissez à 1 pour les volumes de disque sans multi-attach. 1Container Image name Obligatoire Adresse de l'image du conteneur. anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Container Required resources Facultatif vCPU, mémoire et stockage éphémère pour le conteneur. CPU : 0,25 cœur ; Mémoire : 512 MiB Volume Add PVC Obligatoire Cliquez sur Add PVC, puis définissez Mount Source sur la PVC de l'étape 2 et Container Path sur le répertoire de montage. Mount Source : disk-pvc; Container Path :/data Après le déploiement, cliquez sur le nom du StatefulSet et accédez à l'onglet Pods pour confirmer que le pod est dans l'état Running.
Vérifier la persistance des données
Lorsqu'un pod du StatefulSet est supprimé, Kubernetes crée un pod de remplacement et remonte le disque d'origine. Les données sur le disque sont préservées.
-
Vérifiez le contenu du répertoire monté.
kubectl exec disk-test-0 -- ls /dataSortie attendue :
lost+found -
Écrivez un fichier de test sur le disque.
kubectl exec disk-test-0 -- touch /data/test -
Supprimez le pod. Le contrôleur StatefulSet crée automatiquement un remplacement.
kubectl delete pod disk-test-0 -
Attendez que le pod de remplacement démarre, puis vérifiez son état.
kubectl get pod -l app=nginxSortie attendue — le nouveau pod porte le même nom car les StatefulSets conservent l'identité du pod :
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 27s -
Confirmez que les données ont survécu à la suppression du pod.
kubectl exec disk-test-0 -- ls /dataSortie attendue — le fichier
testest toujours présent :lost+found test
Étapes suivantes
Si vous rencontrez des problèmes avec les volumes de disque, consultez la FAQ sur les volumes de disque.
Si le disque est plein ou sous-dimensionné, consultez la documentation Étendre les volumes persistants de disque.
Pour surveiller l'utilisation du disque, consultez la Vue d'ensemble de la surveillance du stockage de conteneurs.