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.
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 commandeoc set volume
:
Syntaxe | Description | Exemple : |
---|---|---|
|
Sélectionne |
|
|
Sélectionne |
|
|
Sélectionne les ressources de type |
|
|
Sélectionne toutes les ressources de type |
|
| Nom de fichier, répertoire ou URL du fichier à utiliser pour modifier la ressource. |
|
- Fonctionnement
-
Spécifiez
--add
ou--remove
pour le paramètreoperation
de la commandeoc 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 :
Option | Description | Défaut |
---|---|---|
| Nom du volume. | |
|
Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique |
|
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]
Option | Description | Défaut |
---|---|---|
| Nom du volume. | Généré automatiquement s'il n'est pas spécifié. |
|
Nom de la source du volume. Valeurs soutenues : |
|
|
Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique |
|
|
Chemin de montage à l'intérieur des conteneurs sélectionnés. Ne montez pas sur la racine du conteneur, | |
|
Chemin d'accès à l'hôte. Paramètre obligatoire pour | |
|
Nom du secret. Paramètre obligatoire pour | |
|
Nom de la carte de configuration. Paramètre obligatoire pour | |
|
Nom de la revendication de volume persistant. Paramètre obligatoire pour | |
|
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 | |
|
Affiche les objets modifiés au lieu de les mettre à jour sur le serveur. Valeurs prises en charge : | |
| Affiche les objets modifiés avec la version donnée. |
|
Par exemple :
Pour ajouter une nouvelle source de volume emptyDir à l'objet registry
DeploymentConfig
:$ oc set volume dc/registry --add
AstuceVous 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
AstuceVous 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
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
AstuceVous 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
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
AstuceVous 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
AstuceVous 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
Option | Description | Défaut |
---|---|---|
| Nom du volume. | |
|
Sélectionner les conteneurs par leur nom. Il peut également prendre un caractère générique |
|
| Indiquez que vous souhaitez supprimer plusieurs volumes à la fois. | |
|
Affiche les objets modifiés au lieu de les mettre à jour sur le serveur. Valeurs prises en charge : | |
| Affiche les objets modifiés avec la version donnée. |
|
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
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
Spécifiez le site
subPath
:Exemple :
Pod
spec avecsubPath
parameterapiVersion: 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