4.6. Stockage persistant à l'aide de FlexVolume
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
.
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 parkubernetes.io/
, telles quefsType
etreadwrite
. -
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>", }
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
-
Arguments :
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
-
Arguments :
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 sortie1
.
-
Toutes les autres opérations doivent renvoyer JSON avec
Procédure
Pour installer le pilote FlexVolume :
- Assurez-vous que le fichier exécutable existe sur tous les nœuds du cluster.
-
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>"
Les secrets ne sont transmis que pour monter ou démonter des call-outs.