7.3. En utilisant des volumes pour persister les données des conteneurs


Les fichiers dans un conteneur sont éphémères. En tant que tel, lorsqu’un conteneur s’écrase ou s’arrête, les données sont perdues. Il est possible d’utiliser des volumes pour persister les données utilisées par les conteneurs dans un pod. Le volume est un répertoire, accessible aux Conteneurs dans un pod, où les données sont stockées pour la durée de vie de la gousse.

7.3.1. Comprendre les volumes

Les volumes sont des systèmes de fichiers montés disponibles pour les pods et leurs conteneurs qui peuvent être soutenus par un certain nombre de points de stockage locaux ou réseau attachés à l’hôte. Les conteneurs ne sont pas persistants par défaut; au redémarrage, leur contenu est effacé.

Afin de s’assurer que le système de fichiers sur le volume ne contient pas d’erreurs et, si des erreurs sont présentes, pour les réparer si possible, Red Hat OpenShift Service sur AWS invoque l’utilitaire fsck avant l’utilitaire de montage. Cela se produit lors de l’ajout d’un volume ou de la mise à jour d’un volume existant.

Le type de volume le plus simple est emptyDir, qui est un répertoire temporaire sur une seule machine. Les administrateurs peuvent également vous permettre de demander un volume persistant qui est automatiquement attaché à vos pods.

Note

le stockage de volume videDir peut être limité par un quota basé sur le groupe FS du pod, si le paramètre FSGroup est activé par votre administrateur de cluster.

Il est possible d’utiliser le volume défini par commande CLI pour ajouter et supprimer des volumes et des montages de volume pour n’importe quel objet doté d’un modèle de pod comme des contrôleurs de réplication ou des configurations de déploiement. Il est également possible de répertorier les volumes dans les pods ou n’importe quel objet ayant un modèle de pod.

La commande oc set volume utilise la syntaxe générale suivante:

$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
Copy to Clipboard Toggle word wrap
Choix de l’objet
Indiquez l’un des paramètres suivants pour le paramètre object_selection dans la commande oc set volume:
Expand
Tableau 7.1. La sélection d’objets
SyntaxeDescriptionExemple :

&lt;Object_type&gt; &lt;nom&gt;

Sélectionne &lt;nom&gt; du type &lt;object_type&gt;.

déploiement du registreConfig

&lt;Object_type&gt;/&lt;nom&gt;

Sélectionne &lt;nom&gt; du type &lt;object_type&gt;.

déploiementConfig/registry

&lt;Object_type&gt;--selector=&lt;object_label_selector&gt;

Sélectionne les ressources de type &lt;object_type&gt; qui correspondaient au sélecteur d’étiquette donné.

déploiementConfig--selector="nom=registry"

&lt;Object_type&gt; --all

Sélectionne toutes les ressources de type &lt;object_type&gt;.

déploiementConfig --tous

-F ou --filename=&lt;file_name&gt;

Le nom du fichier, le répertoire ou l’URL à utiliser pour modifier la ressource.

-F Registry-deployment-config.json

L’opération
Indiquez --add ou --remove pour le paramètre d’opération dans la commande oc set volume.
Les paramètres obligatoires
Les paramètres obligatoires sont spécifiques à l’opération sélectionnée et sont discutés dans les sections suivantes.
Les options
Les options sont spécifiques à l’opération sélectionnée et sont discutées dans les sections ultérieures.

7.3.3. Liste des volumes et des montages de volume dans un pod

Liste des volumes et des montages de volume dans des pods ou des modèles de pod:

Procédure

Liste des volumes:

$ oc set volume <object_type>/<name> [options]
Copy to Clipboard Toggle word wrap

Liste des options prises en charge du volume:

Expand
L’optionDescriptionDéfaut par défaut

--nom

Le nom du volume.

 

-C, --conteneurs

Choisissez les conteneurs par nom. Il peut également prendre wildcard '*' qui correspond à n’importe quel personnage.

'*'

