6.3. Utilisation de volumes pour conserver les données des conteneurs


Les fichiers d'un conteneur sont éphémères. En tant que tels, lorsqu'un conteneur tombe en panne ou s'arrête, les données sont perdues. Vous pouvez utiliser volumes pour conserver les données utilisées par les conteneurs d'un module. Un volume est un répertoire, accessible aux conteneurs d'un module, dans lequel les données sont stockées pendant toute la durée de vie du module.

6.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 d'extrémité de stockage locaux à l'hôte ou attachés au réseau. Les conteneurs ne sont pas persistants par défaut ; au redémarrage, leur contenu est effacé.

Pour 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, OpenShift Container Platform invoque l'utilitaire fsck avant l'utilitaire mount. 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

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

6.3.2. Travailler avec des volumes en utilisant le CLI de OpenShift Container Platform

Vous pouvez utiliser la commande CLI oc set volume pour ajouter et supprimer des volumes et des montages de volumes pour tout objet ayant un modèle de pod, comme les contrôleurs de réplication ou les configurations de déploiement. Vous pouvez également dresser la liste des volumes dans les pods ou tout 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>
Sélection d'objets
Spécifiez l'un des éléments suivants pour le paramètre object_selection de la commande oc set volume:
Tableau 6.1. Sélection d'objets
SyntaxeDescriptionExemple :

<object_type> <name>

Sélectionne <name> du type <object_type>.

deploymentConfig registry

<object_type>/<name>

Sélectionne <name> du type <object_type>.

deploymentConfig/registry

<object_type>--selector=<object_label_selector>

Sélectionne les ressources de type <object_type> correspondant au sélecteur d'étiquette donné.

deploymentConfig--selector="name=registry"

<object_type> --all

Sélectionne toutes les ressources de type <object_type>.

deploymentConfig --all

-f ou --filename=<file_name>

Nom de fichier, répertoire ou URL du fichier à utiliser pour modifier la ressource.

-f registry-deployment-config.json

Fonctionnement
Spécifiez --add ou --remove pour le paramètre operation de la commande oc set volume.
Paramètres obligatoires
Les paramètres obligatoires sont spécifiques à l'opération sélectionnée et sont abordés dans les sections suivantes.
Options
Toutes les options sont spécifiques à l'opération sélectionnée et sont discutées dans les sections suivantes.

6.3.3. Liste des volumes et des montages de volumes dans un pod

Vous pouvez répertorier les volumes et les montages de volumes dans les pods ou les modèles de pods :

Procédure

Pour dresser la liste des volumes :

oc set volume <object_type>/<name> [options]

Liste des options supportées par le volume :

OptionDescriptionDéfaut

--name

Nom du volume.

 

-c, --containers

Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique '*' qui correspond à n'importe quel caractère.

'*'

Par exemple :

  • Pour dresser la liste de tous les volumes du pod p1:

    $ oc set volume pod/p1
  • Pour lister les volumes v1 définis dans toutes les configurations de déploiement :

    $ oc set volume dc --all --name=v1

6.3.4. Ajouter des volumes à un module

Vous pouvez ajouter des volumes et des montages de volumes à un module.

Procédure

Pour ajouter un volume, un montage de volume ou les deux à des modèles de pods :

oc set volume <object_type>/<name> --add [options] $ oc set volume <object_type>/<name> --add [options]
Tableau 6.2. Options prises en charge pour l'ajout de volumes
OptionDescriptionDéfaut

--name

Nom du volume.

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

-t, --type

Nom de la source du volume. Valeurs soutenues : emptyDir, hostPath, secret, configmap, persistentVolumeClaim ou projected.

emptyDir

-c, --containers

Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique '*' qui correspond à n'importe quel caractère.

'*'

-m, --mount-path

Chemin de montage à l'intérieur des conteneurs sélectionnés. Ne montez pas sur la racine du conteneur, /, ni sur un chemin identique 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 de l'hôte /dev/pts. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.

 

--path

Chemin d'accès à l'hôte. Paramètre obligatoire pour --type=hostPath. Ne montez pas sur la racine du conteneur, /, ou sur un chemin identique sur l'hôte et le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié, comme les fichiers /dev/pts de l'hôte. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.

 

--secret-name

Nom du secret. Paramètre obligatoire pour --type=secret.

 

--configmap-name

Nom de la carte de configuration. Paramètre obligatoire pour --type=configmap.

 

--claim-name

Nom de la revendication de volume persistant. Paramètre obligatoire pour --type=persistentVolumeClaim.

 

--source

Détails de la source de volume sous forme de chaîne JSON. Recommandé si la source de volume souhaitée n'est pas prise en charge par --type.

 

-o, --output

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

 

--output-version

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

api-version

