Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use a statically provisioned disk volume

Dernière mise à jour :Aug 11, 2026

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-plugin et csi-provisioner sur 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é

Important

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.fsgroup augmente le temps de montage. Si vous configurez securityContext.fsgroup, kubelet exécute chmod et chown après le montage, ce qui ajoute une surcharge proportionnelle au nombre de fichiers. Pour Kubernetes 1.20 et versions ultérieures, définissez fsGroupChangePolicy: OnRootMismatch pour 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

  1. Connectez-vous à votre cluster. Utilisez kubectl ou CloudShell et Workbench pour établir la connexion.

  2. Créez un fichier nommé disk-pv.yaml avec 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_essd

    Valeurs de type de disque pour &lt;YOUR-DISK-CATEGORY&gt; :

    Type de disque Valeur
    Disque ESSD Entry cloud_essd_entry
    Disque ESSD AutoPL cloud_auto
    ESSD cloud_essd
    SSD standard cloud_ssd
    Disque ultra cloud_efficiency
    Disque redondant inter-zone cloud_regional_disk_auto (nécessite un nodeAffinity diffé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: Filesystem

    Paramètres clés :

    Paramètre Obligatoire Par défaut Description
    csi.alibabacloud.com/volume-topology Recommandé 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.
    claimRef Facultatif Aucun Lie ce PV à une PVC spécifique. Supprimez ce bloc pour permettre à toute PVC compatible de se lier à ce PV.
    accessModes Obligatoire Doit être ReadWriteOnce — le volume peut être monté en lecture-écriture par un seul pod.
    persistentVolumeReclaimPolicy Obligatoire Retain Retain : 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.
    driver Obligatoire Toujours diskplugin.csi.alibabacloud.com pour les volumes de disque Alibaba Cloud.
    nodeAffinity Obligatoire 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).
    storageClassName Obligatoire Doit correspondre exactement à la storageClassName de la PVC. La valeur alicloud-disk-topology-alltype est utilisée ici — vous n'avez pas besoin de créer cette StorageClass à l'avance pour le provisionnement statique.
    Important

    La storageClassName doit ê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 explicitement storageClassName sur le PV et la PVC pour empêcher la PVC de se lier à un volume provisionné dynamiquement au lieu du PV prévu.

  3. Créez le PV.

    kubectl create -f disk-pv.yaml
  4. Vérifiez que le PV est dans l'état Available.

    kubectl get pv

    Sortie 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

  1. Créez un fichier nommé disk-pvc.yaml avec le contenu suivant.

    Paramètre Obligatoire Par défaut Description
    accessModes Obligatoire Doit correspondre aux accessModes du PV. Seul ReadWriteOnce est pris en charge.
    storage Obligatoire Capacité de stockage demandée. Ne peut pas dépasser la capacité réelle du disque.
    storageClassName Obligatoire Doit correspondre exactement à la storageClassName du PV — alicloud-disk-topology-alltype dans cet exemple.
    volumeName Recommandé 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>"
  2. Créez la PVC.

    kubectl create -f disk-pvc.yaml
  3. Vérifiez que la PVC est liée au PV.

    kubectl get pvc

    Sortie 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

  1. Créez un fichier nommé disk-test.yaml avec le contenu suivant. Cela crée un StatefulSet avec un pod qui monte la PVC disk-pvc sur /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
  2. Créez le StatefulSet.

    kubectl create -f disk-test.yaml
  3. Confirmez que le pod est en cours d'exécution.

    kubectl get pod -l app=nginx

    Sortie attendue :

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. Vérifiez que le disque est monté sur /data.

    kubectl exec disk-test-0 -- df -h /data

    Sortie 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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Volumes > Persistent Volumes.

  3. Sur la page Persistent Volumes, cliquez sur Create.

  4. 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

  1. Dans le volet de navigation de gauche, choisissez Volumes > Persistent Volume Claims.

  2. Sur la page Persistent Volume Claims, cliquez sur Create.

  3. 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-pvc
    Allocation mode Obligatoire Sélectionnez Existing Volumes. Existing Volumes
    Existing volumes Obligatoire Sélectionnez le PV créé à l'étape 1. d-uf690053kttkprgx****, 20Gi
    Capacity Obligatoire Stockage à allouer. Ne peut pas dépasser la capacité du disque. 20Gi

Étape 3 : Déployer un StatefulSet et monter le disque

  1. Dans le volet de navigation de gauche, choisissez Workloads > StatefulSets.

  2. Dans le coin supérieur droit, cliquez sur Create from Image.

  3. 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-test
    Basic information Replicas Obligatoire Nombre de pods. Définissez à 1 pour les volumes de disque sans multi-attach. 1
    Container Image name Obligatoire Adresse de l'image du conteneur. anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
    Container 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
  4. 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.

  1. Vérifiez le contenu du répertoire monté.

    kubectl exec disk-test-0 -- ls /data

    Sortie attendue :

    lost+found
  2. Écrivez un fichier de test sur le disque.

    kubectl exec disk-test-0 -- touch /data/test
  3. Supprimez le pod. Le contrôleur StatefulSet crée automatiquement un remplacement.

    kubectl delete pod disk-test-0
  4. Attendez que le pod de remplacement démarre, puis vérifiez son état.

    kubectl get pod -l app=nginx

    Sortie 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
  5. Confirmez que les données ont survécu à la suppression du pod.

    kubectl exec disk-test-0 -- ls /data

    Sortie attendue — le fichier test est toujours présent :

    lost+found
    test

Étapes suivantes