À titre d’exemple:

  • Liste de tous les volumes pour pod p1:

    $ oc set volume pod/p1
    Copy to Clipboard Toggle word wrap
  • Lister le volume v1 défini sur toutes les configurations de déploiement:

    $ oc set volume dc --all --name=v1
    Copy to Clipboard Toggle word wrap

7.3.4. Ajouter des volumes à un pod

Il est possible d’ajouter des volumes et des montures de volume à un pod.

Procédure

Ajouter un volume, une monture de volume, ou les deux aux modèles de pod:

$ oc set volume <object_type>/<name> --add [options]
Copy to Clipboard Toggle word wrap
Expand
Tableau 7.2. Les options prises en charge pour l’ajout de volumes
L’optionDescriptionDéfaut par défaut

--nom

Le nom du volume.

Généré automatiquement, s’il n’est pas spécifié.

-t, --type

Le nom de la source du volume. Les valeurs prises en charge: emptyDir, hostPath, secret, configmap, persistantVolumeClaim ou projeté.

le videDir

-C, --conteneurs

Choisissez les conteneurs par nom. Il peut également prendre wildcard '*' qui correspond à n’importe quel personnage.

'*'

-M, -- chemin de montagne

Monter le chemin à l’intérieur des conteneurs sélectionnés. Il ne faut pas monter sur la racine du conteneur, /, ou tout chemin qui est le même dans l’hôte et le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié, comme les fichiers hôte /dev/pts. Il est sûr de monter l’hôte en utilisant /host.

 

--chemin

Chemin de l’hôte. Le paramètre obligatoire pour --type=hostPath. Il ne faut pas monter sur la racine du conteneur, /, ou tout chemin qui est le même dans l’hôte et le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié, comme les fichiers hôte /dev/pts. Il est sûr de monter l’hôte en utilisant /host.

 

--secret-nom

Le nom du secret. Le paramètre obligatoire pour --type=secret.

 

--ConfigMap-name

Le nom de la configmap. Le paramètre obligatoire pour --type=configmap.

 

--nom de revendication

Le nom de la revendication de volume persistant. Le paramètre obligatoire pour --type=persistentVolumeClaim.

 

--source

Détails de la source de volume en tant que chaîne JSON. Il est recommandé si la source de volume souhaitée n’est pas prise en charge par --type.

 

-O, --sortie

Afficher les objets modifiés au lieu de les mettre à jour sur le serveur. Les valeurs prises en charge: json, yaml.

 

--sortie-version

Afficher les objets modifiés avec la version donnée.

API-version