Par exemple :

  • Pour ajouter une nouvelle source de volume emptyDir à l'objet registry DeploymentConfig :

    $ oc set volume dc/registry --add
    Astuce

    Vous pouvez également appliquer le code YAML suivant pour ajouter le volume :

    Exemple 6.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
    1
    Ajouter la source du volume emptyDir.
  • Pour ajouter le volume v1 avec le secret secret1 pour le contrôleur de réplication r1 et le monter dans les conteneurs à l'adresse suivante /data:

    $ oc set volume rc/r1 --add --name=v1 --type=secret --secret-name='secret1' --mount-path=/data
    Astuce

    Vous pouvez également appliquer le code YAML suivant pour ajouter le volume :

    Exemple 6.2. Exemple de contrôleur de réplication avec volume et secret ajoutés

    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
    1
    Ajouter le volume et le secret.
    2
    Ajouter le chemin de montage du conteneur.
  • Pour ajouter le volume persistant existant v1 avec le nom de revendication pvc1 à la configuration de déploiement dc.json sur le disque, monter le volume sur le conteneur c1 à l'adresse /dataet mettez à 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
    Astuce

    Vous pouvez également appliquer le code YAML suivant pour ajouter le volume :

    Exemple 6.3. Exemple de configuration de déploiement avec ajout d'un volume persistant

    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
    1
    Ajouter la revendication de volume persistant nommée `pvc1.
    2
    Ajouter le chemin de montage du conteneur.
  • Pour 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"
                }}'

6.3.5. Mise à jour des volumes et des montages de volumes dans un pod

Vous pouvez modifier les volumes et les montages de volumes dans un pod.

Procédure

Mise à jour des volumes existants à l'aide de l'option --overwrite:

oc set volume <object_type>/<name> --add --overwrite [options] $ oc set volume <object_type>/<name> --add --overwrite

Par exemple :

  • Pour remplacer le volume existant v1 pour le contrôleur de réplication r1 par une revendication de volume persistant existante pvc1:

    $ oc set volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
    Astuce

    Vous pouvez également appliquer le YAML suivant pour remplacer le volume :

    Exemple 6.4. Exemple de contrôleur de réplication avec un volume persistant nommé 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
    1
    Définir la revendication de volume persistant sur pvc1.
  • Pour modifier le point de montage de l'objet DeploymentConfig d1 en /opt pour le volume v1:

    $ oc set volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
    Astuce

    Vous pouvez également appliquer le YAML suivant pour modifier le point de montage :

    Exemple 6.5. Exemple de configuration de déploiement avec un point de montage défini sur opt.

    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
    1
    Définissez le point de montage à /opt.

6.3.6. Suppression de volumes et de montages de volumes d'un pod

Vous pouvez supprimer un volume ou un montage de volume d'un module.

Procédure

Pour supprimer un volume des modèles de pods :

oc set volume <object_type>/<name> --remove [options] $ oc set volume <object_type>/<name> --remove
Tableau 6.3. Options prises en charge pour la suppression des volumes
OptionDescriptionDéfaut

--name

Nom du volume.

 

-c, --containers

Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique '*' qui correspond à n'importe quel caractère.

'*'

--confirm

Indiquez que vous souhaitez supprimer plusieurs volumes à la fois.

 

-o, --output

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

 

--output-version

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

api-version

Par exemple :

  • Pour supprimer un volume v1 de l'objet DeploymentConfig d1 :

    $ oc set volume dc/d1 --remove --name=v1
  • Démonter le volume v1 du conteneur c1 pour l'objet DeploymentConfig d1 et supprimer le volume v1 s'il n'est référencé par aucun conteneur sur d1:

    $ oc set volume dc/d1 --remove --name=v1 --containers=c1
  • Pour supprimer tous les volumes du contrôleur de réplication r1:

    $ oc set volume rc/r1 --remove --confirm

6.3.7. Configurer des volumes pour des utilisations multiples dans un pod

Vous pouvez configurer un volume pour vous permettre de partager un volume pour plusieurs utilisations dans un seul pod 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.

Procédure

  1. Pour afficher la liste des fichiers contenus dans le volume, exécutez la commande oc rsh:

    $ oc rsh <pod>

    Exemple de sortie

    sh-4.2$ ls /path/to/volume/subpath/mount
    example_file1 example_file2 example_file3

  2. Spécifiez le site subPath:

    Exemple : Pod spec avec subPath parameter

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-site
    spec:
        containers:
        - name: mysql
          image: mysql
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: site-data
            subPath: mysql 1
        - name: php
          image: php
          volumeMounts:
          - mountPath: /var/www/html
            name: site-data
            subPath: html 2
        volumes:
        - name: site-data
          persistentVolumeClaim:
            claimName: my-site-data

    1
    Les bases de données sont stockées dans le dossier mysql.
    2
    Le contenu HTML est stocké dans le dossier html.
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.

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

© 2024 Red Hat, Inc.