Rechercher

4.6. Stockage persistant à l'aide de FlexVolume

download PDF
Important

FlexVolume est une fonctionnalité obsolète. Les fonctionnalités obsolètes sont toujours incluses dans OpenShift Container Platform et continuent d'être prises en charge ; cependant, elles seront supprimées dans une prochaine version de ce produit et ne sont pas recommandées pour les nouveaux déploiements.

Le pilote Out-of-tree Container Storage Interface (CSI) est la manière recommandée d'écrire des pilotes de volume dans OpenShift Container Platform. Les mainteneurs des pilotes FlexVolume devraient implémenter un pilote CSI et déplacer les utilisateurs de FlexVolume vers CSI. Les utilisateurs de FlexVolume devraient déplacer leurs charges de travail vers le pilote CSI.

Pour obtenir la liste la plus récente des fonctionnalités majeures qui ont été dépréciées ou supprimées dans OpenShift Container Platform, consultez la section Deprecated and removed features des notes de version d'OpenShift Container Platform.

OpenShift Container Platform prend en charge FlexVolume, un plugin hors arbre qui utilise un modèle exécutable pour s'interfacer avec les pilotes.

Pour utiliser le stockage à partir d'un back-end qui n'a pas de plugin intégré, vous pouvez étendre OpenShift Container Platform par le biais de pilotes FlexVolume et fournir un stockage persistant aux applications.

Les pods interagissent avec les pilotes FlexVolume par l'intermédiaire du plugin in-tree flexvolume.

Ressources supplémentaires

4.6.1. À propos des pilotes FlexVolume

Un pilote FlexVolume est un fichier exécutable qui réside dans un répertoire bien défini sur tous les nœuds du cluster. OpenShift Container Platform appelle le pilote FlexVolume chaque fois qu'il doit monter ou démonter un volume représenté par un objet PersistentVolume dont la source est flexVolume.

Important

Les opérations d'attachement et de détachement ne sont pas prises en charge dans OpenShift Container Platform for FlexVolume.

4.6.2. Exemple de pilote FlexVolume

Le premier argument de la ligne de commande du pilote FlexVolume est toujours un nom d'opération. Les autres paramètres sont spécifiques à chaque opération. La plupart des opérations prennent en paramètre une chaîne JavaScript Object Notation (JSON). Ce paramètre est une chaîne JSON complète, et non le nom d'un fichier contenant les données JSON.

Le pilote FlexVolume contient

  • Tous les flexVolume.options.
  • Certaines options de flexVolume préfixées par kubernetes.io/, telles que fsType et readwrite.
  • Le contenu du secret référencé, s'il est spécifié, préfixé par kubernetes.io/secret/.

Exemple d'entrée JSON du pilote FlexVolume

{
	"fooServer": "192.168.0.1:1234", 1
        "fooVolumeName": "bar",
	"kubernetes.io/fsType": "ext4", 2
	"kubernetes.io/readwrite": "ro", 3
	"kubernetes.io/secret/<key name>": "<key value>", 4
	"kubernetes.io/secret/<another key name>": "<another key value>",
}

1
Toutes les options à partir de flexVolume.options.
2
La valeur de flexVolume.fsType.
3
ro/rw basé sur flexVolume.readOnly.
4
Toutes les clés et leurs valeurs du secret référencé par flexVolume.secretRef.

OpenShift Container Platform attend des données JSON sur la sortie standard du pilote. Si rien n'est spécifié, la sortie décrit le résultat de l'opération.

Exemple de sortie par défaut du pilote FlexVolume

{
	"status": "<Success/Failure/Not supported>",
	"message": "<Reason for success/failure>"
}

Le code de sortie du pilote doit être 0 en cas de succès et 1 en cas d'erreur.

Les opérations doivent être idempotentes, ce qui signifie que le montage d'un volume déjà monté doit aboutir à une opération réussie.

4.6.3. Installation des pilotes FlexVolume