À titre d’exemple:

  • Ajouter un nouveau volume source videDir à l’objet DéploiementConfig du registre:

    $ oc set volume dc/registry --add
    Copy to Clipboard Toggle word wrap
    Astuce

    Alternativement, vous pouvez appliquer le YAML suivant pour ajouter le volume:

    Exemple 7.1. Exemple de configuration de déploiement avec un volume ajouté

    kind: DeploymentConfig
    apiVersion: apps.openshift.io/v1
    metadata:
      name: registry
      namespace: registry
    spec:
      replicas: 3
      selector:
        app: httpd
      template:
        metadata:
          labels:
            app: httpd
        spec:
          volumes: 
    1
    
            - name: volume-pppsw
              emptyDir: {}
          containers:
            - name: httpd
              image: >-
                image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
    Copy to Clipboard Toggle word wrap
    1
    Ajoutez la source de volume videDir.
  • Ajouter le volume v1 avec secret secret1 pour le contrôleur de réplication r1 et monter à l’intérieur des conteneurs à /data:

    $ oc set volume rc/r1 --add --name=v1 --type=secret --secret-name='secret1' --mount-path=/data
    Copy to Clipboard Toggle word wrap
    Astuce

    Alternativement, vous pouvez appliquer le YAML suivant pour ajouter le volume:

    Exemple 7.2. Contrôleur de réplication d’échantillons avec volume ajouté et secret

    kind: ReplicationController
    apiVersion: v1
    metadata:
      name: example-1
      namespace: example
    spec:
      replicas: 0
      selector:
        app: httpd
        deployment: example-1
        deploymentconfig: example
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: httpd
            deployment: example-1
            deploymentconfig: example
        spec:
          volumes: 
    1
    
            - name: v1
              secret:
                secretName: secret1
                defaultMode: 420
          containers:
            - name: httpd
              image: >-
                image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
              volumeMounts: 
    2
    
                - name: v1
                  mountPath: /data
    Copy to Clipboard Toggle word wrap
    1
    Ajoutez le volume et le secret.
    2
    Ajoutez le chemin de montage du conteneur.
  • Ajouter le volume v1 persistant existant avec le nom de revendication pvc1 à la configuration de déploiement dc.json sur le disque, monter le volume sur le conteneur c1 à /data, et mettre à jour l’objet DeploymentConfig sur le serveur:

    $ oc set volume -f dc.json --add --name=v1 --type=persistentVolumeClaim \
      --claim-name=pvc1 --mount-path=/data --containers=c1
    Copy to Clipboard Toggle word wrap
    Astuce

    Alternativement, vous pouvez appliquer le YAML suivant pour ajouter le volume:

    Exemple 7.3. Exemple de configuration de déploiement avec volume persistant ajouté

    kind: DeploymentConfig
    apiVersion: apps.openshift.io/v1
    metadata:
      name: example
      namespace: example
    spec:
      replicas: 3
      selector:
        app: httpd
      template:
        metadata:
          labels:
            app: httpd
        spec:
          volumes:
            - name: volume-pppsw
              emptyDir: {}
            - name: v1 
    1
    
              persistentVolumeClaim:
                claimName: pvc1
          containers:
            - name: httpd
              image: >-
                image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
              volumeMounts: 
    2
    
                - name: v1
                  mountPath: /data
    Copy to Clipboard Toggle word wrap
    1
    Ajouter la revendication de volume persistante nommée 'pvc1.
    2
    Ajoutez le chemin de montage du conteneur.
  • Ajouter un volume v1 basé sur le dépôt Git https://github.com/namespace1/project1 avec la révision 5125c45f9f563 pour tous les contrôleurs de réplication:

    $ oc set volume rc --all --add --name=v1 \
      --source='{"gitRepo": {
                    "repository": "https://github.com/namespace1/project1",
                    "revision": "5125c45f9f563"
                }}'
    Copy to Clipboard Toggle word wrap

Il est possible de modifier les volumes et les montages de volume dans un pod.

Procédure

La mise à jour des volumes existants en utilisant l’option --overwrite:

$ oc set volume <object_type>/<name> --add --overwrite [options]
Copy to Clipboard Toggle word wrap

À titre d’exemple:

  • Afin de remplacer le volume v1 existant pour le contrôleur de réplication r1 par la revendication de volume persistante existante pvc1:

    $ oc set volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
    Copy to Clipboard Toggle word wrap
    Astuce

    Alternativement, vous pouvez appliquer le YAML suivant pour remplacer le volume:

    Exemple 7.4. Contrôleur de réplication d’échantillons avec revendication de volume persistante nommée pvc1

    kind: ReplicationController
    apiVersion: v1
    metadata:
      name: example-1
      namespace: example
    spec:
      replicas: 0
      selector:
        app: httpd
        deployment: example-1
        deploymentconfig: example
      template:
        metadata:
          labels:
            app: httpd
            deployment: example-1
            deploymentconfig: example
        spec:
          volumes:
            - name: v1 
    1
    
              persistentVolumeClaim:
                claimName: pvc1
          containers:
            - name: httpd
              image: >-
                image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
              volumeMounts:
                - name: v1
                  mountPath: /data
    Copy to Clipboard Toggle word wrap
    1
    Définir la revendication de volume persistant à pvc1.
  • Changer le point de montage de l’objet D1 DeploymentConfig en /opt pour le volume v1:

    $ oc set volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
    Copy to Clipboard Toggle word wrap
    Astuce

    Alternativement, vous pouvez appliquer le YAML suivant pour changer le point de montage:

    Exemple 7.5. Exemple de configuration de déploiement avec le point de montage défini pour opter.

    kind: DeploymentConfig
    apiVersion: apps.openshift.io/v1
    metadata:
      name: example
      namespace: example
    spec:
      replicas: 3
      selector:
        app: httpd
      template:
        metadata:
          labels:
            app: httpd
        spec:
          volumes:
            - name: volume-pppsw
              emptyDir: {}
            - name: v2
              persistentVolumeClaim:
                claimName: pvc1
            - name: v1
              persistentVolumeClaim:
                claimName: pvc1
          containers:
            - name: httpd
              image: >-
                image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
              volumeMounts: 
    1
    
                - name: v1
                  mountPath: /opt
    Copy to Clipboard Toggle word wrap
    1
    Définissez le point de montage sur /opt.

