Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Utiliser des volumes provisionnés dynamiquement depuis la ligne de commande

Dernière mise à jour :Aug 28, 2026

Kubernetes ne sait pas automatiquement quel disque cloud provisionner pour une charge de travail. Vous devez définir un StorageClass qui mappe vos préférences en matière de type de disque et de zone, puis le référencer dans une revendication de volume persistant (PVC). Lors de la création du PVC, le Disk-Controller provisionne automatiquement le disque et le lie en tant que volume persistant (PV).

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster ACK opérationnel avec kubectl configuré

  • Les permissions nécessaires pour créer des ressources StorageClass et PVC dans le cluster

StorageClasses par défaut

Les clusters mono-zone incluent les StorageClasses suivants par défaut. Pour les clusters multi-zones, vous devez créer manuellement un StorageClass afin de spécifier la zone cible.

StorageClass Type de disque Idéal pour
alicloud-disk-efficiency Disque ultra Charges de travail sensibles aux coûts avec des exigences d'E/S modérées
alicloud-disk-ssd SSD standard Charges de travail polyvalentes nécessitant des performances fiables
alicloud-disk-essd SSD amélioré (ESSD) Charges de production à faible latence et haut débit
alicloud-disk-available Mode haute disponibilité Charges de travail où la disponibilité du disque est prioritaire sur son type
alicloud-disk-topology Mode WaitForFirstConsumer Clusters multi-zones où l'ordonnancement des pods détermine la zone du disque
Pour alicloud-disk-available , le système tente d'abord de créer un SSD standard, puis se rabat sur un disque ultra si les ressources SSD sont épuisées. Pour les versions du Disk-Controller antérieures à v1.14.8.44-c23b62c5-aliyun, l'ordre de repli est le suivant : SSD amélioré (ESSD) → SSD standard → disque ultra.

Créer un StorageClass

Choisissez un type de StorageClass en fonction de la configuration de votre cluster :

Créer un StorageClass avec un ID de zone

Utilisez cette approche pour les clusters mono-zones ou lorsque vous souhaitez épingler la création du disque à une zone spécifique.

  1. Créez un fichier nommé storage-class.yaml avec le contenu suivant :

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: alicloud-disk-ssd-hangzhou-b
    provisioner: alicloud/disk
    parameters:
      type: cloud_ssd
      regionId: cn-hangzhou
      zoneId: cn-hangzhou-b
    reclaimPolicy: Retain  # Default is Delete. Set to Retain to prevent accidental data loss.

    Le tableau suivant décrit les paramètres :

    Paramètre Description Obligatoire Valeur par défaut
    provisioner Le plug-in de volume pour le provisionnement des disques. Définissez-le sur alicloud/disk. Oui —
    type Le type de disque. Valeurs valides : cloud_efficiency (disque ultra), cloud_ssd (SSD standard), cloud_essd (ESSD), available (mode haute disponibilité qui sélectionne automatiquement le meilleur type disponible). Oui —
    regionId La région où le disque est créé. Oui —
    zoneId La zone où le disque est créé. Pour les clusters multi-zones, spécifiez plusieurs zones séparées par des virgules : cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c. Oui —
    reclaimPolicy La politique de réclamation du disque lors de la suppression du PVC. Retain conserve le disque ; Delete le supprime. Définissez-le sur Retain pour éviter la perte de données. Non Delete
    encrypted Indique si le disque doit être chiffré. Non false
  2. Appliquez le StorageClass :

    kubectl apply -f storage-class.yaml
  3. Vérifiez que le StorageClass a été créé :

    kubectl get storageclass alicloud-disk-ssd-hangzhou-b

    La sortie devrait afficher le StorageClass avec alicloud/disk comme provisionneur.

Créer un StorageClass en mode WaitForFirstConsumer

Dans les clusters multi-zones, un PV peut être provisionné avant qu'un pod ne soit ordonnancé, ce qui place le disque dans une zone différente de celle où le pod s'exécute finalement. Dans ce cas, le pod ne parvient pas à démarrer car il ne peut pas attacher un disque provenant d'une autre zone. Le mode WaitForFirstConsumer résout ce problème en retardant le provisionnement du disque jusqu'à ce que le pod consommateur soit ordonnancé, garantissant ainsi que le disque est toujours créé dans la même zone que le pod.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-topology-ssd
provisioner: alicloud/disk
parameters:
  type: cloud_ssd
reclaimPolicy: Retain  # Default is Delete.
volumeBindingMode: WaitForFirstConsumer

Appliquez le StorageClass :

kubectl apply -f storage-class-topology.yaml

Fonctionnement de la sélection de zone — le tableau suivant résume le comportement de placement des disques en fonction de la configuration de votre StorageClass :

Configuration Placement du disque
Aucun zoneId, aucun WaitForFirstConsumer Zone où le composant Disk-Controller est déployé
zoneId défini, aucun WaitForFirstConsumer Zones spécifiées, sélectionnées selon un algorithme round-robin
WaitForFirstConsumer activé Zone du nœud où le pod consommateur est ordonnancé

Créer un PVC et un Pod

Le manifeste suivant crée un PVC basé sur le StorageClass alicloud-disk-ssd-hangzhou-b et un Pod qui monte le disque :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: disk-ssd
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: alicloud-disk-ssd-hangzhou-b
  resources:
    requests:
      storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
  name: disk-pod-ssd
spec:
  containers:
  - name: disk-pod
    image: nginx
    volumeMounts:
      - name: disk-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: disk-pvc
      persistentVolumeClaim:
        claimName: disk-ssd

Appliquez le manifeste :

kubectl apply -f pvc-pod.yaml

Vérifiez que le PVC est lié et que le Pod est en cours d'exécution :

kubectl get pvc disk-ssd
kubectl get pod disk-pod-ssd

Un PVC correctement lié affiche STATUS: Bound. Un Pod en cours d'exécution affiche STATUS: Running.

Créer un StatefulSet multi-instance

Utilisez volumeClaimTemplates pour créer dynamiquement un PVC et un PV distincts pour chaque réplica du StatefulSet. L'exemple suivant crée un StatefulSet nginx à deux réplicas avec un disque de 20 GiB par réplica :

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: disk-ssd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: disk-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd-hangzhou-b"
      resources:
        requests:
          storage: 20Gi

Appliquez le manifeste :

kubectl apply -f statefulset.yaml

Vérifiez que le StatefulSet, les Pods et les PVC sont tous créés :

kubectl get statefulset web
kubectl get pods -l app=nginx
kubectl get pvc -l app=nginx

Chaque Pod (web-0, web-1) obtient son propre PVC (disk-ssd-web-0, disk-ssd-web-1), chacun étant soutenu par un disque provisionné indépendamment.

Étapes suivantes