Les pilotes FlexVolume qui sont utilisés pour étendre OpenShift Container Platform sont exécutés uniquement sur le nœud. Pour mettre en œuvre FlexVolumes, une liste d'opérations à appeler et le chemin d'installation sont tout ce qui est nécessaire.

Conditions préalables

  • Les pilotes FlexVolume doivent implémenter ces opérations :

    init

    Initialise le pilote. Il est appelé lors de l'initialisation de tous les nœuds.

    • Arguments : aucun
    • Exécuté sur : node
    • Résultat attendu : JSON par défaut
    mount

    Monte un volume dans un répertoire. Cela peut inclure tout ce qui est nécessaire pour monter le volume, y compris la recherche du périphérique, puis le montage du périphérique.

    • Arguments : <mount-dir> <json>
    • Exécuté sur : node
    • Résultat attendu : JSON par défaut
    unmount

    Démonte un volume à partir d'un répertoire. Cela peut inclure tout ce qui est nécessaire pour nettoyer le volume après le démontage.

    • Arguments : <mount-dir>
    • Exécuté sur : node
    • Résultat attendu : JSON par défaut
    mountdevice
    Monte le périphérique d'un volume dans un répertoire où les pods individuels peuvent ensuite lier le montage.

Cet appel ne passe pas les "secrets" spécifiés dans la spécification FlexVolume. Si votre pilote exige des secrets, n'implémentez pas cet appel.

  • Arguments : <mount-dir> <json>
  • Exécuté sur : node
  • Résultat attendu : JSON par défaut

    unmountdevice
    Démonte le périphérique d'un volume à partir d'un répertoire.
  • Arguments : <mount-dir>
  • Exécuté sur : node
  • Résultat attendu : JSON par défaut

    • Toutes les autres opérations doivent renvoyer JSON avec {"status": "Not supported"} et le code de sortie 1.

Procédure

Pour installer le pilote FlexVolume :

  1. Assurez-vous que le fichier exécutable existe sur tous les nœuds du cluster.
  2. Placez le fichier exécutable dans le chemin d'accès au plugin du volume : /etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>.

Par exemple, pour installer le pilote FlexVolume pour le stockage foo, placez le fichier exécutable à l'adresse suivante : /etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo.

4.6.4. Consommation de stockage à l'aide de pilotes FlexVolume

Chaque objet PersistentVolume dans OpenShift Container Platform représente un actif de stockage dans le back-end de stockage, tel qu'un volume.

Procédure

  • Utilisez l'objet PersistentVolume pour référencer le stockage installé.

Exemple de définition d'un objet de volume persistant à l'aide des pilotes FlexVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001 1
spec:
  capacity:
    storage: 1Gi 2
  accessModes:
    - ReadWriteOnce
  flexVolume:
    driver: openshift.com/foo 3
    fsType: "ext4" 4
    secretRef: foo-secret 5
    readOnly: true 6
    options: 7
      fooServer: 192.168.0.1:1234
      fooVolumeName: bar

1
Le nom du volume. C'est ainsi qu'il est identifié par les réclamations de volumes persistants ou par les pods. Ce nom peut être différent du nom du volume sur le stockage final.
2
La quantité de stockage allouée à ce volume.
3
Le nom du conducteur. Ce champ est obligatoire.
4
Système de fichiers présent sur le volume. Ce champ est facultatif.
5
La référence à un secret. Les clés et les valeurs de ce secret sont fournies au pilote FlexVolume lors de l'invocation. Ce champ est facultatif.
6
L'indicateur de lecture seule. Ce champ est facultatif.
7
Les options supplémentaires pour le pilote FlexVolume. Outre les options spécifiées par l'utilisateur dans le champ options, les options suivantes sont également transmises à l'exécutable :
"fsType":"<FS type>",
"readwrite":"<rw>",
"secret/key1":"<secret1>"
...
"secret/keyN":"<secretN>"
Note

Les secrets ne sont transmis que pour monter ou démonter des call-outs.

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.