Il est possible d’enlever un support de volume ou de volume d’une gousse.

Procédure

Afin de supprimer un volume des modèles de pod:

$ oc set volume <object_type>/<name> --remove [options]
Copy to Clipboard Toggle word wrap
Expand
Tableau 7.3. Les options prises en charge pour supprimer les volumes
L’optionDescriptionDéfaut par défaut

--nom

Le nom du volume.

 

-C, --conteneurs

Choisissez les conteneurs par nom. Il peut également prendre wildcard '*' qui correspond à n’importe quel personnage.

'*'

--confirmer

Indiquez que vous souhaitez supprimer plusieurs volumes à la fois.

 

-O, --sortie

Afficher les objets modifiés au lieu de les mettre à jour sur le serveur. Les valeurs prises en charge: json, yaml.

 

--sortie-version

Afficher les objets modifiés avec la version donnée.

API-version

À titre d’exemple:

  • Afin de supprimer un volume v1 de l’objet DeploymentConfig d1:

    $ oc set volume dc/d1 --remove --name=v1
    Copy to Clipboard Toggle word wrap
  • Démonter le volume v1 du conteneur c1 pour l’objet DeploymentConfig d1 et supprimer le volume v1 s’il n’est pas référencé par des conteneurs sur d1:

    $ oc set volume dc/d1 --remove --name=v1 --containers=c1
    Copy to Clipboard Toggle word wrap
  • De supprimer tous les volumes pour le contrôleur de réplication r1:

    $ oc set volume rc/r1 --remove --confirm
    Copy to Clipboard Toggle word wrap

En utilisant la propriété VolumeMounts.subPath, vous pouvez configurer un volume pour partager un volume pour plusieurs utilisations en utilisant la propriété volumeMounts.subPath pour spécifier une valeur subPath à l’intérieur d’un volume au lieu de la racine du volume.

Note

Il n’est pas possible d’ajouter un paramètre SubPath à une pod existante.

Procédure

  1. Afin d’afficher la liste des fichiers dans le volume, exécutez la commande oc rsh:

    $ oc rsh <pod>
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    sh-4.2$ ls /path/to/volume/subpath/mount
    example_file1 example_file2 example_file3
    Copy to Clipboard Toggle word wrap

  2. Indiquez le sous-Path:

    Exemple Pod spec avec paramètre subPath

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-site
    spec:
        securityContext:
          runAsNonRoot: true
          seccompProfile:
            type: RuntimeDefault
        containers:
        - name: mysql
          image: mysql
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: site-data
            subPath: mysql 
    1
    
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
        - name: php
          image: php
          volumeMounts:
          - mountPath: /var/www/html
            name: site-data
            subPath: html 
    2
    
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
        volumes:
        - name: site-data
          persistentVolumeClaim:
            claimName: my-site-data
    Copy to Clipboard Toggle word wrap

    1
    Les bases de données sont stockées dans le dossier mysql.
    2
    Le contenu HTML est stocké dans le dossier html.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat