Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use storage volumes

Dernière mise à jour :Aug 11, 2026

Les volumes permettent aux étapes d'un flux de travail de partager des données en lisant et en écrivant dans un chemin de montage commun. Cette rubrique explique comment monter des volumes Object Storage Service (OSS) existants et des volumes File Storage NAS dans un cluster de flux de travail, puis les référencer dans Argo Workflows.

Prérequis

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

  • Un cluster de flux de travail créé dans ACK

  • Un bucket OSS (pour les volumes OSS) ou un système de fichiers NAS (pour les volumes NAS) dans la même région que votre cluster

  • Un AccessKey ID et un AccessKey Secret disposant d'un accès en lecture/écriture à la ressource de stockage

Cas d'utilisation

  • Partager des données intermédiaires entre les étapes : Écrivez la sortie d'une étape (par exemple, whalesay) dans un volume, puis lisez-la dans une étape suivante (par exemple, print-message).

  • Persister les artefacts du flux de travail : Stockez les sorties du flux de travail dans OSS ou NAS pour une utilisation en aval une fois le flux de travail terminé.

Contexte : PV, PVC et Argo Workflows

Un PersistentVolume (PV) est une ressource de stockage au niveau du cluster, provisionnée par un administrateur. Une PersistentVolumeClaim (PVC) est une demande de ce stockage par une charge de travail : les Pods et les étapes du flux de travail font référence à la PVC, et non directement au PV. Considérez le PV comme le stockage réel et la PVC comme la demande d'utilisation de ce stockage.

Le fichier YAML du flux de travail utilise la même syntaxe volumes et volumeMounts qu'une spécification de Pod Kubernetes, de sorte que les connaissances existantes sur Kubernetes s'appliquent directement.

Utiliser un volume OSS

Cliquez pour afficher l'exemple YAML d'utilisation d'un volume de stockage OSS

Appliquez le fichier YAML suivant pour créer un Secret, un PV et une PVC pour votre bucket OSS.

Pour la liste complète des options ossfs, consultez Monter un volume ossfs 1,0 provisionné statiquement.

apiVersion: v1
kind: Secret
metadata:
  name: oss-secret          # Referenced by the PV's nodePublishSecretRef
  namespace: default
stringData:
  akId: <your-access-key-id>         # Replace with your AccessKey ID
  akSecret: <your-access-key-secret> # Replace with your AccessKey Secret
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss
  labels:
    alicloud-pvname: pv-oss  # Used by the PVC selector to bind to this PV
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany            # Allows concurrent access from multiple workflow steps
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: ossplugin.csi.alibabacloud.com
    volumeHandle: pv-oss       # Must match metadata.name above
    nodePublishSecretRef:
      name: oss-secret         # Secret containing the AccessKey credentials
      namespace: default
    volumeAttributes:
      bucket: <your-bucket-name>  # Replace with your OSS bucket name
      url: "oss-<region-id>-internal.aliyuncs.com"  # Internal endpoint; replace <region-id> with your region, for example, cn-beijing
      otherOpts: "-o umask=022 -o max_stat_cache_size=1000000 -o allow_other"
      path: "/"                # Root directory of the bucket; use a subdirectory if needed, for example, testdir/testdir1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-oss               # Referenced by the workflow's volumes[].persistentVolumeClaim.claimName
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-oss  # Binds this PVC to the pv-oss PV

Paramètres du volume OSS

Configurez des options ossfs supplémentaires dans le champ otherOpts en utilisant le format -o key=value.

Paramètre Description Valeur par défaut
umask Masque d'autorisation pour les fichiers dans OSSFS. La définition de umask=022 attribue aux fichiers l'autorisation 755. Les fichiers téléchargés via le SDK OSS ou la console ont par défaut l'autorisation 640 dans OSSFS. Utilisez ce paramètre lorsque vous devez séparer les lectures et les écritures. —
max_stat_cache_size Nombre maximal d'entrées de métadonnées de fichiers à mettre en cache. La mise en cache accélère le parcours et la lecture des fichiers. Définissez cette valeur sur 0 pour désactiver la mise en cache si vous avez besoin d'une forte cohérence des données (par exemple, lorsque d'autres processus modifient le bucket directement via la console OSS, le SDK ou ossutil). 100 000 entrées (~40 Mo)
allow_other Permet aux autres utilisateurs du système d'exploitation d'accéder au répertoire monté. Ces utilisateurs ne peuvent pas accéder aux fichiers à l'intérieur du répertoire. —

Pour plus de paramètres, consultez Options prises en charge par ossfs.

Cliquez pour afficher l'exemple YAML de montage et d'utilisation d'un volume de stockage OSS dans un flux de travail

Appliquez le fichier YAML du flux de travail suivant. Il exécute deux étapes séquentielles : whalesay écrit un message dans le volume partagé, et print-message le relit.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: default
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Same syntax as a Kubernetes Pod spec
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-oss  # References the PVC created in Step 1

  templates:
    - name: volumes-existing-example
      steps:
        - - name: generate
            template: whalesay
        - - name: print
            template: print-message

    - name: whalesay
      container:
        image: docker/whalesay:latest
        command: [sh, -c]
        args: ["echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt"]
        volumeMounts:
          # Same syntax as a Kubernetes Pod spec
          - name: workdir
            mountPath: /mnt/vol

    - name: print-message
      container:
        image: alpine:latest
        command: [sh, -c]
        args: ["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

Utiliser un volume NAS

Cliquez pour afficher l'exemple YAML d'utilisation d'un volume NAS

Appliquez le fichier YAML suivant pour créer un PV et une PVC NAS provisionnés statiquement.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nas
  labels:
    alicloud-pvname: pv-nas  # Used by the PVC selector to bind to this PV
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany            # Allows concurrent access from multiple workflow steps
  csi:
    driver: nasplugin.csi.alibabacloud.com
    volumeHandle: pv-nas       # Must match metadata.name above
    volumeAttributes:
      server: "<your-nas-filesystem-id>.cn-beijing.nas.aliyuncs.com"  # Replace with your NAS mount target address
      path: "/"
  mountOptions:
    - nolock,tcp,noresvport
    - vers=3
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas               # Referenced by the workflow's volumes[].persistentVolumeClaim.claimName
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas  # Binds this PVC to the pv-nas PV

Cliquez pour afficher l'exemple YAML de montage et d'utilisation d'un volume NAS dans un flux de travail

Appliquez le fichier YAML du flux de travail suivant. La structure est identique à celle de l'exemple OSS : seul le claimName diffère.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: default
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Same syntax as a Kubernetes Pod spec
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-nas  # References the PVC created in Step 1

  templates:
    - name: volumes-existing-example
      steps:
        - - name: generate
            template: whalesay
        - - name: print
            template: print-message

    - name: whalesay
      container:
        image: docker/whalesay:latest
        command: [sh, -c]
        args: ["echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

    - name: print-message
      container:
        image: alpine:latest
        command: [sh, -c]
        args: ["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

Étapes suivantes