Stockage

OpenShift Container Platform 4.12

Configurer et gérer le stockage dans OpenShift Container Platform

Red Hat OpenShift Documentation Team

Résumé

Ce document fournit des instructions pour configurer des volumes persistants à partir de différents backends de stockage et pour gérer l'allocation dynamique à partir de Pods.

Chapitre 1. Aperçu du stockage sur OpenShift Container Platform

OpenShift Container Platform prend en charge plusieurs types de stockage, à la fois pour les fournisseurs sur site et dans le nuage. Vous pouvez gérer le stockage des conteneurs pour les données persistantes et non persistantes dans un cluster OpenShift Container Platform.

1.1. Glossaire des termes courants pour le stockage sur OpenShift Container Platform

Ce glossaire définit les termes communs utilisés dans le contenu du stockage.

Modes d'accès

Les modes d'accès aux volumes décrivent les capacités des volumes. Vous pouvez utiliser les modes d'accès pour faire correspondre la réclamation de volume persistant (PVC) et le volume persistant (PV). Voici des exemples de modes d'accès :

  • ReadWriteOnce (RWO)
  • ReadOnlyMany (ROX)
  • ReadWriteMany (RWX)
  • ReadWriteOncePod (RWOP) (lecture-écriture-unique)
Cendres
Le service de stockage de blocs pour Red Hat OpenStack Platform (RHOSP) qui gère l'administration, la sécurité et la planification de tous les volumes.
Carte de configuration
Une carte de configuration permet d'injecter des données de configuration dans les pods. Vous pouvez référencer les données stockées dans une carte de configuration dans un volume de type ConfigMap. Les applications fonctionnant dans un pod peuvent utiliser ces données.
Interface de stockage de conteneurs (CSI)
Une spécification d'API pour la gestion du stockage des conteneurs à travers différents systèmes d'orchestration de conteneurs (CO).
Provisionnement dynamique
Le cadre vous permet de créer des volumes de stockage à la demande, ce qui évite aux administrateurs de clusters de devoir préprovisionner le stockage persistant.
Stockage éphémère
Les pods et les conteneurs peuvent avoir besoin d'un stockage local temporaire ou transitoire pour leur fonctionnement. La durée de vie de ce stockage éphémère ne dépasse pas la durée de vie du pod individuel, et ce stockage éphémère ne peut pas être partagé entre les pods.
Canal à fibres
Technologie de réseau utilisée pour transférer des données entre les centres de données, les serveurs informatiques, les commutateurs et le stockage.
FlexVolume
FlexVolume est une interface de plugin hors arborescence qui utilise un modèle basé sur l'exécution pour s'interfacer avec les pilotes de stockage. Vous devez installer les binaires du pilote FlexVolume dans un chemin d'accès prédéfini au plugin de volume sur chaque nœud et, dans certains cas, sur les nœuds du plan de contrôle.
fsGroup
Le paramètre fsGroup définit l'identifiant du groupe de systèmes de fichiers d'un pod.
iSCSI
Internet Small Computer Systems Interface (iSCSI) est une norme de réseau de stockage basée sur le protocole Internet qui permet de relier des installations de stockage de données. Un volume iSCSI permet de monter un volume iSCSI (SCSI over IP) existant dans votre Pod.
chemin d'accès
Un volume hostPath dans un cluster OpenShift Container Platform monte un fichier ou un répertoire du système de fichiers du nœud hôte dans votre pod.
Clé KMS
Le service de gestion des clés (KMS) vous aide à atteindre le niveau de cryptage requis pour vos données dans différents services. Vous pouvez utiliser la clé KMS pour crypter, décrypter et recrypter les données.
Volumes locaux
Un volume local représente un périphérique de stockage local monté, tel qu'un disque, une partition ou un répertoire.
NFS
Un système de fichiers réseau (NFS) qui permet aux hôtes distants de monter des systèmes de fichiers sur un réseau et d'interagir avec ces systèmes de fichiers comme s'ils étaient montés localement. Cela permet aux administrateurs système de consolider les ressources sur des serveurs centralisés sur le réseau.
OpenShift Data Foundation
Un fournisseur de stockage persistant agnostique pour OpenShift Container Platform prenant en charge le stockage de fichiers, de blocs et d'objets, que ce soit en interne ou dans des clouds hybrides
Stockage permanent
Les pods et les conteneurs peuvent nécessiter un stockage permanent pour leur fonctionnement. OpenShift Container Platform utilise le cadre de volume persistant (PV) de Kubernetes pour permettre aux administrateurs de cluster de provisionner le stockage persistant pour un cluster. Les développeurs peuvent utiliser le PVC pour demander des ressources PV sans avoir de connaissances spécifiques sur l'infrastructure de stockage sous-jacente.
Volumes persistants (PV)
OpenShift Container Platform utilise le cadre de volume persistant (PV) de Kubernetes pour permettre aux administrateurs de cluster de provisionner le stockage persistant pour un cluster. Les développeurs peuvent utiliser le PVC pour demander des ressources PV sans avoir de connaissances spécifiques sur l'infrastructure de stockage sous-jacente.
Revendications de volumes persistants (PVC)
Vous pouvez utiliser un PVC pour monter un PersistentVolume dans un Pod. Vous pouvez accéder au stockage sans connaître les détails de l'environnement en nuage.
Cosse
Un ou plusieurs conteneurs avec des ressources partagées, telles que le volume et les adresses IP, fonctionnant dans votre cluster OpenShift Container Platform. Un pod est la plus petite unité de calcul définie, déployée et gérée.
Politique de récupération
Une politique qui indique au cluster ce qu'il doit faire du volume après qu'il a été libéré. La politique de récupération d'un volume peut être Retain, Recycle, ou Delete.
Contrôle d'accès basé sur les rôles (RBAC)
Le contrôle d'accès basé sur les rôles (RBAC) est une méthode de régulation de l'accès aux ressources informatiques ou réseau basée sur les rôles des utilisateurs individuels au sein de votre organisation.
Applications sans état
Une application sans état est un programme d'application qui n'enregistre pas les données du client générées au cours d'une session pour les utiliser lors de la session suivante avec ce client.
Applications avec état
Une application avec état est un programme d'application qui enregistre des données sur un disque de stockage persistant. Un serveur, un client et des applications peuvent utiliser un stockage sur disque persistant. Vous pouvez utiliser l'objet Statefulset dans OpenShift Container Platform pour gérer le déploiement et la mise à l'échelle d'un ensemble de Pods, et fournir des garanties sur l'ordre et l'unicité de ces Pods.
Provisionnement statique
Un administrateur de cluster crée un certain nombre de PV. Les PV contiennent les détails du stockage. Les PV existent dans l'API Kubernetes et sont disponibles à la consommation.
Stockage
OpenShift Container Platform prend en charge de nombreux types de stockage, à la fois pour les fournisseurs sur site et dans le nuage. Vous pouvez gérer le stockage des conteneurs pour les données persistantes et non persistantes dans un cluster OpenShift Container Platform.
Classe de stockage
Une classe de stockage permet aux administrateurs de décrire les classes de stockage qu'ils proposent. Les différentes classes peuvent correspondre à des niveaux de qualité de service, à des politiques de sauvegarde ou à des politiques arbitraires déterminées par les administrateurs du cluster.
Volumes de disques de machines virtuelles (VMDK) de VMware vSphere
Virtual Machine Disk (VMDK) est un format de fichier qui décrit des conteneurs pour les disques durs virtuels utilisés dans les machines virtuelles.

1.2. Types de stockage

Le stockage sur OpenShift Container Platform se divise en deux catégories, à savoir le stockage éphémère et le stockage persistant.

1.2.1. Stockage éphémère

Les pods et les conteneurs sont de nature éphémère ou transitoire et sont conçus pour des applications sans état. Le stockage éphémère permet aux administrateurs et aux développeurs de mieux gérer le stockage local pour certaines de leurs opérations. Pour plus d'informations sur la présentation, les types et la gestion du stockage éphémère, voir Comprendre le stockage éphémère.

1.2.2. Stockage permanent

Les applications avec état déployées dans des conteneurs nécessitent un stockage persistant. OpenShift Container Platform utilise un cadre de stockage pré-provisionné appelé volumes persistants (PV) pour permettre aux administrateurs de cluster de provisionner le stockage persistant. Les données contenues dans ces volumes peuvent exister au-delà du cycle de vie d'un pod individuel. Les développeurs peuvent utiliser des réclamations de volumes persistants (PVC) pour demander des exigences de stockage. Pour plus d'informations sur la présentation, la configuration et le cycle de vie du stockage persistant, voir Comprendre le stockage persistant.

1.3. Interface de stockage de conteneurs (CSI)

CSI est une spécification d'API pour la gestion du stockage des conteneurs dans différents systèmes d'orchestration de conteneurs (CO). Vous pouvez gérer les volumes de stockage dans les environnements natifs de conteneurs, sans avoir de connaissances spécifiques sur l'infrastructure de stockage sous-jacente. Grâce à l'ICS, le stockage fonctionne uniformément dans les différents systèmes d'orchestration de conteneurs, quels que soient les fournisseurs de stockage que vous utilisez. Pour plus d'informations sur l'interface CSI, voir Utilisation de l'interface de stockage de conteneurs (CSI).

1.4. Provisionnement dynamique

Le provisionnement dynamique vous permet de créer des volumes de stockage à la demande, ce qui évite aux administrateurs de cluster de devoir préprovisionner le stockage. Pour plus d'informations sur le provisionnement dynamique, voir Provisionnement dynamique.

Chapitre 2. Comprendre le stockage éphémère

2.1. Vue d'ensemble

En plus du stockage persistant, les pods et les conteneurs peuvent avoir besoin d'un stockage local éphémère ou transitoire pour leur fonctionnement. La durée de vie de ce stockage éphémère ne dépasse pas la durée de vie du pod individuel, et ce stockage éphémère ne peut pas être partagé entre les pods.

Les pods utilisent un stockage local éphémère pour l'espace d'effacement, la mise en cache et les journaux. Les problèmes liés à l'absence de comptabilisation et d'isolation du stockage local sont notamment les suivants :

  • Les pods ne peuvent pas détecter la quantité de stockage local dont ils disposent.
  • Les pods ne peuvent pas demander de stockage local garanti.
  • Le stockage local est une ressource qui fonctionne au mieux.
  • Les pods peuvent être expulsés parce que d'autres pods remplissent le stockage local, après quoi les nouveaux pods ne sont pas admis jusqu'à ce qu'une quantité suffisante de stockage soit récupérée.

Contrairement aux volumes persistants, le stockage éphémère n'est pas structuré et l'espace est partagé entre tous les pods fonctionnant sur un nœud, en plus d'autres utilisations par le système, le runtime de conteneur et OpenShift Container Platform. Le cadre de stockage éphémère permet aux pods de spécifier leurs besoins de stockage locaux transitoires. Il permet également à OpenShift Container Platform de planifier les pods le cas échéant et de protéger le nœud contre une utilisation excessive du stockage local.

Si le cadre de stockage éphémère permet aux administrateurs et aux développeurs de mieux gérer le stockage local, le débit d'E/S et la latence ne sont pas directement affectés.

2.2. Types de stockage éphémère

Le stockage local éphémère est toujours disponible dans la partition primaire. Il existe deux manières de créer la partition primaire : la partition racine et la partition d'exécution.

Racine

Cette partition contient le répertoire racine des kubelets, /var/lib/kubelet/ par défaut, et le répertoire /var/log/. Cette partition peut être partagée entre les pods utilisateurs, le système d'exploitation et les démons du système Kubernetes. Cette partition peut être consommée par les pods via les volumes EmptyDir, les journaux de conteneurs, les couches d'images et les couches inscriptibles dans les conteneurs. Kubelet gère l'accès partagé et l'isolation de cette partition. Cette partition est éphémère et les applications ne peuvent pas s'attendre à des accords de niveau de service (SLA) en matière de performances, tels que l'IOPS du disque, à partir de cette partition.

Temps d'exécution

Il s'agit d'une partition optionnelle que les runtimes peuvent utiliser pour les systèmes de fichiers superposés. OpenShift Container Platform tente d'identifier et de fournir un accès partagé ainsi qu'une isolation à cette partition. Les couches d'images de conteneurs et les couches inscriptibles sont stockées ici. Si la partition d'exécution existe, la partition root ne contient aucune couche d'image ni aucun autre stockage accessible en écriture.

2.3. Gestion du stockage éphémère

Les administrateurs de cluster peuvent gérer le stockage éphémère au sein d'un projet en fixant des quotas qui définissent les plages limites et le nombre de demandes de stockage éphémère pour tous les pods dans un état non terminal. Les développeurs peuvent également définir des demandes et des limites sur cette ressource de calcul au niveau du pod et du conteneur.

Vous pouvez gérer le stockage éphémère local en spécifiant des demandes et des limites. Chaque conteneur d'un module peut spécifier les éléments suivants :

  • spec.containers[].resources.limits.ephemeral-storage
  • spec.containers[].resources.requests.ephemeral-storage

Les limites et les demandes de stockage éphémère sont mesurées en nombre d'octets. Vous pouvez exprimer le stockage sous la forme d'un nombre entier simple ou d'un nombre à virgule fixe en utilisant l'un de ces suffixes : E, P, T, G, M, k. Vous pouvez également utiliser les équivalents en puissance de deux : Ei, Pi, Ti, Gi, Mi, Ki. Par exemple, les quantités suivantes représentent toutes approximativement la même valeur : 128974848, 129e6, 129M, et 123Mi. Le cas des suffixes est significatif. Si vous spécifiez 400 m de stockage éphémère, cela demande 0,4 octet, plutôt que 400 mégaoctets (400Mi) ou 400 mégaoctets (400M), ce qui était probablement l'intention.

L'exemple suivant montre un pod avec deux conteneurs. Chaque conteneur demande 2 Go de stockage éphémère local. Chaque conteneur a une limite de 4 Go de stockage éphémère local. Par conséquent, le module a une demande de 4 Go de stockage éphémère local et une limite de 8 Go de stockage éphémère local.

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        ephemeral-storage: "2Gi" 1
      limits:
        ephemeral-storage: "4Gi" 2
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        ephemeral-storage: "2Gi" 3
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  volumes:
    - name: ephemeral
      emptyDir: {}
1 3
Demande de stockage éphémère local.
2
Limite pour le stockage local éphémère.

Ce paramètre de la spécification des pods affecte la façon dont l'ordonnanceur prend une décision sur la programmation des pods, ainsi que la façon dont kubelet évince les pods. Tout d'abord, l'ordonnanceur s'assure que la somme des demandes de ressources des conteneurs programmés est inférieure à la capacité du nœud. Dans ce cas, le pod ne peut être assigné à un nœud que si son stockage éphémère disponible (ressource allouable) est supérieur à 4 Go.

Deuxièmement, au niveau du conteneur, puisque le premier conteneur fixe une limite de ressources, le gestionnaire d'expulsion kubelet mesure l'utilisation du disque de ce conteneur et expulse le pod si l'utilisation du stockage de ce conteneur dépasse sa limite (4GiB). Au niveau du pod, kubelet calcule une limite de stockage globale pour le pod en additionnant les limites de tous les conteneurs de ce pod. Dans ce cas, l'utilisation totale du stockage au niveau du pod est la somme de l'utilisation du disque de tous les conteneurs plus les volumes emptyDir du pod. Si cette utilisation totale dépasse la limite de stockage globale du pod (4 Go), le kubelet marque également le pod pour éviction.

Pour plus d'informations sur la définition des quotas pour les projets, voir Paramétrage des quotas par projet.

2.4. Surveillance du stockage éphémère

Vous pouvez utiliser /bin/df comme outil pour surveiller l'utilisation du stockage éphémère sur le volume où se trouvent les données des conteneurs éphémères, c'est-à-dire /var/lib/kubelet et /var/lib/containers. L'espace disponible pour /var/lib/kubelet est affiché lorsque vous utilisez la commande df si /var/lib/containers est placé sur un disque séparé par l'administrateur du cluster.

Pour afficher les valeurs lisibles par l'homme de l'espace utilisé et de l'espace disponible dans /var/lib, entrez la commande suivante :

$ df -h /var/lib

La sortie montre l'utilisation du stockage éphémère dans /var/lib:

Exemple de sortie

Filesystem  Size  Used Avail Use% Mounted on
/dev/sda1    69G   32G   34G  49% /

Chapitre 3. Comprendre le stockage persistant

3.1. Vue d'ensemble du stockage persistant

La gestion du stockage est un problème distinct de la gestion des ressources informatiques. OpenShift Container Platform utilise le cadre de volume persistant (PV) de Kubernetes pour permettre aux administrateurs de cluster de provisionner le stockage persistant pour un cluster. Les développeurs peuvent utiliser des réclamations de volume persistant (PVC) pour demander des ressources PV sans avoir de connaissances spécifiques sur l'infrastructure de stockage sous-jacente.

Les PVC sont spécifiques à un projet et sont créés et utilisés par les développeurs comme moyen d'utiliser un PV. Les ressources PV en elles-mêmes ne sont pas limitées à un seul projet ; elles peuvent être partagées sur l'ensemble du cluster OpenShift Container Platform et réclamées à partir de n'importe quel projet. Une fois qu'un PV est lié à un PVC, il ne peut plus être lié à d'autres PVC. Cela a pour effet de limiter un PV lié à un seul espace de noms, celui du projet de liaison.

Les PV sont définis par un objet API PersistentVolume, qui représente un élément de stockage existant dans la grappe, provisionné de manière statique par l'administrateur de la grappe ou de manière dynamique à l'aide d'un objet StorageClass. Il s'agit d'une ressource de la grappe tout comme un nœud est une ressource de la grappe.

Les PV sont des plugins de volume comme Volumes, mais leur cycle de vie est indépendant de tout pod individuel qui utilise le PV. Les objets PV capturent les détails de la mise en œuvre du stockage, qu'il s'agisse de NFS, d'iSCSI ou d'un système de stockage spécifique au fournisseur de cloud.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Les PVC sont définis par un objet API PersistentVolumeClaim, qui représente une demande de stockage de la part d'un développeur. Il est similaire à un pod dans la mesure où les pods consomment des ressources de nœuds et les PVC des ressources de PV. Par exemple, les pods peuvent demander des niveaux de ressources spécifiques, tels que le CPU et la mémoire, tandis que les PVC peuvent demander une capacité de stockage et des modes d'accès spécifiques. Par exemple, ils peuvent être montés une fois en lecture-écriture ou plusieurs fois en lecture seule.

3.2. Cycle de vie d'un volume et d'une revendication

Les PV sont des ressources dans le cluster. Les PVC sont des demandes pour ces ressources et agissent également comme des contrôles de réclamation pour la ressource. L'interaction entre les PV et les PVC a le cycle de vie suivant.

3.2.1. Mise à disposition d'un espace de stockage

En réponse aux demandes d'un développeur défini dans un PVC, un administrateur de cluster configure un ou plusieurs provisionneurs dynamiques qui fournissent du stockage et un PV correspondant.

Un administrateur de cluster peut également créer à l'avance un certain nombre de PV qui contiennent les détails du stockage réel disponible pour l'utilisation. Les PV existent dans l'API et peuvent être utilisés.

3.2.2. Lier les créances

Lorsque vous créez un PVC, vous demandez une quantité spécifique de stockage, vous spécifiez le mode d'accès requis et vous créez une classe de stockage pour décrire et classer le stockage. La boucle de contrôle du maître surveille les nouveaux PVC et lie le nouveau PVC à un PV approprié. S'il n'existe pas de PV approprié, un provisionneur de la classe de stockage en crée un.

La taille de tous les PV peut dépasser la taille de votre PVC. Cela est particulièrement vrai pour les PV provisionnés manuellement. Pour minimiser l'excès, OpenShift Container Platform se lie au plus petit PV qui correspond à tous les autres critères.

Les demandes restent indéfiniment non liées si un volume correspondant n'existe pas ou ne peut pas être créé avec un provisionneur disponible desservant une classe de stockage. Les demandes sont liées au fur et à mesure que des volumes correspondants sont disponibles. Par exemple, un cluster avec de nombreux volumes de 50Gi provisionnés manuellement ne correspondrait pas à un PVC demandant 100Gi. Le PVC peut être lié lorsqu'un PV de 100Gi est ajouté au cluster.

3.2.3. Utiliser des cosses et des PV revendiquées

Les modules utilisent les revendications comme des volumes. Le cluster inspecte la revendication pour trouver le volume lié et monte ce volume pour un pod. Pour les volumes qui prennent en charge plusieurs modes d'accès, vous devez spécifier le mode qui s'applique lorsque vous utilisez la revendication comme volume dans un module.

Une fois que vous avez une revendication et que cette revendication est liée, le PV lié vous appartient aussi longtemps que vous en avez besoin. Vous pouvez planifier des pods et accéder aux PV revendiqués en incluant persistentVolumeClaim dans le bloc de volumes du pod.

Note

Si vous attachez des volumes persistants qui ont un nombre élevé de fichiers à des pods, ces pods peuvent échouer ou prendre beaucoup de temps à démarrer. Pour plus d'informations, voir Lors de l'utilisation de volumes persistants avec un nombre élevé de fichiers dans OpenShift, pourquoi les pods ne démarrent-ils pas ou prennent-ils un temps excessif pour atteindre l'état "Ready" ?

3.2.4. Protection des objets de stockage en cours d'utilisation

La fonction de protection des objets de stockage en cours d'utilisation garantit que les PVC utilisés activement par un pod et les PV liés aux PVC ne sont pas supprimés du système, ce qui pourrait entraîner une perte de données.

La protection des objets de stockage en cours d'utilisation est activée par défaut.

Note

Un PVC est utilisé activement par un pod lorsqu'il existe un objet Pod qui utilise le PVC.

Si un utilisateur supprime un PVC qui est utilisé activement par un pod, le PVC n'est pas supprimé immédiatement. La suppression du PVC est reportée jusqu'à ce que le PVC ne soit plus utilisé activement par aucun pod. De même, si un administrateur de cluster supprime un PV lié à un PVC, le PV n'est pas supprimé immédiatement. La suppression de la PV est reportée jusqu'à ce que la PV ne soit plus liée à un PVC.

3.2.5. Libération d'un volume persistant

Lorsque vous avez terminé avec un volume, vous pouvez supprimer l'objet PVC de l'API, ce qui permet la récupération de la ressource. Le volume est considéré comme libéré lorsque la demande est supprimée, mais il n'est pas encore disponible pour une autre demande. Les données du demandeur précédent restent sur le volume et doivent être traitées conformément à la politique.

3.2.6. Politique de récupération des volumes persistants

La politique de récupération d'un volume persistant indique au cluster ce qu'il doit faire du volume après sa libération. La politique de récupération d'un volume peut être Retain, Recycle, ou Delete.

  • Retain permet la récupération manuelle de la ressource pour les plugins de volume qui la prennent en charge.
  • Recycle recycle le volume dans le pool de volumes persistants non liés une fois qu'il est libéré de sa réclamation.
Important

La politique de récupération de Recycle est obsolète dans OpenShift Container Platform 4. Le provisionnement dynamique est recommandé pour une fonctionnalité équivalente et meilleure.

  • Delete reclaim policy supprime à la fois l'objet PersistentVolume d'OpenShift Container Platform et la ressource de stockage associée dans l'infrastructure externe, comme AWS EBS ou VMware vSphere.
Note

Les volumes approvisionnés dynamiquement sont toujours supprimés.

3.2.7. Récupération manuelle d'un volume persistant

Lorsqu'une demande de volume persistant (PVC) est supprimée, le volume persistant (PV) existe toujours et est considéré comme "libéré". Cependant, le PV n'est pas encore disponible pour une autre demande, car les données du demandeur précédent restent sur le volume.

Procédure

Pour récupérer manuellement le PV en tant qu'administrateur de cluster :

  1. Supprimer le PV.

    oc delete pv <pv-name> $ oc delete pv <pv-name>

    La ressource de stockage associée dans l'infrastructure externe, telle qu'un volume AWS EBS, GCE PD, Azure Disk ou Cinder, existe toujours après la suppression du PV.

  2. Nettoyer les données sur le support de stockage associé.
  3. Supprimer le bien de stockage associé. Pour réutiliser le même bien de stockage, il est possible de créer un nouveau PV avec la définition du bien de stockage.

Le PV récupéré est maintenant disponible pour être utilisé par un autre PVC.

3.2.8. Modification de la politique de récupération d'un volume persistant

Pour modifier la politique de récupération d'un volume persistant :

  1. Dressez la liste des volumes persistants de votre cluster :

    $ oc get pv

    Exemple de sortie

    NAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM             STORAGECLASS     REASON    AGE
     pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Delete          Bound     default/claim1    manual                     10s
     pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Delete          Bound     default/claim2    manual                     6s
     pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Delete          Bound     default/claim3    manual                     3s

  2. Choisissez l'un de vos volumes persistants et modifiez sa politique de récupération :

    $ oc patch pv <nom-de-votre-pv> -p '{"spec":{"persistentVolumeReclaimPolicy":\N-"Retain"}''
  3. Vérifiez que le volume persistant que vous avez choisi a la bonne politique :

    $ oc get pv

    Exemple de sortie

    NAME                                       CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM             STORAGECLASS     REASON    AGE
     pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Delete          Bound     default/claim1    manual                     10s
     pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Delete          Bound     default/claim2    manual                     6s
     pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94   4Gi        RWO           Retain          Bound     default/claim3    manual                     3s

    Dans la sortie précédente, le volume lié à la revendication default/claim3 a maintenant une politique de récupération Retain. Le volume ne sera pas automatiquement supprimé lorsqu'un utilisateur supprimera la revendication default/claim3.

3.3. Volumes persistants

Chaque PV contient un spec et un status, qui sont les spécifications et l'état du volume, par exemple :

PersistentVolume exemple de définition d'objet

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001 1
spec:
  capacity:
    storage: 5Gi 2
  accessModes:
    - ReadWriteOnce 3
  persistentVolumeReclaimPolicy: Retain 4
  ...
status:
  ...

1
Nom du volume persistant.
2
La quantité de stockage disponible pour le volume.
3
Le mode d'accès, qui définit les autorisations de lecture-écriture et de montage.
4
La politique de récupération, qui indique comment la ressource doit être gérée une fois qu'elle a été libérée.

3.3.1. Types de PV

OpenShift Container Platform prend en charge les plugins de volumes persistants suivants :

  • Disque AliCloud
  • AWS Elastic Block Store (EBS)
  • AWS Elastic File Store (EFS)
  • Disque Azure
  • Fichier Azure
  • Cendres
  • Fibre Channel
  • Disque persistant GCP
  • Dépôt de fichiers GCP
  • IBM VPC Block
  • Chemin d'accès
  • iSCSI
  • Volume local
  • NFS
  • OpenStack Manille
  • Red Hat OpenShift Data Foundation
  • VMware vSphere

3.3.2. Capacité

En général, un volume persistant (PV) a une capacité de stockage spécifique. Celle-ci est définie à l'aide de l'attribut capacity du PV.

Actuellement, la capacité de stockage est la seule ressource qui peut être définie ou demandée. À l'avenir, les attributs pourront inclure l'IOPS, le débit, etc.

3.3.3. Modes d'accès

Un volume persistant peut être monté sur un hôte de n'importe quelle manière prise en charge par le fournisseur de ressources. Les fournisseurs ont des capacités différentes et les modes d'accès de chaque PV sont définis en fonction des modes spécifiques pris en charge par ce volume particulier. Par exemple, NFS peut prendre en charge plusieurs clients en lecture-écriture, mais un PV NFS spécifique peut être exporté sur le serveur en lecture seule. Chaque PV dispose de son propre ensemble de modes d'accès décrivant ses capacités spécifiques.

Les demandes sont associées à des volumes dont les modes d'accès sont similaires. Les deux seuls critères de correspondance sont les modes d'accès et la taille. Les modes d'accès d'une demande représentent une requête. Par conséquent, il se peut que l'on vous accorde plus, mais jamais moins. Par exemple, si une requête demande RWO, mais que le seul volume disponible est un PV NFS (RWO ROX RWX), la requête correspondra alors à NFS parce qu'il prend en charge RWO.

Les correspondances directes sont toujours tentées en premier. Les modes du volume doivent correspondre ou contenir plus de modes que ce que vous avez demandé. La taille doit être supérieure ou égale à celle attendue. Si deux types de volumes, tels que NFS et iSCSI, disposent du même ensemble de modes d'accès, l'un ou l'autre peut correspondre à une demande avec ces modes. Il n'y a pas d'ordre entre les types de volumes et il n'y a aucun moyen de choisir un type plutôt qu'un autre.

Tous les volumes présentant les mêmes modes sont regroupés, puis triés par taille, du plus petit au plus grand. Le relieur récupère le groupe dont les modes correspondent et itère sur chacun d'entre eux, par ordre de taille, jusqu'à ce qu'une taille corresponde.

Le tableau suivant énumère les modes d'accès :

Tableau 3.1. Modes d'accès

Mode d'accèsAbréviation CLIDescription

ReadWriteOnce

RWO

Le volume peut être monté en lecture-écriture par un seul nœud.

ReadOnlyMany

ROX

Le volume peut être monté en lecture seule par de nombreux nœuds.

Lecture/écriture/nombre

RWX

Le volume peut être monté en lecture-écriture par de nombreux nœuds.

Important

Les modes d'accès aux volumes sont des descripteurs des capacités des volumes. Il ne s'agit pas de contraintes imposées. Le fournisseur de stockage est responsable des erreurs d'exécution résultant d'une utilisation non valide de la ressource.

Par exemple, NFS propose le mode d'accès ReadWriteOnce. Vous devez marquer les revendications comme read-only si vous voulez utiliser la capacité ROX du volume. Les erreurs dans le fournisseur apparaissent au moment de l'exécution comme des erreurs de montage.

les volumes iSCSI et Fibre Channel ne disposent actuellement d'aucun mécanisme de clôture. Vous devez vous assurer que les volumes ne sont utilisés que par un seul nœud à la fois. Dans certaines situations, comme la vidange d'un nœud, les volumes peuvent être utilisés simultanément par deux nœuds. Avant de vider le nœud, assurez-vous d'abord que les pods qui utilisent ces volumes sont supprimés.

Tableau 3.2. Modes d'accès pris en charge pour les PV

Plugin de volumeReadWriteOnce [1]ReadOnlyManyLecture/écriture/nombre

Disque AliCloud

 ✅

 -

  -

AWS EBS [2]

 ✅

 -

  -

AWS EFS

 ✅

 ✅

 ✅

Fichier Azure

 ✅

 ✅

 ✅

Disque Azure

 ✅

 -

 -

Cendres

 ✅

 -

  -

Fibre Channel

 ✅

 ✅

  -

Disque persistant GCP

 ✅

 -

  -

Dépôt de fichiers GCP

 ✅

 ✅

 ✅

Chemin d'accès

 ✅

 -

  -

Disque IBM VPC

 ✅

 -

  -

iSCSI

 ✅

 ✅

  -

Volume local

 ✅

 -

  -

NFS

 ✅

 ✅

 ✅

OpenStack Manille

 -

 -

 ✅

Red Hat OpenShift Data Foundation

 ✅

 -

 ✅

VMware vSphere

 ✅

 -

 ✅ [3]

  1. Les volumes ReadWriteOnce (RWO) ne peuvent pas être montés sur plusieurs nœuds. Si un nœud tombe en panne, le système n'autorise pas le montage du volume RWO attaché sur un nouveau nœud, car il est déjà affecté au nœud en panne. Si vous obtenez un message d'erreur d'attachement multiple, forcez la suppression du pod sur un nœud arrêté ou en panne afin d'éviter toute perte de données dans les charges de travail critiques, par exemple lorsque des volumes dynamiques persistants sont attachés.
  2. Utilisez une stratégie de déploiement par recréation pour les pods qui dépendent d'AWS EBS.
  3. Si l'environnement vSphere sous-jacent prend en charge le service de fichiers vSAN, l'opérateur vSphere Container Storage Interface (CSI) Driver Operator installé par OpenShift Container Platform prend en charge le provisionnement des volumes ReadWriteMany (RWX). Si le service de fichiers vSAN n'est pas configuré et que vous demandez RWX, le volume n'est pas créé et une erreur est consignée. Pour plus d'informations, voir "Using Container Storage Interface" → "VMware vSphere CSI Driver Operator".

3.3.4. Phase

Les volumes peuvent être trouvés dans l'une des phases suivantes :

Tableau 3.3. Phases du volume

PhaseDescription

Disponible

Une ressource libre qui n'est pas encore liée à une demande.

Liaison

Le volume est relié à une réclamation.

Libéré

La demande a été supprimée, mais la ressource n'a pas encore été récupérée par le cluster.

Échec

La récupération automatique du volume a échoué.

Vous pouvez afficher le nom du PVC lié à la PV en exécutant la commande suivante

$ oc get pv <pv-claim>

3.3.4.1. Options de montage

Vous pouvez spécifier des options de montage lors du montage d'un PV en utilisant l'attribut mountOptions.

Par exemple :

Exemple d'options de montage

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  mountOptions: 1
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    name: claim1
    namespace: default

1
Les options de montage spécifiées sont utilisées lors du montage du PV sur le disque.

Les types de PV suivants prennent en charge les options de montage :

  • AWS Elastic Block Store (EBS)
  • Disque Azure
  • Fichier Azure
  • Cendres
  • Disque persistant de la CME
  • iSCSI
  • Volume local
  • NFS
  • Red Hat OpenShift Data Foundation (Ceph RBD uniquement)
  • VMware vSphere
Note

Les PV Fibre Channel et HostPath ne prennent pas en charge les options de montage.

3.4. Demandes de volume persistantes

Chaque objet PersistentVolumeClaim contient un spec et un status, qui correspondent à la spécification et à l'état de la revendication de volume persistant (PVC), par exemple :

PersistentVolumeClaim exemple de définition d'objet

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim 1
spec:
  accessModes:
    - ReadWriteOnce 2
  resources:
    requests:
      storage: 8Gi 3
  storageClassName: gold 4
status:
  ...

1
Nom du PVC
2
Le mode d'accès, qui définit les autorisations de lecture-écriture et de montage
3
La quantité de stockage disponible pour le PVC
4
Nom du site StorageClass requis par la demande d'indemnisation

3.4.1. Classes de stockage

Les revendications peuvent éventuellement demander une classe de stockage spécifique en spécifiant le nom de la classe de stockage dans l'attribut storageClassName. Seuls les PV de la classe demandée, ceux qui ont le même storageClassName que le PVC, peuvent être liés au PVC. L'administrateur de cluster peut configurer des provisionneurs dynamiques pour desservir une ou plusieurs classes de stockage. L'administrateur de cluster peut créer un PV à la demande qui correspond aux spécifications du PVC.

Important

L'opérateur de stockage en cluster peut installer une classe de stockage par défaut en fonction de la plate-forme utilisée. Cette classe de stockage est détenue et contrôlée par l'opérateur. Elle ne peut pas être supprimée ou modifiée au-delà de la définition des annotations et des étiquettes. Si vous souhaitez un comportement différent, vous devez définir une classe de stockage personnalisée.

L'administrateur du cluster peut également définir une classe de stockage par défaut pour tous les PVC. Lorsqu'une classe de stockage par défaut est configurée, le PVC doit demander explicitement des annotations StorageClass ou storageClassName définies sur "" pour être lié à un PV sans classe de stockage.

Note

Si plusieurs classes de stockage sont marquées comme étant par défaut, un PVC ne peut être créé que si l'adresse storageClassName est explicitement spécifiée. Par conséquent, une seule classe de stockage doit être définie par défaut.

3.4.2. Modes d'accès

Les revendications utilisent les mêmes conventions que les volumes pour demander un stockage avec des modes d'accès spécifiques.

3.4.3. Ressources

Les demandes, telles que les pods, peuvent demander des quantités spécifiques d'une ressource. Dans ce cas, il s'agit d'une demande de stockage. Le même modèle de ressource s'applique aux volumes et aux demandes.

3.4.4. Réclamations en volume

Les pods accèdent au stockage en utilisant la revendication comme un volume. Les revendications doivent exister dans le même espace de noms que le module qui les utilise. Le cluster trouve la revendication dans l'espace de noms du module et l'utilise pour obtenir le site PersistentVolume qui soutient la revendication. Le volume est monté sur l'hôte et dans le module, par exemple :

Monter le volume sur l'hôte et dans le pod exemple

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: dockerfile/nginx
      volumeMounts:
      - mountPath: "/var/www/html" 1
        name: mypd 2
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim 3

1
Chemin d'accès pour monter le volume à l'intérieur du module.
2
Nom du volume à monter. Ne montez pas sur la racine du conteneur, /, ni 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 l'hôte /dev/pts files. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.
3
Nom du PVC, qui existe dans le même espace de noms, à utiliser.

3.5. Prise en charge des volumes de blocs

OpenShift Container Platform peut provisionner statiquement des volumes de blocs bruts. Ces volumes n'ont pas de système de fichiers et peuvent offrir des avantages en termes de performances pour les applications qui écrivent directement sur le disque ou qui mettent en œuvre leur propre service de stockage.

Les volumes de blocs bruts sont provisionnés en spécifiant volumeMode: Block dans les spécifications PV et PVC.

Important

Les pods utilisant des volumes de blocs bruts doivent être configurés pour autoriser les conteneurs privilégiés.

Le tableau suivant indique quels plugins de volume prennent en charge les volumes de blocs.

Tableau 3.4. Prise en charge des volumes de blocs

Plugin de volumeApprovisionnement manuelApprovisionnement dynamiqueEntièrement pris en charge

Disque AliCloud

AWS EBS

AWS EFS

   

Disque Azure

Fichier Azure

   

Cendres

Fibre Channel

 

PCG

Chemin d'accès

   

Disque IBM VPC

iSCSI

 

Volume local

 

NFS

   

Red Hat OpenShift Data Foundation

VMware vSphere

Important

L'utilisation de l'un des volumes de blocs qui peuvent être provisionnés manuellement, mais qui ne sont pas fournis comme étant entièrement pris en charge, est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

3.5.1. Exemples de volumes de blocs

Exemple de PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: block-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  volumeMode: Block 1
  persistentVolumeReclaimPolicy: Retain
  fc:
    targetWWNs: ["50060e801049cfd1"]
    lun: 0
    readOnly: false

1
volumeMode doit être fixé à Block pour indiquer que ce PV est un volume de blocs bruts.

Exemple de PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block 1
  resources:
    requests:
      storage: 10Gi

1
volumeMode doit être fixé à Block pour indiquer qu'un PVC de bloc brut est demandé.

Pod exemple de spécification

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-block-volume
spec:
  containers:
    - name: fc-container
      image: fedora:26
      command: ["/bin/sh", "-c"]
      args: [ "tail -f /dev/null" ]
      volumeDevices:  1
        - name: data
          devicePath: /dev/xvda 2
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: block-pvc 3

1
volumeDevicesau lieu de volumeMounts, est utilisé pour les périphériques en bloc. Seules les sources PersistentVolumeClaim peuvent être utilisées avec des volumes de blocs bruts.
2
devicePathau lieu de mountPath, représente le chemin vers le dispositif physique où le bloc brut est mappé dans le système.
3
La source du volume doit être de type persistentVolumeClaim et doit correspondre au nom du PVC comme prévu.

Tableau 3.5. Valeurs acceptées pour volumeMode

ValeurDéfaut

Système de fichiers

Oui

Bloc

Non

Tableau 3.6. Scénarios de liaison pour les volumes de blocs

PV volumeModePVC volumeModeRésultat de la liaison

Système de fichiers

Système de fichiers

Relier

Non spécifié

Non spécifié

Relier

Système de fichiers

Non spécifié

Relier

Non spécifié

Système de fichiers

Relier

Bloc

Bloc

Relier

Non spécifié

Bloc

Pas de lien

Bloc

Non spécifié

Pas de lien

Système de fichiers

Bloc

Pas de lien

Bloc

Système de fichiers

Pas de lien

Important

Les valeurs non spécifiées entraînent la valeur par défaut de Filesystem.

3.6. Utilisation de fsGroup pour réduire les délais d'attente des pods

Si un volume de stockage contient de nombreux fichiers (~1.000.000 ou plus), vous pouvez rencontrer des dépassements de temps de pod.

Cela peut se produire car, par défaut, OpenShift Container Platform modifie récursivement la propriété et les permissions pour le contenu de chaque volume afin qu'il corresponde à l'adresse fsGroup spécifiée dans l'adresse securityContext d'un pod lorsque ce volume est monté. Pour les gros volumes, la vérification et la modification de la propriété et des autorisations peuvent prendre du temps, ce qui ralentit le démarrage du pod. Vous pouvez utiliser le champ fsGroupChangePolicy à l'intérieur d'un securityContext pour contrôler la façon dont OpenShift Container Platform vérifie et gère la propriété et les permissions pour un volume.

fsGroupChangePolicy définit le comportement à adopter pour modifier la propriété et les autorisations du volume avant de l'exposer à l'intérieur d'un module. Ce champ ne s'applique qu'aux types de volumes qui prennent en charge la propriété et les autorisations contrôlées par fsGroup. Ce champ a deux valeurs possibles :

  • OnRootMismatch: Ne modifiez les autorisations et la propriété que si les autorisations et la propriété du répertoire racine ne correspondent pas aux autorisations prévues pour le volume. Cela peut permettre de raccourcir le temps nécessaire pour modifier la propriété et les autorisations d'un volume afin de réduire les délais d'attente des pods.
  • Always: Toujours modifier l'autorisation et la propriété du volume lorsqu'un volume est monté.

fsGroupChangePolicy exemple

securityContext:
  runAsUser: 1000
  runAsGroup: 3000
  fsGroup: 2000
  fsGroupChangePolicy: "OnRootMismatch" 1
  ...

1
OnRootMismatch spécifie qu'il faut ignorer le changement récursif de permission, ce qui permet d'éviter les problèmes de dépassement de délai pour les pods.
Note

Le champ fsGroupChangePolicy n'a aucun effet sur les types de volumes éphémères, tels que secret, configMap et emptydir.

Chapitre 4. Configuration du stockage persistant

4.1. Stockage persistant à l'aide d'AWS Elastic Block Store

OpenShift Container Platform prend en charge les volumes AWS Elastic Block Store (EBS). Vous pouvez approvisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant Amazon EC2.

Le cadre de volume persistant Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente. Vous pouvez provisionner dynamiquement des volumes AWS EBS. Les volumes persistants ne sont pas liés à un seul projet ou espace de noms ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs. Vous pouvez définir une clé KMS pour chiffrer les volumes persistants des conteneurs sur AWS.

Important

OpenShift Container Platform utilise par défaut un plug-in in-tree, ou non-Container Storage Interface (CSI) pour provisionner le stockage AWS EBS. Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plug-ins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent.

La migration automatique de l'ICS doit être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Pour OpenShift Container Platform, la migration automatique d'AWS EBS in-tree vers le pilote Container Storage Interface (CSI) est disponible en tant que fonctionnalité d'aperçu technologique (TP). Lorsque la migration est activée, les volumes provisionnés à l'aide du pilote in-tree existant sont automatiquement migrés pour utiliser le pilote AWS EBS CSI. Pour plus d'informations, voir la fonctionnalité de migration automatique CSI.

4.1.1. Création de la classe de stockage EBS

Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, les utilisateurs peuvent obtenir des volumes persistants provisionnés dynamiquement.

4.1.2. Création de la revendication de volume persistant

Conditions préalables

Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
  2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
  3. Définissez les options souhaitées sur la page qui s'affiche.

    1. Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
    2. Saisissez un nom unique pour la créance de stockage.
    3. Sélectionner le mode d'accès. Cette sélection détermine l'accès à la lecture et à l'écriture pour l'unité de stockage.
    4. Définir la taille de la demande de stockage.
  4. Cliquez sur Create pour créer la demande de volume persistant et générer un volume persistant.

4.1.3. Format du volume

Avant que OpenShift Container Platform ne monte le volume et ne le transmette à un conteneur, il vérifie que le volume contient un système de fichiers tel que spécifié par le paramètre fsType dans la définition du volume persistant. Si le périphérique n'est pas formaté avec le système de fichiers, toutes les données du périphérique sont effacées et le périphérique est automatiquement formaté avec le système de fichiers donné.

Cette vérification permet d'utiliser des volumes AWS non formatés en tant que volumes persistants, car OpenShift Container Platform les formate avant la première utilisation.

4.1.4. Nombre maximal de volumes EBS sur un nœud

Par défaut, OpenShift Container Platform prend en charge un maximum de 39 volumes EBS attachés à un nœud. Cette limite est cohérente avec les limites de volume AWS. La limite de volume dépend du type d'instance.

Important

En tant qu'administrateur de cluster, vous devez utiliser soit des volumes in-tree, soit des volumes Container Storage Interface (CSI) et leurs classes de stockage respectives, mais jamais les deux types de volumes en même temps. Le nombre maximum de volumes EBS attachés est compté séparément pour les volumes in-tree et CSI, ce qui signifie que vous pouvez avoir jusqu'à 39 volumes EBS de chaque type.

Pour plus d'informations sur l'accès à des options de stockage supplémentaires, telles que les instantanés de volume, qui ne sont pas possibles avec les plug-ins de volume dans l'arborescence, voir AWS Elastic Block Store CSI Driver Operator.

4.1.5. Chiffrer les volumes persistants des conteneurs sur AWS avec une clé KMS

La définition d'une clé KMS pour chiffrer les volumes persistants des conteneurs sur AWS est utile lorsque vous disposez de directives explicites en matière de conformité et de sécurité lors du déploiement sur AWS.

Conditions préalables

  • L'infrastructure sous-jacente doit contenir un espace de stockage.
  • Vous devez créer une clé KMS client sur AWS.

Procédure

  1. Créer une classe de stockage :

    $ cat << EOF | oc create -f -
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class-name> 1
    parameters:
      fsType: ext4 2
      encrypted: "true"
      kmsKeyId: keyvalue 3
    provisioner: ebs.csi.aws.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    EOF
    1
    Spécifie le nom de la classe de stockage.
    2
    Système de fichiers créé sur des volumes provisionnés.
    3
    Spécifie le nom complet de la ressource Amazon (ARN) de la clé à utiliser pour chiffrer le volume persistant du conteneur. Si vous ne fournissez pas de clé, mais que le champ encrypted est défini sur true, la clé KMS par défaut est utilisée. Voir Finding the key ID and key ARN on A WS dans la documentation AWS.
  2. Créez une revendication de volume persistant (PVC) avec la classe de stockage spécifiant la clé KMS :

    $ cat << EOF | oc create -f -
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      storageClassName: <storage-class-name>
      resources:
        requests:
          storage: 1Gi
    EOF
  3. Créer des conteneurs de charge de travail pour utiliser le PVC :

    $ cat << EOF | oc create -f -
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: httpd
          image: quay.io/centos7/httpd-24-centos7
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /mnt/storage
              name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: mypvc
    EOF

4.1.6. Ressources supplémentaires

  • Voir AWS Elastic Block Store CSI Driver Operator pour plus d'informations sur l'accès à des options de stockage supplémentaires, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

4.2. Stockage persistant avec Azure

OpenShift Container Platform prend en charge les volumes de disques Microsoft Azure. Vous pouvez approvisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant Azure. Une certaine familiarité avec Kubernetes et Azure est supposée. Le cadre de volume persistant de Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente. Les volumes Azure Disk peuvent être approvisionnés de manière dynamique. Les volumes persistants ne sont pas liés à un seul projet ou à un seul espace de noms ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage Azure Disk.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Ressources supplémentaires

4.2.1. Création de la classe de stockage Azure

Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, les utilisateurs peuvent obtenir des volumes persistants provisionnés dynamiquement.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StorageStorage Classes.
  2. Dans l'aperçu de la classe de stockage, cliquez sur Create Storage Class.
  3. Définissez les options souhaitées sur la page qui s'affiche.

    1. Entrez un nom pour référencer la classe de stockage.
    2. Saisissez une description facultative.
    3. Sélectionnez la politique de récupération.
    4. Sélectionnez kubernetes.io/azure-disk dans la liste déroulante.

      1. Saisissez le type de compte de stockage. Cela correspond au niveau SKU de votre compte de stockage Azure. Les options valides sont Premium_LRS, Standard_LRS, StandardSSD_LRS et UltraSSD_LRS.
      2. Saisissez le type de compte. Les options valables sont shared, dedicated, et managed.

        Important

        Red Hat ne prend en charge que l'utilisation de kind: Managed dans la classe de stockage.

        Avec Shared et Dedicated, Azure crée des disques non gérés, tandis qu'OpenShift Container Platform crée un disque géré pour les disques du système d'exploitation de la machine (racine). Mais comme Azure Disk ne permet pas l'utilisation de disques gérés et non gérés sur un nœud, les disques non gérés créés avec Shared ou Dedicated ne peuvent pas être attachés aux nœuds d'OpenShift Container Platform.

    5. Saisissez des paramètres supplémentaires pour la classe de stockage si vous le souhaitez.
  4. Cliquez sur Create pour créer la classe de stockage.

Ressources supplémentaires

4.2.2. Création de la revendication de volume persistant

Conditions préalables

Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
  2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
  3. Définissez les options souhaitées sur la page qui s'affiche.

    1. Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
    2. Saisissez un nom unique pour la créance de stockage.
    3. Sélectionner le mode d'accès. Cette sélection détermine l'accès à la lecture et à l'écriture pour l'unité de stockage.
    4. Définir la taille de la demande de stockage.
  4. Cliquez sur Create pour créer la demande de volume persistant et générer un volume persistant.

4.2.3. Format du volume

Avant que OpenShift Container Platform ne monte le volume et ne le transmette à un conteneur, il vérifie qu'il contient un système de fichiers tel que spécifié par le paramètre fsType dans la définition du volume persistant. Si le périphérique n'est pas formaté avec le système de fichiers, toutes les données du périphérique sont effacées et le périphérique est automatiquement formaté avec le système de fichiers donné.

Cela permet d'utiliser des volumes Azure non formatés comme volumes persistants, car OpenShift Container Platform les formate avant la première utilisation.

4.2.4. Ensembles de machines qui déploient des machines avec des ultra-disques utilisant des PVC

Vous pouvez créer un jeu de machines fonctionnant sur Azure qui déploie des machines avec des ultra-disques. Les disques ultra sont des systèmes de stockage haute performance destinés à être utilisés avec les charges de travail les plus exigeantes.

Le plugin in-tree et le pilote CSI prennent tous deux en charge l'utilisation des PVC pour activer les ultra-disques. Vous pouvez également déployer des machines avec des ultra-disques en tant que disques de données sans créer de PVC.

4.2.4.1. Création de machines avec ultra-disques à l'aide de jeux de machines

Vous pouvez déployer des machines avec des ultra-disques sur Azure en modifiant votre fichier YAML de configuration des machines.

Conditions préalables

  • Disposer d'un cluster Microsoft Azure existant.

Procédure

  1. Copiez une ressource personnalisée (CR) Azure MachineSet existante et modifiez-la en exécutant la commande suivante :

    oc edit machineset <machine-set-name> $ oc edit machineset <machine-set-name>

    <machine-set-name> est l'ensemble de machines que vous voulez provisionner avec des ultra-disques.

  2. Ajouter les lignes suivantes aux endroits indiqués :

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    spec:
      template:
        spec:
          metadata:
            labels:
              disk: ultrassd 1
          providerSpec:
            value:
              ultraSSDCapability: Enabled 2
    1
    Indiquez une étiquette à utiliser pour sélectionner un nœud créé par ce jeu de machines. Cette procédure utilise disk.ultrassd pour cette valeur.
    2
    Ces lignes permettent l'utilisation d'ultra-disques.
  3. Créez un jeu de machines à l'aide de la configuration mise à jour en exécutant la commande suivante :

    oc create -f <machine-set-name>.yaml
  4. Créez une classe de stockage contenant la définition YAML suivante :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ultra-disk-sc 1
    parameters:
      cachingMode: None
      diskIopsReadWrite: "2000" 2
      diskMbpsReadWrite: "320" 3
      kind: managed
      skuname: UltraSSD_LRS
    provisioner: disk.csi.azure.com 4
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer 5
    1
    Indiquez le nom de la classe de stockage. Cette procédure utilise ultra-disk-sc pour cette valeur.
    2
    Spécifiez le nombre d'IOPS pour la classe de stockage.
    3
    Spécifiez le débit en MBps pour la classe de stockage.
    4
    Pour Azure Kubernetes Service (AKS) version 1.21 ou ultérieure, utilisez disk.csi.azure.com. Pour les versions antérieures d'AKS, utilisez kubernetes.io/azure-disk.
    5
    Facultatif : Ce paramètre permet d'attendre la création du module qui utilisera le disque.
  5. Créez une revendication de volume persistant (PVC) pour référencer la classe de stockage ultra-disk-sc qui contient la définition YAML suivante :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk 1
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: ultra-disk-sc 2
      resources:
        requests:
          storage: 4Gi 3
    1
    Indiquez le nom du PVC. Cette procédure utilise ultra-disk pour cette valeur.
    2
    Ce PVC fait référence à la classe de stockage ultra-disk-sc.
    3
    Spécifiez la taille de la classe de stockage. La valeur minimale est 4Gi.
  6. Créez un pod qui contient la définition YAML suivante :

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-ultra
    spec:
      nodeSelector:
        disk: ultrassd 1
      containers:
      - name: nginx-ultra
        image: alpine:latest
        command:
          - "sleep"
          - "infinity"
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk 2
    1
    Indiquez l'étiquette du jeu de machines qui permet l'utilisation d'ultra-disques. Cette procédure utilise disk.ultrassd pour cette valeur.
    2
    Ce pod fait référence au PVC ultra-disk.

Vérification

  1. Validez la création des machines en exécutant la commande suivante :

    $ oc get machines

    Les machines doivent être dans l'état Running.

  2. Pour une machine en cours d'exécution et à laquelle un nœud est attaché, validez la partition en exécutant la commande suivante :

    $ oc debug node/<node-name> -- chroot /host lsblk

    Dans cette commande, oc debug node/<node-name> démarre un shell de débogage sur le nœud <node-name> et transmet une commande à --. La commande passée chroot /host permet d'accéder aux binaires du système d'exploitation hôte sous-jacent, et lsblk montre les périphériques de bloc attachés à la machine du système d'exploitation hôte.

Prochaines étapes

  • Pour utiliser un ultra disque à partir d'un pod, créez une charge de travail qui utilise le point de montage. Créez un fichier YAML similaire à l'exemple suivant :

    apiVersion: v1
    kind: Pod
    metadata:
      name: ssd-benchmark1
    spec:
      containers:
      - name: ssd-benchmark1
        image: nginx
        ports:
          - containerPort: 80
            name: "http-server"
        volumeMounts:
        - name: lun0p1
          mountPath: "/tmp"
      volumes:
        - name: lun0p1
          hostPath:
            path: /var/lib/lun0p1
            type: DirectoryOrCreate
      nodeSelector:
        disktype: ultrassd

4.2.4.2. Ressources de dépannage pour les ensembles de machines qui activent les ultra-disques

Utilisez les informations de cette section pour comprendre et résoudre les problèmes que vous pourriez rencontrer.

4.2.4.2.1. Impossible de monter une revendication de volume persistant soutenue par un ultra disque

En cas de problème lors du montage d'une revendication de volume persistant soutenue par un ultra disque, le pod reste bloqué à l'état ContainerCreating et une alerte est déclenchée.

Par exemple, si le paramètre additionalCapabilities.ultraSSDEnabled n'est pas défini sur la machine qui soutient le nœud qui héberge le module, le message d'erreur suivant apparaît :

StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
  • Pour résoudre ce problème, décrivez le pod en exécutant la commande suivante :

    oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>

4.3. Stockage persistant à l'aide d'Azure File

OpenShift Container Platform prend en charge les volumes de fichiers Microsoft Azure. Vous pouvez approvisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant Azure. Une certaine familiarité avec Kubernetes et Azure est supposée.

Le cadre de volume persistant Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente. Vous pouvez approvisionner les volumes Azure File de manière dynamique.

Les volumes persistants ne sont pas liés à un seul projet ou espace de noms, et vous pouvez les partager à travers le cluster OpenShift Container Platform. Les revendications de volumes persistants sont spécifiques à un projet ou à un espace de noms, et peuvent être demandées par les utilisateurs pour être utilisées dans des applications.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Important

Les volumes Azure File utilisent le bloc de messages du serveur.

Important

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Ressources supplémentaires

4.3.1. Créer la demande de volume persistant de partage de fichiers Azure

Pour créer la revendication de volume persistant, vous devez d'abord définir un objet Secret qui contient le compte et la clé Azure. Ce secret est utilisé dans la définition de PersistentVolume et sera référencé par la revendication de volume persistant pour être utilisé dans les applications.

Conditions préalables

  • Un partage de fichiers Azure existe.
  • Les informations d'identification permettant d'accéder à ce partage, en particulier le compte de stockage et la clé, sont disponibles.

Procédure

  1. Créez un objet Secret qui contient les informations d'identification d'Azure File :

    $ oc create secret generic <secret-name> --from-literal=azurestorageaccountname=<storage-account> \ 1
      --from-literal=azurestorageaccountkey=<storage-account-key> 2
    1
    Le nom du compte de stockage Azure File.
    2
    La clé du compte de stockage de fichiers Azure.
  2. Créez un objet PersistentVolume qui fait référence à l'objet Secret que vous avez créé :

    apiVersion: "v1"
    kind: "PersistentVolume"
    metadata:
      name: "pv0001" 1
    spec:
      capacity:
        storage: "5Gi" 2
      accessModes:
        - "ReadWriteOnce"
      storageClassName: azure-file-sc
      azureFile:
        secretName: <secret-name> 3
        shareName: share-1 4
        readOnly: false
    1
    Le nom du volume persistant.
    2
    La taille de ce volume persistant.
    3
    Le nom du secret qui contient les informations d'identification du partage de fichiers Azure.
    4
    Le nom du partage de fichiers Azure.
  3. Créez un objet PersistentVolumeClaim qui correspond au volume persistant que vous avez créé :

    apiVersion: "v1"
    kind: "PersistentVolumeClaim"
    metadata:
      name: "claim1" 1
    spec:
      accessModes:
        - "ReadWriteOnce"
      resources:
        requests:
          storage: "5Gi" 2
      storageClassName: azure-file-sc 3
      volumeName: "pv0001" 4
    1
    Le nom de la demande de volume persistant.
    2
    La taille de cette demande de volume persistant.
    3
    Nom de la classe de stockage utilisée pour approvisionner le volume persistant. Spécifiez la classe de stockage utilisée dans la définition de PersistentVolume.
    4
    Le nom de l'objet PersistentVolume existant qui fait référence au partage de fichiers Azure.

4.3.2. Monter le partage de fichiers Azure dans un pod

Une fois que la demande de volume persistant a été créée, elle peut être utilisée à l'intérieur par une application. L'exemple suivant montre le montage de ce partage à l'intérieur d'un pod.

Conditions préalables

  • Il existe une revendication de volume persistant qui est mappée au partage de fichiers Azure sous-jacent.

Procédure

  • Créer un pod qui monte la revendication de volume persistant existante :

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name 1
    spec:
      containers:
        ...
        volumeMounts:
        - mountPath: "/data" 2
          name: azure-file-share
      volumes:
        - name: azure-file-share
          persistentVolumeClaim:
            claimName: claim1 3
    1
    Le nom du pod.
    2
    Le chemin pour monter le partage de fichiers Azure à l'intérieur du module. Ne montez pas à la racine du conteneur, /, ou tout autre 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 l'hôte /dev/pts files. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.
    3
    Le nom de l'objet PersistentVolumeClaim qui a été créé précédemment.

4.4. Stockage persistant à l'aide de Cinder

OpenShift Container Platform prend en charge OpenStack Cinder. Une certaine familiarité avec Kubernetes et OpenStack est supposée.

Les volumes Cinder peuvent être provisionnés dynamiquement. Les volumes persistants ne sont pas liés à un projet ou à un espace de noms unique ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage Cinder.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Ressources supplémentaires

  • Pour plus d'informations sur la façon dont OpenStack Block Storage assure la gestion du stockage en bloc persistant pour les disques durs virtuels, voir OpenStack Cinder.

4.4.1. Approvisionnement manuel avec Cinder

Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Conditions préalables

  • OpenShift Container Platform configuré pour Red Hat OpenStack Platform (RHOSP)
  • Volume de cendres ID

4.4.1.1. Création du volume persistant

Vous devez définir votre volume persistant (PV) dans une définition d'objet avant de le créer dans OpenShift Container Platform :

Procédure

  1. Enregistrez votre définition d'objet dans un fichier.

    cinder-persistentvolume.yaml

    apiVersion: "v1"
    kind: "PersistentVolume"
    metadata:
      name: "pv0001" 1
    spec:
      capacity:
        storage: "5Gi" 2
      accessModes:
        - "ReadWriteOnce"
      cinder: 3
        fsType: "ext3" 4
        volumeID: "f37a03aa-6212-4c62-a805-9ce139fab180" 5

    1
    Le nom du volume utilisé par les réclamations de volumes persistants ou les pods.
    2
    La quantité de stockage allouée à ce volume.
    3
    Indique cinder pour les volumes Cinder de Red Hat OpenStack Platform (RHOSP).
    4
    Le système de fichiers qui est créé lorsque le volume est monté pour la première fois.
    5
    Le volume Cinder à utiliser.
    Important

    Ne modifiez pas la valeur du paramètre fstype après le formatage et l'approvisionnement du volume. La modification de cette valeur peut entraîner une perte de données et une défaillance du pod.

  2. Créez le fichier de définition d'objet que vous avez enregistré à l'étape précédente.

    $ oc create -f cinder-persistentvolume.yaml

4.4.1.2. Formatage de volumes persistants

Vous pouvez utiliser des volumes Cinder non formatés comme PV car OpenShift Container Platform les formate avant la première utilisation.

Avant qu'OpenShift Container Platform ne monte le volume et ne le transmette à un conteneur, le système vérifie qu'il contient un système de fichiers tel que spécifié par le paramètre fsType dans la définition du PV. Si le périphérique n'est pas formaté avec le système de fichiers, toutes les données du périphérique sont effacées et le périphérique est automatiquement formaté avec le système de fichiers donné.

4.4.1.3. Sécurité des volumes Cinder

Si vous utilisez des PV Cinder dans votre application, configurez la sécurité pour leurs configurations de déploiement.

Conditions préalables

  • Il faut créer un CCN qui utilise la stratégie fsGroup appropriée.

Procédure

  1. Créez un compte de service et ajoutez-le au SCC :

    oc create serviceaccount <service_account> $ oc create serviceaccount <service_account>
    $ oc adm policy add-scc-to-user <new_scc> -z <service_account> -n <project>
  2. Dans la configuration du déploiement de votre application, indiquez le nom du compte de service et securityContext:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: frontend-1
    spec:
      replicas: 1  1
      selector:    2
        name: frontend
      template:    3
        metadata:
          labels:  4
            name: frontend 5
        spec:
          containers:
          - image: openshift/hello-openshift
            name: helloworld
            ports:
            - containerPort: 8080
              protocol: TCP
          restartPolicy: Always
          serviceAccountName: <service_account> 6
          securityContext:
            fsGroup: 7777 7
    1
    Le nombre de copies du module à exécuter.
    2
    Le sélecteur d'étiquettes du module à exécuter.
    3
    Un modèle pour le module que le contrôleur crée.
    4
    Les étiquettes sur le pod. Elles doivent inclure les étiquettes du sélecteur d'étiquettes.
    5
    La longueur maximale du nom après expansion des paramètres est de 63 caractères.
    6
    Spécifie le compte de service que vous avez créé.
    7
    Spécifie une adresse fsGroup pour les pods.

4.5. Stockage persistant à l'aide de Fibre Channel

OpenShift Container Platform prend en charge Fibre Channel, ce qui vous permet de provisionner votre cluster OpenShift Container Platform avec un stockage persistant à l'aide de volumes Fibre Channel. Une certaine familiarité avec Kubernetes et Fibre Channel est supposée.

Important

Le stockage persistant utilisant Fibre Channel n'est pas pris en charge sur les infrastructures basées sur l'architecture ARM.

Le cadre de volume persistant Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente. Les volumes persistants ne sont pas liés à un seul projet ou espace de noms ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

4.5.1. Provisionnement

Pour provisionner des volumes Fibre Channel à l'aide de l'API PersistentVolume, les éléments suivants doivent être disponibles :

  • Le site targetWWNs (tableau des noms mondiaux des cibles Fibre Channel).
  • Un numéro de LUN valide.
  • Le type de système de fichiers.

Un volume persistant et un LUN ont une correspondance univoque entre eux.

Conditions préalables

  • Les LUN Fibre Channel doivent exister dans l'infrastructure sous-jacente.

PersistentVolume définition de l'objet

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  fc:
    wwids: [scsi-3600508b400105e210000900000490000] 1
    targetWWNs: ['500a0981891b8dc5', '500a0981991b8dc5'] 2
    lun: 2 3
    fsType: ext4

1
Identificateurs mondiaux (WWID). Soit FC wwids ou une combinaison de FC targetWWNs et lun doit être défini, mais pas les deux simultanément. L'identifiant WWID FC est recommandé par rapport à la cible WWN car il est garanti unique pour chaque périphérique de stockage et indépendant du chemin utilisé pour accéder au périphérique. L'identifiant WWID peut être obtenu en émettant une requête SCSI pour récupérer les données vitales d'identification du produit (page 0x83) ou le numéro de série de l'unité (page 0x80). Les WWID FC sont identifiés comme /dev/disk/by-id/ pour référencer les données sur le disque, même si le chemin d'accès au périphérique change et même si l'on accède au périphérique à partir de différents systèmes.
2 3
Les WWN Fibre Channel sont identifiés par /dev/disk/by-path/pci-<IDENTIFIER>-fc-0x<WWN>-lun-<LUN#>, mais il n'est pas nécessaire de fournir une partie du chemin menant à WWN, y compris 0x, et tout ce qui suit, y compris - (trait d'union).
Important

La modification de la valeur du paramètre fstype après le formatage et l'approvisionnement du volume peut entraîner une perte de données et une défaillance du pod.

4.5.1.1. Appliquer les quotas de disque

Utilisez les partitions LUN pour appliquer les quotas de disque et les contraintes de taille. Chaque LUN est mappé à un seul volume persistant, et des noms uniques doivent être utilisés pour les volumes persistants.

L'application de quotas de cette manière permet à l'utilisateur final de demander un stockage persistant d'une quantité spécifique, par exemple 10Gi, et d'obtenir un volume correspondant d'une capacité égale ou supérieure.

4.5.1.2. Sécurité des volumes Fibre Channel

Les utilisateurs demandent du stockage avec une demande de volume persistant. Cette demande n'existe que dans l'espace de noms de l'utilisateur et ne peut être référencée que par un module de ce même espace de noms. Toute tentative d'accès à un volume persistant à travers un espace de noms entraîne l'échec du pod.

Chaque LUN Fibre Channel doit être accessible par tous les nœuds du cluster.

4.6. Stockage persistant à l'aide de FlexVolume

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.

4.7. Stockage persistant à l'aide de GCE Persistent Disk

OpenShift Container Platform prend en charge les volumes de disques persistants GCE (gcePD). Vous pouvez provisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant GCE. Une certaine familiarité avec Kubernetes et GCE est supposée.

Le cadre de volume persistant de Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente.

Les volumes de disques persistants GCE peuvent être approvisionnés de manière dynamique.

Les volumes persistants ne sont pas liés à un projet ou à un espace de noms unique ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage gcePD.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plug-ins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique vers le CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Ressources supplémentaires

4.7.1. Création de la classe de stockage GCE

Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, les utilisateurs peuvent obtenir des volumes persistants provisionnés dynamiquement.

4.7.2. Création de la revendication de volume persistant

Conditions préalables

Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
  2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
  3. Définissez les options souhaitées sur la page qui s'affiche.

    1. Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
    2. Saisissez un nom unique pour la créance de stockage.
    3. Sélectionner le mode d'accès. Cette sélection détermine l'accès à la lecture et à l'écriture pour l'unité de stockage.
    4. Définir la taille de la demande de stockage.
  4. Cliquez sur Create pour créer la demande de volume persistant et générer un volume persistant.

4.7.3. Format du volume

Avant que OpenShift Container Platform ne monte le volume et ne le transmette à un conteneur, il vérifie que le volume contient un système de fichiers tel que spécifié par le paramètre fsType dans la définition du volume persistant. Si le périphérique n'est pas formaté avec le système de fichiers, toutes les données du périphérique sont effacées et le périphérique est automatiquement formaté avec le système de fichiers donné.

Cette vérification permet d'utiliser des volumes GCE non formatés comme volumes persistants, car OpenShift Container Platform les formate avant la première utilisation.

4.8. Stockage persistant à l'aide d'iSCSI

Vous pouvez provisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant iSCSI. Une certaine familiarité avec Kubernetes et iSCSI est supposée.

Le cadre de volume persistant de Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente.

Important

La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.

Important

Lorsque vous utilisez iSCSI sur Amazon Web Services, vous devez mettre à jour la stratégie de sécurité par défaut afin d'inclure le trafic TCP entre les nœuds sur les ports iSCSI. Par défaut, il s'agit des ports 860 et 3260.

Important

Les utilisateurs doivent s'assurer que l'initiateur iSCSI est déjà configuré sur tous les nœuds d'OpenShift Container Platform en installant le package iscsi-initiator-utils et en configurant leur nom d'initiateur dans /etc/iscsi/initiatorname.iscsi. Le paquet iscsi-initiator-utils est déjà installé sur les déploiements qui utilisent Red Hat Enterprise Linux CoreOS (RHCOS).

Pour plus d'informations, voir Gestion des périphériques de stockage.

4.8.1. Provisionnement

Vérifiez que le stockage existe dans l'infrastructure sous-jacente avant de le monter en tant que volume dans OpenShift Container Platform. Tout ce qui est nécessaire pour l'iSCSI est le portail cible iSCSI, un nom qualifié iSCSI (IQN) valide, un numéro LUN valide, le type de système de fichiers et l'API PersistentVolume.

PersistentVolume définition de l'objet

apiVersion: v1
kind: PersistentVolume
metadata:
  name: iscsi-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  iscsi:
     targetPortal: 10.16.154.81:3260
     iqn: iqn.2014-12.example.server:storage.target00
     lun: 0
     fsType: 'ext4'

4.8.2. Appliquer les quotas de disque

Utilisez les partitions LUN pour appliquer les quotas de disque et les contraintes de taille. Chaque LUN est un volume persistant. Kubernetes impose des noms uniques pour les volumes persistants.

L'application de quotas de cette manière permet à l'utilisateur final de demander un stockage persistant d'un montant spécifique (par exemple, 10Gi) et d'obtenir un volume correspondant d'une capacité égale ou supérieure.

4.8.3. sécurité des volumes iSCSI

Les utilisateurs demandent du stockage avec un objet PersistentVolumeClaim. Cette demande n'existe que dans l'espace de noms de l'utilisateur et ne peut être référencée que par un pod dans ce même espace de noms. Toute tentative d'accès à une demande de volume persistant à travers un espace de noms entraîne l'échec du module.

Chaque LUN iSCSI doit être accessible par tous les nœuds du cluster.

4.8.3.1. Configuration du protocole d'authentification Challenge Handshake (CHAP)

En option, OpenShift Container Platform peut utiliser CHAP pour s'authentifier auprès des cibles iSCSI :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: iscsi-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  iscsi:
    targetPortal: 10.0.0.1:3260
    iqn: iqn.2016-04.test.com:storage.target00
    lun: 0
    fsType: ext4
    chapAuthDiscovery: true 1
    chapAuthSession: true 2
    secretRef:
      name: chap-secret 3
1
Activer l'authentification CHAP de la découverte iSCSI.
2
Activer l'authentification CHAP de la session iSCSI.
3
Spécifier le nom de l'objet Secrets avec le nom d'utilisateur et le mot de passe. Cet objet Secret doit être disponible dans tous les espaces de noms qui peuvent utiliser le volume référencé.

4.8.4. iSCSI multipathing

Pour le stockage basé sur iSCSI, vous pouvez configurer plusieurs chemins en utilisant le même IQN pour plusieurs adresses IP de portail cible. Les chemins multiples garantissent l'accès au volume persistant en cas de défaillance d'un ou de plusieurs composants d'un chemin.

Pour spécifier des chemins multiples dans la spécification du pod, utilisez le champ portals. Par exemple :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: iscsi-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  iscsi:
    targetPortal: 10.0.0.1:3260
    portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260'] 1
    iqn: iqn.2016-04.test.com:storage.target00
    lun: 0
    fsType: ext4
    readOnly: false
1
Ajoutez des portails cibles supplémentaires en utilisant le champ portals.

4.8.5. initiateur personnalisé iSCSI IQN

Configurez le nom qualifié iSCSI (IQN) de l'initiateur personnalisé si les cibles iSCSI sont limitées à certains IQN, mais que les nœuds auxquels les PV iSCSI sont attachés ne sont pas garantis d'avoir ces IQN.

Pour spécifier un IQN d'initiateur personnalisé, utilisez le champ initiatorName.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: iscsi-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  iscsi:
    targetPortal: 10.0.0.1:3260
    portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260']
    iqn: iqn.2016-04.test.com:storage.target00
    lun: 0
    initiatorName: iqn.2016-04.test.com:custom.iqn 1
    fsType: ext4
    readOnly: false
1
Indiquez le nom de l'initiateur.

4.9. Stockage persistant à l'aide de NFS

Les clusters OpenShift Container Platform peuvent être dotés d'un stockage persistant à l'aide de NFS. Les volumes persistants (PV) et les réclamations de volumes persistants (PVC) constituent une méthode pratique pour partager un volume au sein d'un projet. Bien que les informations spécifiques à NFS contenues dans une définition de PV puissent également être définies directement dans une définition Pod, cela ne crée pas le volume en tant que ressource de cluster distincte, ce qui rend le volume plus susceptible d'être conflictuel.

Ressources supplémentaires

4.9.1. Provisionnement

Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform. Pour provisionner des volumes NFS, il suffit de disposer d'une liste de serveurs NFS et de chemins d'exportation.

Procédure

  1. Créer une définition d'objet pour le PV :

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv0001 1
    spec:
      capacity:
        storage: 5Gi 2
      accessModes:
      - ReadWriteOnce 3
      nfs: 4
        path: /tmp 5
        server: 172.17.0.2 6
      persistentVolumeReclaimPolicy: Retain 7
    1
    Le nom du volume. Il s'agit de l'identité du PV dans diverses commandes oc <command> pod.
    2
    La quantité de stockage allouée à ce volume.
    3
    Bien que cela semble être lié au contrôle de l'accès au volume, il est en fait utilisé de manière similaire aux étiquettes et utilisé pour faire correspondre un PVC à un PV. Actuellement, aucune règle d'accès n'est appliquée sur la base de accessModes.
    4
    Le type de volume utilisé, dans ce cas le plugin nfs.
    5
    Chemin exporté par le serveur NFS.
    6
    Le nom d'hôte ou l'adresse IP du serveur NFS.
    7
    La politique de récupération pour le PV. Elle définit ce qu'il advient d'un volume lorsqu'il est libéré.
    Note

    Chaque volume NFS doit pouvoir être monté par tous les nœuds programmables du cluster.

  2. Vérifier que le PV a été créé :

    $ oc get pv

    Exemple de sortie

    NAME     LABELS    CAPACITY     ACCESSMODES   STATUS      CLAIM  REASON    AGE
    pv0001   <none>    5Gi          RWO           Available                    31s

  3. Créez une revendication de volume persistant liée au nouveau PV :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nfs-claim1
    spec:
      accessModes:
        - ReadWriteOnce 1
      resources:
        requests:
          storage: 5Gi 2
      volumeName: pv0001
      storageClassName: ""
    1
    Les modes d'accès n'appliquent pas la sécurité, mais servent plutôt d'étiquettes pour faire correspondre un PV à un PVC.
    2
    Cette demande concerne les systèmes photovoltaïques offrant une capacité égale ou supérieure à 5Gi.
  4. Vérifiez que la revendication de volume persistant a été créée :

    $ oc get pvc

    Exemple de sortie

    NAME         STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    nfs-claim1   Bound    pv0001   5Gi        RWO                           2m

4.9.2. Appliquer les quotas de disque

Vous pouvez utiliser des partitions de disque pour appliquer des quotas de disque et des contraintes de taille. Chaque partition peut constituer sa propre exportation. Chaque exportation est un PV. OpenShift Container Platform impose des noms uniques pour les PV, mais l'unicité du serveur et du chemin du volume NFS est laissée à l'appréciation de l'administrateur.

L'application de quotas de cette manière permet au développeur de demander un stockage persistant d'un montant spécifique, par exemple 10Gi, et d'obtenir un volume correspondant d'une capacité égale ou supérieure.

4.9.3. Sécurité des volumes NFS

Cette section traite de la sécurité des volumes NFS, notamment des permissions correspondantes et des considérations SELinux. L'utilisateur est censé comprendre les bases des autorisations POSIX, des UID de processus, des groupes supplémentaires et de SELinux.

Les développeurs demandent un stockage NFS en référençant soit un PVC par son nom, soit le plugin de volume NFS directement dans la section volumes de leur définition Pod.

Le fichier /etc/exports du serveur NFS contient les répertoires NFS accessibles. Le répertoire NFS cible possède des identifiants POSIX de propriétaire et de groupe. Le plugin NFS d'OpenShift Container Platform monte le répertoire NFS du conteneur avec la même propriété et les mêmes autorisations POSIX que celles trouvées sur le répertoire NFS exporté. Cependant, le conteneur n'est pas exécuté avec son UID effectif égal au propriétaire du montage NFS, ce qui est le comportement souhaité.

Par exemple, si le répertoire NFS cible apparaît sur le serveur NFS sous la forme suivante :

$ ls -lZ /opt/nfs -d

Exemple de sortie

drwxrws---. nfsnobody 5555 unconfined_u:object_r:usr_t:s0   /opt/nfs

$ id nfsnobody

Exemple de sortie

uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

Le conteneur doit alors correspondre aux étiquettes SELinux et fonctionner avec un UID de 65534, le propriétaire de nfsnobody, ou avec 5555 dans ses groupes supplémentaires pour accéder au répertoire.

Note

L'ID propriétaire de 65534 est utilisé comme exemple. Même si root_squash de NFS fait correspondre root, uid 0, à nfsnobody, uid 65534, les exportations NFS peuvent avoir des identifiants de propriétaire arbitraires. Le propriétaire 65534 n'est pas nécessaire pour les exportations NFS.

4.9.3.1. ID des groupes

La manière recommandée de gérer l'accès NFS, en supposant qu'il n'est pas possible de modifier les permissions sur l'exportation NFS, est d'utiliser des groupes supplémentaires. Les groupes supplémentaires dans OpenShift Container Platform sont utilisés pour le stockage partagé, dont NFS est un exemple. En revanche, le stockage en bloc tel que l'iSCSI utilise la stratégie SCC fsGroup et la valeur fsGroup dans le securityContext du pod.

Note

Pour accéder au stockage permanent, il est généralement préférable d'utiliser des identifiants de groupe supplémentaires plutôt que des identifiants d'utilisateur.

Comme l'ID de groupe du répertoire NFS cible de l'exemple est 5555, le module peut définir cet ID de groupe en utilisant supplementalGroups sous la définition securityContext du module. Par exemple :

spec:
  containers:
    - name:
    ...
  securityContext: 1
    supplementalGroups: [5555] 2
1
securityContext doit être définie au niveau du pod, et non pas dans le cadre d'un conteneur spécifique.
2
Un tableau de GIDs définis pour le pod. Dans ce cas, il n'y a qu'un seul élément dans le tableau. Les GID supplémentaires sont séparés par des virgules.

En supposant qu'il n'y ait pas de SCC personnalisé qui puisse satisfaire les exigences du pod, le pod correspond probablement au SCC restricted. Ce SCC a la stratégie supplementalGroups définie sur RunAsAny, ce qui signifie que tout identifiant de groupe fourni est accepté sans vérification de plage.

En conséquence, le pod ci-dessus passe les admissions et est lancé. Cependant, si le contrôle de la plage d'ID de groupe est souhaité, un SCC personnalisé est la solution préférée. Un SCC personnalisé peut être créé de manière à ce que des identifiants de groupe minimum et maximum soient définis, que le contrôle de la plage d'identifiants de groupe soit appliqué et qu'un identifiant de groupe de 5555 soit autorisé.

Note

Pour utiliser un SCC personnalisé, vous devez d'abord l'ajouter au compte de service approprié. Par exemple, utilisez le compte de service default dans le projet donné, à moins qu'un autre compte n'ait été spécifié dans la spécification Pod.

4.9.3.2. ID d'utilisateur

Les ID utilisateurs peuvent être définis dans l'image du conteneur ou dans la définition du site Pod.

Note

Il est généralement préférable d'utiliser des identifiants de groupe supplémentaires pour accéder au stockage permanent plutôt que des identifiants d'utilisateur.

Dans l'exemple de répertoire NFS cible présenté ci-dessus, le conteneur doit avoir pour UID 65534, en ignorant les ID de groupe pour le moment, ce qui permet d'ajouter ce qui suit à la définition de Pod:

spec:
  containers: 1
  - name:
  ...
    securityContext:
      runAsUser: 65534 2
1
Les pods contiennent une définition securityContext spécifique à chaque conteneur et une définition securityContext qui s'applique à tous les conteneurs définis dans le pod.
2
65534 est l'utilisateur nfsnobody.

En supposant que le projet soit default et que le CCN soit restricted, l'ID utilisateur 65534 demandé par le pod n'est pas autorisé. Par conséquent, le module échoue pour les raisons suivantes :

  • Il demande 65534 comme identifiant d'utilisateur.
  • Tous les SCC disponibles pour le pod sont examinés pour voir quel SCC autorise un ID utilisateur de 65534. Bien que toutes les politiques des SCC soient vérifiées, l'accent est mis ici sur l'ID utilisateur.
  • Étant donné que tous les CCN disponibles utilisent MustRunAsRange pour leur stratégie runAsUser, la vérification de la plage d'UID est nécessaire.
  • 65534 n'est pas inclus dans la plage d'identification de l'utilisateur du CCN ou du projet.

Il est généralement considéré comme une bonne pratique de ne pas modifier les SCC prédéfinis. Le meilleur moyen de remédier à cette situation est de créer un SCC personnalisé. Un SCC personnalisé peut être créé de manière à ce que des ID d'utilisateur minimum et maximum soient définis, que la vérification de la plage d'UID soit toujours appliquée et que l'UID de 65534 soit autorisé.

Note

Pour utiliser un SCC personnalisé, vous devez d'abord l'ajouter au compte de service approprié. Par exemple, utilisez le compte de service default dans le projet donné, à moins qu'un autre compte n'ait été spécifié dans la spécification Pod.

4.9.3.3. SELinux

Les systèmes Red Hat Enterprise Linux (RHEL) et Red Hat Enterprise Linux CoreOS (RHCOS) sont configurés par défaut pour utiliser SELinux sur les serveurs NFS distants.

Pour les systèmes non RHEL et non RHCOS, SELinux n'autorise pas l'écriture à partir d'un pod vers un serveur NFS distant. Le volume NFS se monte correctement, mais il est en lecture seule. Vous devez activer les autorisations SELinux correctes à l'aide de la procédure suivante.

Conditions préalables

  • Le paquet container-selinux doit être installé. Ce paquetage fournit le booléen SELinux virt_use_nfs.

Procédure

  • Activez le booléen virt_use_nfs à l'aide de la commande suivante. L'option -P rend ce booléen persistant à travers les redémarrages.

    # setsebool -P virt_use_nfs 1

4.9.3.4. Paramètres d'exportation

Pour permettre aux utilisateurs arbitraires du conteneur de lire et d'écrire le volume, chaque volume exporté sur le serveur NFS doit respecter les conditions suivantes :

  • Chaque exportation doit être exportée en utilisant le format suivant :

    /<example_fs> *(rw,root_squash)
  • Le pare-feu doit être configuré pour autoriser le trafic vers le point de montage.

    • Pour NFSv4, configurez le port par défaut 2049 (nfs).

      NFSv4

      # iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT

    • Pour NFSv3, il y a trois ports à configurer : 2049 (nfs), 20048 (mountd) et 111 (portmapper).

      NFSv3

      # iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT

      # iptables -I INPUT 1 -p tcp --dport 20048 -j ACCEPT
      # iptables -I INPUT 1 -p tcp --dport 111 -j ACCEPT
  • L'exportation et le répertoire NFS doivent être configurés de manière à être accessibles par les pods cibles. Il faut soit définir l'exportation comme appartenant à l'UID principal du conteneur, soit fournir l'accès au groupe de pods en utilisant supplementalGroups, comme indiqué dans les ID de groupe ci-dessus.

4.9.4. Récupération des ressources

NFS implémente l'interface du plugin OpenShift Container Platform Recyclable. Des processus automatiques gèrent les tâches de remise en état en fonction des politiques définies sur chaque volume persistant.

Par défaut, les PV sont réglés sur Retain.

Une fois que les droits sur un PVC sont supprimés et que le PV est libéré, l'objet PV ne doit pas être réutilisé. Au lieu de cela, un nouveau PV doit être créé avec les mêmes détails de volume de base que l'original.

Par exemple, l'administrateur crée un PV nommé nfs1:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs1
spec:
  capacity:
    storage: 1Mi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.1.1
    path: "/"

L'utilisateur crée PVC1, qui se lie à nfs1. L'utilisateur supprime ensuite PVC1, ce qui libère nfs1. Le résultat est que nfs1 est Released. Si l'administrateur souhaite rendre le même partage NFS disponible, il doit créer un nouveau PV avec les mêmes détails de serveur NFS, mais un nom de PV différent :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs2
spec:
  capacity:
    storage: 1Mi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.1.1
    path: "/"

Il est déconseillé de supprimer le PV original et de le recréer sous le même nom. Tenter de modifier manuellement l'état d'un PV de Released à Available entraîne des erreurs et une perte potentielle de données.

4.9.5. Configuration supplémentaire et dépannage

Selon la version de NFS utilisée et la manière dont elle est configurée, des étapes de configuration supplémentaires peuvent être nécessaires pour une exportation et un mappage de sécurité corrects. En voici quelques-unes qui peuvent s'appliquer :

Le montage NFSv4 affiche incorrectement tous les fichiers dont le propriétaire est nobody:nobody

  • Cela peut être attribué aux paramètres de mappage des identifiants, qui se trouvent à l'adresse /etc/idmapd.conf sur votre NFS.
  • Voir cette solution Red Hat.

Désactivation du mappage d'identifiants sur NFSv4

  • Sur le client et le serveur NFS, exécutez :

    # echo 'Y' > /sys/module/nfsd/parameters/nfs4_disable_idmapping

4.10. Red Hat OpenShift Data Foundation

Red Hat OpenShift Data Foundation est un fournisseur de stockage persistant agnostique pour OpenShift Container Platform prenant en charge le stockage de fichiers, de blocs et d'objets, que ce soit en interne ou dans des clouds hybrides. En tant que solution de stockage Red Hat, Red Hat OpenShift Data Foundation est complètement intégré à OpenShift Container Platform pour le déploiement, la gestion et la surveillance.

Red Hat OpenShift Data Foundation fournit sa propre bibliothèque de documentation. L'ensemble de la documentation de Red Hat OpenShift Data Foundation est disponible à l'adresse https://access.redhat.com/documentation/en-us/red_hat_openshift_data_foundation.

Important

OpenShift Data Foundation au-dessus de Red Hat Hyperconverged Infrastructure (RHHI) for Virtualization, qui utilise des nœuds hyperconvergés qui hébergent des machines virtuelles installées avec OpenShift Container Platform, n'est pas une configuration prise en charge. Pour plus d'informations sur les plateformes prises en charge, consultez le Guide de prise en charge et d'interopérabilité de Red Hat OpenShift Data Foundation.

4.11. Stockage persistant à l'aide des volumes VMware vSphere

OpenShift Container Platform permet d'utiliser les volumes Virtual Machine Disk (VMDK) de VMware vSphere. Vous pouvez approvisionner votre cluster OpenShift Container Platform avec un stockage persistant en utilisant VMware vSphere. Une certaine familiarité avec Kubernetes et VMware vSphere est supposée.

Les volumes VMware vSphere peuvent être approvisionnés de manière dynamique. OpenShift Container Platform crée le disque dans vSphere et l'attache à l'image correcte.

Note

OpenShift Container Platform fournit de nouveaux volumes en tant que disques persistants indépendants qui peuvent librement attacher et détacher le volume sur n'importe quel nœud du cluster. Par conséquent, vous ne pouvez pas sauvegarder des volumes qui utilisent des instantanés, ni restaurer des volumes à partir d'instantanés. Voir Limitations des instantanés pour plus d'informations.

Le cadre de volume persistant de Kubernetes permet aux administrateurs de provisionner un cluster avec un stockage persistant et donne aux utilisateurs un moyen de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente.

Les volumes persistants ne sont pas liés à un projet ou à un espace de noms unique ; ils peuvent être partagés à travers le cluster OpenShift Container Platform. Les demandes de volumes persistants sont spécifiques à un projet ou à un espace de noms et peuvent être demandées par les utilisateurs.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage vSphere.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Ressources supplémentaires

4.11.1. Approvisionnement dynamique des volumes VMware vSphere

Le provisionnement dynamique des volumes VMware vSphere est la méthode recommandée.

4.11.2. Conditions préalables

  • Un cluster OpenShift Container Platform installé sur une version de VMware vSphere qui répond aux exigences des composants que vous utilisez. Voir Installation d'un cluster sur vSphere pour plus d'informations sur la prise en charge des versions de vSphere.

Vous pouvez utiliser l'une des procédures suivantes pour approvisionner dynamiquement ces volumes à l'aide de la classe de stockage par défaut.

4.11.2.1. Approvisionnement dynamique des volumes VMware vSphere à l'aide de l'interface utilisateur

OpenShift Container Platform installe une classe de stockage par défaut, nommée thin, qui utilise le format de disque thin pour provisionner les volumes.

Conditions préalables

  • Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
  2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
  3. Définissez les options requises sur la page résultante.

    1. Sélectionnez la classe de stockage thin.
    2. Saisissez un nom unique pour la créance de stockage.
    3. Sélectionnez le mode d'accès pour déterminer l'accès en lecture et en écriture de l'unité de stockage créée.
    4. Définir la taille de la demande de stockage.
  4. Cliquez sur Create pour créer la demande de volume persistant et générer un volume persistant.

4.11.2.2. Approvisionnement dynamique des volumes VMware vSphere à l'aide de la CLI

OpenShift Container Platform installe une StorageClass par défaut, nommée thin, qui utilise le format de disque thin pour provisionner les volumes.

Conditions préalables

  • Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure (CLI)

  1. Vous pouvez définir un VMware vSphere PersistentVolumeClaim en créant un fichier, pvc.yaml, dont le contenu est le suivant :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc 1
    spec:
      accessModes:
      - ReadWriteOnce 2
      resources:
        requests:
          storage: 1Gi 3
    1
    Un nom unique qui représente la demande de volume persistant.
    2
    Le mode d'accès de la demande de volume persistant. Avec ReadWriteOnce, le volume peut être monté avec des autorisations de lecture et d'écriture par un seul nœud.
    3
    Taille de la demande de volume persistant.
  2. Créer l'objet PersistentVolumeClaim à partir du fichier :

    $ oc create -f pvc.yaml

4.11.3. Approvisionnement statique des volumes VMware vSphere

Pour provisionner statiquement des volumes VMware vSphere, vous devez créer les disques de la machine virtuelle pour qu'ils soient référencés par la structure de volumes persistants.

Conditions préalables

  • Le stockage doit exister dans l'infrastructure sous-jacente avant de pouvoir être monté en tant que volume dans OpenShift Container Platform.

Procédure

  1. Créez les disques de la machine virtuelle. Les disques de machine virtuelle (VMDK) doivent être créés manuellement avant le provisionnement statique des volumes VMware vSphere. Utilisez l'une des méthodes suivantes :

    • Création à l'aide de vmkfstools. Accédez à ESX via Secure Shell (SSH) et utilisez la commande suivante pour créer un volume VMDK :

      $ vmkfstools -c <size> /vmfs/volumes/<datastore-name>/volumes/<disk-name>.vmdk
    • Créer à l'aide de vmware-diskmanager:

      $ shell vmware-vdiskmanager -c -t 0 -s <size> -a lsilogic <disk-name>.vmdk
  2. Créez un volume persistant qui référence les VMDK. Créez un fichier, pv1.yaml, avec la définition de l'objet PersistentVolume:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv1 1
    spec:
      capacity:
        storage: 1Gi 2
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      vsphereVolume: 3
        volumePath: "[datastore1] volumes/myDisk"  4
        fsType: ext4  5
    1
    Le nom du volume. Ce nom est la façon dont il est identifié par les réclamations de volumes persistants ou les pods.
    2
    La quantité de stockage allouée à ce volume.
    3
    Le type de volume utilisé, avec vsphereVolume pour les volumes vSphere. L'étiquette est utilisée pour monter un volume VMDK vSphere dans des pods. Le contenu d'un volume est préservé lorsqu'il est démonté. Le type de volume prend en charge les datastores VMFS et VSAN.
    4
    Le volume VMDK existant à utiliser. Si vous avez utilisé vmkfstools, vous devez mettre le nom du datastore entre crochets, [], dans la définition du volume, comme indiqué précédemment.
    5
    Le type de système de fichiers à monter. Par exemple, ext4, xfs ou d'autres systèmes de fichiers.
    Important

    La modification de la valeur du paramètre fsType après le formatage et l'approvisionnement du volume peut entraîner une perte de données et une défaillance du pod.

  3. Créer l'objet PersistentVolume à partir du fichier :

    $ oc create -f pv1.yaml
  4. Créez une revendication de volume persistant qui correspond au volume persistant que vous avez créé à l'étape précédente. Créez un fichier, pvc1.yaml, avec la définition de l'objet PersistentVolumeClaim:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc1 1
    spec:
      accessModes:
        - ReadWriteOnce 2
      resources:
       requests:
         storage: "1Gi" 3
      volumeName: pv1 4
    1
    Un nom unique qui représente la demande de volume persistant.
    2
    Le mode d'accès de la demande de volume persistant. Avec ReadWriteOnce, le volume peut être monté avec des autorisations de lecture et d'écriture par un seul nœud.
    3
    Taille de la demande de volume persistant.
    4
    Le nom du volume persistant existant.
  5. Créer l'objet PersistentVolumeClaim à partir du fichier :

    $ oc create -f pvc1.yaml

4.11.3.1. Formatage des volumes VMware vSphere

Avant qu'OpenShift Container Platform ne monte le volume et ne le transmette à un conteneur, il vérifie que le volume contient un système de fichiers spécifié par la valeur du paramètre fsType dans la définition de PersistentVolume (PV). Si le périphérique n'est pas formaté avec le système de fichiers, toutes les données du périphérique sont effacées et le périphérique est automatiquement formaté avec le système de fichiers spécifié.

Comme OpenShift Container Platform les formate avant la première utilisation, vous pouvez utiliser des volumes vSphere non formatés en tant que PV.

4.12. Stockage persistant à l'aide du stockage local

4.12.1. Stockage persistant à l'aide de volumes locaux

OpenShift Container Platform peut être approvisionné avec un stockage persistant en utilisant des volumes locaux. Les volumes persistants locaux vous permettent d'accéder aux périphériques de stockage locaux, tels qu'un disque ou une partition, en utilisant l'interface standard de demande de volume persistant.

Les volumes locaux peuvent être utilisés sans qu'il soit nécessaire de planifier manuellement les pods sur les nœuds, car le système est conscient des contraintes liées aux nœuds de volume. Toutefois, les volumes locaux restent soumis à la disponibilité du nœud sous-jacent et ne conviennent pas à toutes les applications.

Note

Les volumes locaux ne peuvent être utilisés que comme volumes persistants créés de manière statique.

4.12.1.1. Installation de l'opérateur de stockage local

L'opérateur de stockage local n'est pas installé par défaut dans OpenShift Container Platform. Utilisez la procédure suivante pour installer et configurer cet opérateur afin d'activer les volumes locaux dans votre cluster.

Conditions préalables

  • Accès à la console web ou à l'interface de ligne de commande (CLI) d'OpenShift Container Platform.

Procédure

  1. Créez le projet openshift-local-storage:

    $ oc adm new-project openshift-local-storage
  2. Facultatif : Autoriser la création de stockage local sur les nœuds d'infrastructure.

    Vous pouvez utiliser l'opérateur de stockage local pour créer des volumes sur les nœuds d'infrastructure afin de prendre en charge des composants tels que la journalisation et la surveillance.

    Vous devez ajuster le sélecteur de nœuds par défaut afin que l'opérateur de stockage local inclue les nœuds d'infrastructure, et pas seulement les nœuds de travail.

    Pour empêcher l'opérateur de stockage local d'hériter du sélecteur par défaut de l'ensemble du cluster, entrez la commande suivante :

    $ oc annotate project openshift-local-storage openshift.io/node-selector=''

Depuis l'interface utilisateur

Pour installer l'Opérateur de stockage local à partir de la console web, procédez comme suit :

  1. Connectez-vous à la console web de OpenShift Container Platform.
  2. Naviguez jusqu'à OperatorsOperatorHub.
  3. Tapez Local Storage dans le champ de filtre pour localiser l'opérateur de stockage local.
  4. Cliquez sur Install.
  5. Sur la page Install Operator, sélectionnez A specific namespace on the cluster. Sélectionnez openshift-local-storage dans le menu déroulant.
  6. Ajustez les valeurs de Update Channel et Approval Strategy aux valeurs que vous souhaitez.
  7. Cliquez sur Install.

Une fois cette opération terminée, l'opérateur de stockage local sera répertorié dans la section Installed Operators de la console web.

À partir de l'interface de programmation (CLI)

  1. Installez l'opérateur de stockage local à partir de l'interface de gestion.

    1. Exécutez la commande suivante pour obtenir la version majeure et mineure d'OpenShift Container Platform. Cette information est nécessaire pour la valeur channel dans l'étape suivante.

      $ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \
          grep -o '[0-9]*[.][0-9]*' | head -1)
    2. Créer un fichier objet YAML pour définir un groupe d'opérateurs et un abonnement pour l'opérateur de stockage local, tel que openshift-local-storage.yaml:

      Exemple openshift-local-storage.yaml

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: local-operator-group
        namespace: openshift-local-storage
      spec:
        targetNamespaces:
          - openshift-local-storage
      ---
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: local-storage-operator
        namespace: openshift-local-storage
      spec:
        channel: "${OC_VERSION}"
        installPlanApproval: Automatic 1
        name: local-storage-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

      1
      La politique d'approbation des utilisateurs pour un plan d'installation.
  2. Créez l'objet Opérateur de stockage local en entrant la commande suivante :

    $ oc apply -f openshift-local-storage.yaml

    À ce stade, le gestionnaire du cycle de vie de l'opérateur (OLM) est maintenant au courant de l'existence de l'opérateur de stockage local. Une ClusterServiceVersion (CSV) pour l'opérateur devrait apparaître dans l'espace de noms cible, et les API fournies par l'opérateur devraient être disponibles pour la création.

  3. Vérifier l'installation du stockage local en contrôlant que tous les pods et l'opérateur de stockage local ont été créés :

    1. Vérifier que tous les pods nécessaires ont été créés :

      $ oc -n openshift-local-storage get pods

      Exemple de sortie

      NAME                                      READY   STATUS    RESTARTS   AGE
      local-storage-operator-746bf599c9-vlt5t   1/1     Running   0          19m

    2. Vérifiez le manifeste YAML ClusterServiceVersion (CSV) pour voir si l'opérateur de stockage local est disponible dans le projet openshift-local-storage:

      $ oc get csvs -n openshift-local-storage

      Exemple de sortie

      NAME                                         DISPLAY         VERSION               REPLACES   PHASE
      local-storage-operator.4.2.26-202003230335   Local Storage   4.2.26-202003230335              Succeeded

Lorsque toutes les vérifications ont été effectuées, l'opérateur de stockage local est installé avec succès.

4.12.1.2. Approvisionnement de volumes locaux à l'aide de l'Opérateur de stockage local

Les volumes locaux ne peuvent pas être créés par provisionnement dynamique. En revanche, des volumes persistants peuvent être créés par l'opérateur de stockage local. L'opérateur de stockage local recherche des périphériques de système de fichiers ou de volumes de blocs aux chemins d'accès spécifiés dans la ressource définie.

Conditions préalables

  • L'opérateur de stockage local est installé.
  • Vous disposez d'un disque local qui répond aux conditions suivantes :

    • Il est rattaché à un nœud.
    • Il n'est pas monté.
    • Il ne contient pas de partitions.

Procédure

  1. Créer la ressource volume local. Cette ressource doit définir les nœuds et les chemins d'accès aux volumes locaux.

    Note

    N'utilisez pas différents noms de classe de stockage pour le même périphérique. Cela entraînerait la création de plusieurs volumes persistants (PV).

    Exemple : Système de fichiers

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-140-183
              - ip-10-0-158-139
              - ip-10-0-164-33
      storageClassDevices:
        - storageClassName: "local-sc" 3
          volumeMode: Filesystem 4
          fsType: xfs 5
          devicePaths: 6
            - /path/to/device 7

    1
    L'espace de noms dans lequel l'Opérateur de stockage local est installé.
    2
    Facultatif : Un sélecteur de nœud contenant une liste de nœuds auxquels les volumes de stockage local sont attachés. Cet exemple utilise les noms d'hôtes des nœuds, obtenus à partir de oc get node. Si aucune valeur n'est définie, l'opérateur de stockage local tentera de trouver les disques correspondants sur tous les nœuds disponibles.
    3
    Le nom de la classe de stockage à utiliser lors de la création d'objets de volumes persistants. L'Opérateur de stockage local crée automatiquement la classe de stockage si elle n'existe pas. Veillez à utiliser une classe de stockage qui identifie de manière unique cet ensemble de volumes locaux.
    4
    Le mode de volume, soit Filesystem ou Block, qui définit le type de volumes locaux.
    Note

    Un volume de blocs bruts (volumeMode: Block) n'est pas formaté avec un système de fichiers. N'utilisez ce mode que si une application fonctionnant sur le pod peut utiliser des périphériques de blocs bruts.

    5
    Système de fichiers créé lorsque le volume local est monté pour la première fois.
    6
    Chemin d'accès contenant une liste de périphériques de stockage locaux à sélectionner.
    7
    Remplacez cette valeur par le chemin d'accès de vos disques locaux à la ressource LocalVolume by-id , par exemple /dev/disk/by-id/wwn. Les PV sont créés pour ces disques locaux lorsque le provisionneur est déployé avec succès.
    Note

    Si vous exécutez OpenShift Container Platform sur des zSystems IBM avec RHEL KVM, vous devez attribuer un numéro de série à votre disque VM. Sinon, le disque VM ne peut pas être identifié après le redémarrage. Vous pouvez utiliser la commande virsh edit <VM> pour ajouter la définition <serial>mydisk</serial>.

    Exemple : Bloc

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-136-143
              - ip-10-0-140-255
              - ip-10-0-144-180
      storageClassDevices:
        - storageClassName: "localblock-sc" 3
          volumeMode: Block 4
          devicePaths: 5
            - /path/to/device 6

    1
    L'espace de noms dans lequel l'Opérateur de stockage local est installé.
    2
    Facultatif : Un sélecteur de nœud contenant une liste de nœuds auxquels les volumes de stockage local sont attachés. Cet exemple utilise les noms d'hôtes des nœuds, obtenus à partir de oc get node. Si aucune valeur n'est définie, l'opérateur de stockage local tentera de trouver les disques correspondants sur tous les nœuds disponibles.
    3
    Le nom de la classe de stockage à utiliser lors de la création d'objets de volumes persistants.
    4
    Le mode de volume, soit Filesystem ou Block, qui définit le type de volumes locaux.
    5
    Chemin d'accès contenant une liste de périphériques de stockage locaux à sélectionner.
    6
    Remplacez cette valeur par le chemin d'accès de vos disques locaux à la ressource LocalVolume by-id , par exemple dev/disk/by-id/wwn. Les PV sont créés pour ces disques locaux lorsque le provisionneur est déployé avec succès.
    Note

    Si vous exécutez OpenShift Container Platform sur des zSystems IBM avec RHEL KVM, vous devez attribuer un numéro de série à votre disque VM. Sinon, le disque VM ne peut pas être identifié après le redémarrage. Vous pouvez utiliser la commande virsh edit <VM> pour ajouter la définition <serial>mydisk</serial>.

  2. Créez la ressource de volume local dans votre cluster OpenShift Container Platform. Spécifiez le fichier que vous venez de créer :

    oc create -f <local-volume>.yaml
  3. Vérifiez que le provisionneur a été créé et que les ensembles de démons correspondants ont été créés :

    $ oc get all -n openshift-local-storage

    Exemple de sortie

    NAME                                          READY   STATUS    RESTARTS   AGE
    pod/diskmaker-manager-9wzms                   1/1     Running   0          5m43s
    pod/diskmaker-manager-jgvjp                   1/1     Running   0          5m43s
    pod/diskmaker-manager-tbdsj                   1/1     Running   0          5m43s
    pod/local-storage-operator-7db4bd9f79-t6k87   1/1     Running   0          14m
    
    NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/local-storage-operator-metrics   ClusterIP   172.30.135.36   <none>        8383/TCP,8686/TCP   14m
    
    NAME                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/diskmaker-manager   3         3         3       3            3           <none>          5m43s
    
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/local-storage-operator   1/1     1            1           14m
    
    NAME                                                DESIRED   CURRENT   READY   AGE
    replicaset.apps/local-storage-operator-7db4bd9f79   1         1         1       14m

    Notez le nombre souhaité et le nombre actuel de processus du jeu de démons. Un nombre souhaité de 0 indique que les sélecteurs d'étiquettes n'étaient pas valides.

  4. Vérifiez que les volumes persistants ont été créés :

    $ oc get pv

    Exemple de sortie

    NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    local-pv-1cec77cf   100Gi      RWO            Delete           Available           local-sc                88m
    local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           local-sc                82m
    local-pv-3fa1c73    100Gi      RWO            Delete           Available           local-sc                48m

Important

La modification de l'objet LocalVolume ne modifie pas les objets fsType ou volumeMode des volumes persistants existants, car cela pourrait entraîner une opération destructive.

4.12.1.3. Approvisionnement de volumes locaux sans l'Opérateur de stockage local

Les volumes locaux ne peuvent pas être créés par provisionnement dynamique. En revanche, des volumes persistants peuvent être créés en définissant le volume persistant (PV) dans une définition d'objet. Le provisionneur de volumes locaux recherche tous les périphériques de système de fichiers ou de volumes de blocs aux chemins d'accès spécifiés dans la ressource définie.

Important

Le provisionnement manuel des PV comporte le risque de fuites de données potentielles à travers la réutilisation des PV lorsque les PVC sont supprimés. L'opérateur de stockage local est recommandé pour automatiser le cycle de vie des dispositifs lors de l'approvisionnement des PV locaux.

Conditions préalables

  • Les disques locaux sont attachés aux nœuds d'OpenShift Container Platform.

Procédure

  1. Définir le PV. Créez un fichier, tel que example-pv-filesystem.yaml ou example-pv-block.yaml, avec la définition de l'objet PersistentVolume. Cette ressource doit définir les nœuds et les chemins d'accès aux volumes locaux.

    Note

    N'utilisez pas différents noms de classe de stockage pour le même appareil. Cela entraînerait la création de plusieurs PV.

    exemple-pv-filesystem.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-filesystem
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Filesystem 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    Le mode de volume, soit Filesystem ou Block, qui définit le type de PV.
    2
    Nom de la classe de stockage à utiliser lors de la création de ressources PV. Utiliser une classe de stockage qui identifie de manière unique cet ensemble de PV.
    3
    Le chemin d'accès contenant une liste de périphériques de stockage locaux à choisir, ou un répertoire. Vous ne pouvez spécifier un répertoire qu'avec Filesystem volumeMode .
    Note

    Un volume de blocs bruts (volumeMode: block) n'est pas formaté avec un système de fichiers. N'utilisez ce mode que si une application fonctionnant sur le pod peut utiliser des périphériques de blocs bruts.

    exemple-pv-block.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-block
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Block 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    Le mode de volume, soit Filesystem ou Block, qui définit le type de PV.
    2
    Nom de la classe de stockage à utiliser lors de la création de ressources PV. Veillez à utiliser une classe de stockage qui identifie de manière unique cet ensemble de PV.
    3
    Chemin d'accès contenant une liste de périphériques de stockage locaux à sélectionner.
  2. Créez la ressource PV dans votre cluster OpenShift Container Platform. Spécifiez le fichier que vous venez de créer :

    oc create -f <example-pv>.yaml
  3. Vérifier que le PV local a été créé :

    $ oc get pv

    Exemple de sortie

    NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                STORAGECLASS    REASON   AGE
    example-pv-filesystem   100Gi      RWO            Delete           Available                        local-storage            3m47s
    example-pv1             1Gi        RWO            Delete           Bound       local-storage/pvc1   local-storage            12h
    example-pv2             1Gi        RWO            Delete           Bound       local-storage/pvc2   local-storage            12h
    example-pv3             1Gi        RWO            Delete           Bound       local-storage/pvc3   local-storage            12h

4.12.1.4. Création de la revendication de volume persistant du volume local

Les volumes locaux doivent être créés de manière statique en tant que revendication de volume persistant (PVC) pour être accessibles par le pod.

Conditions préalables

  • Des volumes persistants ont été créés à l'aide du provisionneur de volumes local.

Procédure

  1. Créer le PVC en utilisant la classe de stockage correspondante :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: local-pvc-name 1
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem 2
      resources:
        requests:
          storage: 100Gi 3
      storageClassName: local-sc 4
    1
    Nom du PVC.
    2
    Le type de PVC. La valeur par défaut est Filesystem.
    3
    La quantité de stockage disponible pour le PVC.
    4
    Nom de la classe de stockage requise par la demande.
  2. Créez le PVC dans le cluster OpenShift Container Platform, en spécifiant le fichier que vous venez de créer :

    oc create -f <local-pvc>.yaml

4.12.1.5. Joindre la demande locale

Une fois qu'un volume local a été mis en correspondance avec une demande de volume persistant, il peut être spécifié à l'intérieur d'une ressource.

Conditions préalables

  • Une demande de volume persistant existe dans le même espace de noms.

Procédure

  1. Inclure la revendication définie dans la spécification de la ressource. L'exemple suivant déclare la revendication de volume persistant à l'intérieur d'un pod :

    apiVersion: v1
    kind: Pod
    spec:
      ...
      containers:
        volumeMounts:
        - name: local-disks 1
          mountPath: /data 2
      volumes:
      - name: localpvc
        persistentVolumeClaim:
          claimName: local-pvc-name 3
    1
    Le nom du volume à monter.
    2
    Le chemin à l'intérieur du module où le volume est monté. Ne montez pas le volume sur la racine du conteneur, /, ou sur un chemin identique dans l'hôte et dans le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié, comme l'hôte /dev/pts files. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.
    3
    Le nom de la revendication de volume persistant existante à utiliser.
  2. Créez la ressource dans le cluster OpenShift Container Platform, en spécifiant le fichier que vous venez de créer :

    oc create -f <local-pod>.yaml

4.12.1.6. Automatisation de la découverte et de l'approvisionnement des périphériques de stockage locaux

L'opérateur de stockage local automatise la découverte et le provisionnement du stockage local. Grâce à cette fonctionnalité, vous pouvez simplifier l'installation lorsque le provisionnement dynamique n'est pas disponible lors du déploiement, comme dans le cas d'instances de stockage bare metal, VMware ou AWS avec des périphériques connectés.

Important

La découverte et le provisionnement automatiques sont des fonctionnalités de l'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

La procédure suivante permet de découvrir automatiquement les périphériques locaux et d'approvisionner automatiquement les volumes locaux pour les périphériques sélectionnés.

Avertissement

Utilisez l'objet LocalVolumeSet avec prudence. Lorsque vous provisionnez automatiquement des volumes persistants (PV) à partir de disques locaux, les PV locaux peuvent réclamer tous les périphériques qui correspondent. Si vous utilisez un objet LocalVolumeSet, assurez-vous que l'opérateur de stockage local est la seule entité à gérer les périphériques locaux sur le nœud.

Conditions préalables

  • Vous avez des droits d'administrateur de cluster.
  • Vous avez installé l'Opérateur de stockage local.
  • Vous avez attaché des disques locaux aux nœuds d'OpenShift Container Platform.
  • Vous avez accès à la console web d'OpenShift Container Platform et à l'interface de ligne de commande (CLI) oc.

Procédure

  1. Pour activer la découverte automatique des appareils locaux à partir de la console web :

    1. Dans la perspective Administrator, naviguez vers OperatorsInstalled Operators et cliquez sur l'onglet Local Volume Discovery.
    2. Cliquez sur Create Local Volume Discovery.
    3. Sélectionnez All nodes ou Select nodes, selon que vous souhaitez découvrir les disques disponibles sur tous les nœuds ou sur des nœuds spécifiques.

      Note

      Seuls les nœuds de travail sont disponibles, que vous filtriez à l'aide de All nodes ou de Select nodes.

    4. Cliquez sur Create.

Une instance de découverte de volume local nommée auto-discover-devices est affichée.

  1. Pour afficher une liste continue des dispositifs disponibles sur un nœud :

    1. Connectez-vous à la console web de OpenShift Container Platform.
    2. Naviguez jusqu'à ComputeNodes.
    3. Cliquez sur le nom du nœud que vous souhaitez ouvrir. La page "Détails du nœud" s'affiche.
    4. Sélectionnez l'onglet Disks pour afficher la liste des appareils sélectionnés.

      La liste des périphériques est mise à jour en permanence au fur et à mesure que des disques locaux sont ajoutés ou supprimés. Vous pouvez filtrer les périphériques par nom, état, type, modèle, capacité et mode.

  2. Pour provisionner automatiquement des volumes locaux pour les appareils découverts à partir de la console web :

    1. Naviguez jusqu'à OperatorsInstalled Operators et sélectionnez Local Storage dans la liste des opérateurs.
    2. Sélectionnez Local Volume SetCreate Local Volume Set.
    3. Saisissez un nom d'ensemble de volumes et un nom de classe de stockage.
    4. Choisissez All nodes ou Select nodes pour appliquer des filtres en conséquence.

      Note

      Seuls les nœuds de travail sont disponibles, que vous filtriez à l'aide de All nodes ou de Select nodes.

    5. Sélectionnez le type de disque, le mode, la taille et la limite que vous souhaitez appliquer à l'ensemble de volumes locaux, puis cliquez sur Create.

      Un message s'affiche au bout de quelques minutes, indiquant que l'opérateur s'est réconcilié avec succès

  1. Il est également possible de provisionner des volumes locaux pour les appareils découverts à partir de la CLI :

    1. Créez un fichier objet YAML pour définir l'ensemble de volumes locaux, tel que local-volume-set.yaml, comme indiqué dans l'exemple suivant :

      apiVersion: local.storage.openshift.io/v1alpha1
      kind: LocalVolumeSet
      metadata:
        name: example-autodetect
      spec:
        nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                    - worker-0
                    - worker-1
        storageClassName: example-storageclass 1
        volumeMode: Filesystem
        fsType: ext4
        maxDeviceCount: 10
        deviceInclusionSpec:
          deviceTypes: 2
            - disk
            - part
          deviceMechanicalProperties:
            - NonRotational
          minSize: 10G
          maxSize: 100G
          models:
            - SAMSUNG
            - Crucial_CT525MX3
          vendors:
            - ATA
            - ST2000LM
      1
      Détermine la classe de stockage qui est créée pour les volumes persistants provisionnés à partir de périphériques découverts. L'Opérateur de stockage local crée automatiquement la classe de stockage si elle n'existe pas. Veillez à utiliser une classe de stockage qui identifie de manière unique cet ensemble de volumes locaux.
      2
      Lors de l'utilisation de la fonction de jeu de volumes locaux, l'Opérateur de stockage local ne prend pas en charge l'utilisation de périphériques de gestion de volumes logiques (LVM).
    2. Créer l'objet jeu de volume local :

      $ oc apply -f local-volume-set.yaml
    3. Vérifiez que les volumes persistants locaux ont été provisionnés dynamiquement en fonction de la classe de stockage :

      $ oc get pv

      Exemple de sortie

      NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS           REASON   AGE
      local-pv-1cec77cf   100Gi      RWO            Delete           Available           example-storageclass            88m
      local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           example-storageclass            82m
      local-pv-3fa1c73    100Gi      RWO            Delete           Available           example-storageclass            48m

Note

Les résultats sont supprimés après avoir été retirés du nœud. Les liens symboliques doivent être supprimés manuellement.

4.12.1.7. Utilisation des tolérances avec les pods de l'opérateur de stockage local

Il est possible d'appliquer des restrictions aux nœuds pour les empêcher d'exécuter des charges de travail générales. Pour permettre à l'opérateur de stockage local d'utiliser des nœuds altérés, vous devez ajouter des tolérances à la définition de Pod ou DaemonSet. Cela permet aux ressources créées de s'exécuter sur ces nœuds altérés.

Vous appliquez des tolérances au pod de l'opérateur de stockage local via la ressource LocalVolume et vous appliquez des altérations à un nœud via la spécification de nœud. Une tare sur un nœud indique au nœud de repousser tous les modules qui ne tolèrent pas la tare. L'utilisation d'une tare spécifique qui n'est pas présente sur d'autres modules garantit que le module de l'opérateur de stockage local peut également fonctionner sur ce nœud.

Important

Les plaintes et les tolérances se composent d'une clé, d'une valeur et d'un effet. En tant qu'argument, il est exprimé sous la forme key=value:effect. Un opérateur permet de laisser l'un de ces paramètres vide.

Conditions préalables

  • L'opérateur de stockage local est installé.
  • Les disques locaux sont attachés aux nœuds d'OpenShift Container Platform avec un taint.
  • Les nœuds altérés sont censés fournir un stockage local.

Procédure

Pour configurer les volumes locaux en vue de leur ordonnancement sur les nœuds altérés :

  1. Modifiez le fichier YAML qui définit le site Pod et ajoutez la spécification LocalVolume, comme indiqué dans l'exemple suivant :

      apiVersion: "local.storage.openshift.io/v1"
      kind: "LocalVolume"
      metadata:
        name: "local-disks"
        namespace: "openshift-local-storage"
      spec:
        tolerations:
          - key: localstorage 1
            operator: Equal 2
            value: "localstorage" 3
        storageClassDevices:
            - storageClassName: "localblock-sc"
              volumeMode: Block 4
              devicePaths: 5
                - /dev/xvdg
    1
    Spécifiez la clé que vous avez ajoutée au nœud.
    2
    Indiquez l'opérateur Equal pour exiger que les paramètres key/value correspondent. Si l'opérateur est Exists, le système vérifie que la clé existe et ignore la valeur. Si l'opérateur est Equal, la clé et la valeur doivent correspondre.
    3
    Indiquer la valeur local du nœud altéré.
    4
    Le mode de volume, soit Filesystem ou Block, définissant le type de volumes locaux.
    5
    Chemin d'accès contenant une liste de périphériques de stockage locaux à sélectionner.
  2. Facultatif : Pour créer des volumes persistants locaux uniquement sur les nœuds altérés, modifiez le fichier YAML et ajoutez la spécification LocalVolume, comme indiqué dans l'exemple suivant :

    spec:
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists

Les tolérances définies seront transmises aux ensembles de démons résultants, ce qui permettra de créer des pods de disquaire et de provisionneur pour les nœuds qui contiennent les taches spécifiées.

4.12.1.8. Paramètres de l'opérateur de stockage local

OpenShift Container Platform fournit les mesures suivantes pour l'opérateur de stockage local :

  • lso_discovery_disk_countnombre total de dispositifs découverts sur chaque nœud
  • lso_lvset_provisioned_PV_countnombre total de PV créés par les objets LocalVolumeSet
  • lso_lvset_unmatched_disk_countnombre total de disques que l'opérateur de stockage local n'a pas sélectionnés pour le provisionnement en raison de critères non concordants
  • lso_lvset_orphaned_symlink_countnombre d'appareils dont les PV ne correspondent plus aux critères de l'objet LocalVolumeSet
  • lso_lv_orphaned_symlink_countnombre d'appareils dont les PV ne correspondent plus aux critères de l'objet LocalVolume
  • lso_lv_provisioned_PV_countnombre total de PV provisionnées pour LocalVolume

Pour utiliser ces mesures, veillez à.. :

  • Activer la prise en charge de la surveillance lors de l'installation de l'Opérateur de stockage local.
  • Lors de la mise à jour vers OpenShift Container Platform 4.9 ou une version ultérieure, activez le support métrique manuellement en ajoutant le label operator-metering=true à l'espace de noms.

Pour plus d'informations sur les métriques, voir Gestion des métriques.

4.12.1.9. Suppression des ressources de l'opérateur de stockage local

4.12.1.9.1. Suppression d'un volume local ou d'un ensemble de volumes locaux

Il arrive que des volumes locaux et des ensembles de volumes locaux doivent être supprimés. Bien que la suppression de l'entrée dans la ressource et la suppression du volume persistant suffisent généralement, si vous souhaitez réutiliser le même chemin d'accès au périphérique ou le faire gérer par une classe de stockage différente, des étapes supplémentaires sont nécessaires.

Note

La procédure suivante présente un exemple de suppression d'un volume local. La même procédure peut également être utilisée pour supprimer les liens symboliques d'une ressource personnalisée d'un ensemble de volumes locaux.

Conditions préalables

  • Le volume persistant doit être dans un état Released ou Available.

    Avertissement

    La suppression d'un volume persistant encore en cours d'utilisation peut entraîner la perte ou la corruption de données.

Procédure

  1. Modifiez le volume local précédemment créé pour supprimer les disques indésirables.

    1. Modifiez la ressource du cluster :

      oc edit localvolume <name> -n openshift-local-storage
    2. Naviguez jusqu'aux lignes sous devicePaths, et supprimez tous les disques non désirés.
  2. Supprimer tous les volumes persistants créés.

    oc delete pv <pv-name> $ oc delete pv <pv-name>
  3. Supprimer tous les liens symboliques sur le nœud.

    Avertissement

    L'étape suivante consiste à accéder à un nœud en tant qu'utilisateur racine. La modification de l'état du nœud au-delà des étapes de cette procédure peut entraîner une instabilité de la grappe.

    1. Créer un pod de débogage sur le nœud :

      $ oc debug node/<node-name>
    2. Changez votre répertoire racine en /host:

      $ chroot /host
    3. Naviguez jusqu'au répertoire contenant les liens symboliques du volume local.

      $ cd /mnt/openshift-local-storage/<sc-name> 1
      1
      Le nom de la classe de stockage utilisée pour créer les volumes locaux.
    4. Supprimer le lien symbolique appartenant à l'appareil supprimé.

      $ rm <symlink>
4.12.1.9.2. Désinstallation de l'opérateur de stockage local

Pour désinstaller l'Opérateur de stockage local, vous devez supprimer l'Opérateur et toutes les ressources créées dans le projet openshift-local-storage.

Avertissement

Il n'est pas recommandé de désinstaller l'Opérateur de stockage local lorsque des PV de stockage local sont encore utilisés. Bien que les PV soient conservées après la suppression de l'opérateur, il peut y avoir un comportement indéterminé si l'opérateur est désinstallé et réinstallé sans supprimer les PV et les ressources de stockage local.

Conditions préalables

  • Accès à la console web d'OpenShift Container Platform.

Procédure

  1. Supprimez toutes les ressources de volume local installées dans le projet, telles que localvolume, localvolumeset, et localvolumediscovery:

    $ oc delete localvolume --all --all-namespaces
    $ oc delete localvolumeset --all --all-namespaces
    $ oc delete localvolumediscovery --all --all-namespaces
  2. Désinstallez l'Opérateur de stockage local à partir de la console web.

    1. Connectez-vous à la console web de OpenShift Container Platform.
    2. Naviguez jusqu'à OperatorsInstalled Operators.
    3. Tapez Local Storage dans le champ de filtre pour localiser l'opérateur de stockage local.
    4. Cliquez sur le menu Options kebab à la fin de l'opérateur de stockage local.
    5. Cliquez sur Uninstall Operator.
    6. Cliquez sur Remove dans la fenêtre qui s'affiche.
  3. Les PV créés par l'Opérateur de stockage local resteront dans le cluster jusqu'à ce qu'ils soient supprimés. Une fois que ces volumes ne sont plus utilisés, supprimez-les en exécutant la commande suivante :

    oc delete pv <pv-name> $ oc delete pv <pv-name>
  4. Supprimer le projet openshift-local-storage:

    $ oc delete project openshift-local-storage

4.12.2. Stockage persistant à l'aide de hostPath

Un volume hostPath dans un cluster OpenShift Container Platform monte un fichier ou un répertoire du système de fichiers du nœud hôte dans votre pod. La plupart des pods n'auront pas besoin d'un volume hostPath, mais il offre une option rapide pour les tests si une application le nécessite.

Important

L'administrateur du cluster doit configurer les pods pour qu'ils fonctionnent de manière privilégiée. Cela permet d'accéder aux pods du même nœud.

4.12.2.1. Vue d'ensemble

OpenShift Container Platform prend en charge le montage hostPath pour le développement et les tests sur un cluster à nœud unique.

Dans un cluster de production, vous n'utiliserez pas hostPath. Au lieu de cela, un administrateur de cluster provisionnerait une ressource réseau, telle qu'un volume GCE Persistent Disk, un partage NFS ou un volume Amazon EBS. Les ressources réseau prennent en charge l'utilisation des classes de stockage pour configurer le provisionnement dynamique.

Un volume hostPath doit être provisionné de manière statique.

Important

Ne montez pas sur la racine du conteneur, /, ou tout autre chemin identique sur l'hôte et le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié. Il est prudent de monter l'hôte en utilisant /host. L'exemple suivant montre que le répertoire / de l'hôte est monté dans le conteneur à l'adresse /host.

apiVersion: v1
kind: Pod
metadata:
  name: test-host-mount
spec:
  containers:
  - image: registry.access.redhat.com/ubi8/ubi
    name: test-container
    command: ['sh', '-c', 'sleep 3600']
    volumeMounts:
    - mountPath: /host
      name: host-slash
  volumes:
   - name: host-slash
     hostPath:
       path: /
       type: ''

4.12.2.2. Approvisionnement statique des volumes hostPath

Un pod qui utilise un volume hostPath doit être référencé par un provisionnement manuel (statique).

Procédure

  1. Définir le volume persistant (PV). Créer un fichier, pv.yaml, avec la définition de l'objet PersistentVolume:

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: task-pv-volume 1
        labels:
          type: local
      spec:
        storageClassName: manual 2
        capacity:
          storage: 5Gi
        accessModes:
          - ReadWriteOnce 3
        persistentVolumeReclaimPolicy: Retain
        hostPath:
          path: "/mnt/data" 4
    1
    Le nom du volume. Ce nom est la façon dont il est identifié par les réclamations de volumes persistants ou les pods.
    2
    Utilisé pour lier les demandes de réclamation de volume persistant à ce volume persistant.
    3
    Le volume peut être monté comme read-write par un seul nœud.
    4
    Le fichier de configuration spécifie que le volume se trouve à /mnt/data sur le nœud du cluster. Ne montez pas sur la racine du conteneur, /, ou tout autre chemin identique sur l'hôte et le conteneur. Cela peut corrompre votre système hôte. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.
  2. Créer le PV à partir du fichier :

    $ oc create -f pv.yaml
  3. Définir la revendication de volume persistant (PVC). Créez un fichier, pvc.yaml, avec la définition de l'objet PersistentVolumeClaim:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pvc-volume
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: manual
  4. Créer le PVC à partir du fichier :

    $ oc create -f pvc.yaml

4.12.2.3. Montage du partage hostPath dans un pod privilégié

Une fois que la demande de volume persistant a été créée, elle peut être utilisée à l'intérieur par une application. L'exemple suivant montre le montage de ce partage à l'intérieur d'un pod.

Conditions préalables

  • Il existe une revendication de volume persistant qui est mappée au partage hostPath sous-jacent.

Procédure

  • Créer un pod privilégié qui monte la revendication de volume persistant existante :

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name 1
    spec:
      containers:
        ...
        securityContext:
          privileged: true 2
        volumeMounts:
        - mountPath: /data 3
          name: hostpath-privileged
      ...
      securityContext: {}
      volumes:
        - name: hostpath-privileged
          persistentVolumeClaim:
            claimName: task-pvc-volume 4
    1
    Le nom du pod.
    2
    Le pod doit être exécuté en tant que privilégié pour accéder au stockage du nœud.
    3
    Le chemin pour monter le partage du chemin de l'hôte à l'intérieur du pod privilégié. Ne montez pas sur la racine du conteneur, /, ou tout autre 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 de l'hôte /dev/pts. Vous pouvez monter l'hôte en toute sécurité en utilisant /host.
    4
    Le nom de l'objet PersistentVolumeClaim qui a été créé précédemment.

4.12.3. Stockage persistant à l'aide du gestionnaire de volume logique

Logical volume manager storage (LVM Storage) utilise le pilote TopoLVM CSI pour provisionner dynamiquement le stockage local sur les clusters OpenShift à nœud unique.

LVM Storage crée des volumes à provisionnement fin à l'aide de Logical Volume Manager et fournit un provisionnement dynamique du stockage en bloc sur un cluster OpenShift à nœud unique aux ressources limitées.

4.12.3.1. Déployer le stockage LVM sur des clusters OpenShift à nœud unique

Vous pouvez déployer LVM Storage sur un nœud unique d'OpenShift bare-metal ou sur un cluster d'infrastructure fourni par l'utilisateur et le configurer pour provisionner dynamiquement le stockage pour vos charges de travail.

Le stockage LVM crée un groupe de volumes utilisant tous les disques inutilisés disponibles et crée un thin pool unique d'une taille correspondant à 90 % du groupe de volumes. Les 10 % restants du groupe de volumes sont laissés libres pour permettre la récupération des données en élargissant le thin pool en cas de besoin. Il se peut que vous deviez effectuer manuellement cette récupération.

Vous pouvez utiliser les réclamations de volumes persistants (PVC) et les instantanés de volumes fournis par le stockage LVM pour demander de l'espace de stockage et créer des instantanés de volumes.

LVM Storage configure une limite d'overprovisioning par défaut de 10 pour tirer parti de la fonction de thin-provisioning. La taille totale des volumes et des instantanés de volume qui peuvent être créés sur les clusters OpenShift à nœud unique est 10 fois supérieure à la taille du thin pool.

Vous pouvez déployer le stockage LVM sur des clusters OpenShift à nœud unique en utilisant l'une des méthodes suivantes :

  • Red Hat Advanced Cluster Management (RHACM)
  • Console Web de la plateforme OpenShift Container
4.12.3.1.1. Requirements

Avant de commencer à déployer le stockage LVM sur des clusters OpenShift à nœud unique, assurez-vous que les conditions suivantes sont remplies :

  • Vous avez installé Red Hat Advanced Cluster Management (RHACM) sur un cluster OpenShift Container Platform.
  • Chaque cluster OpenShift géré à un seul nœud dispose de disques dédiés qui sont utilisés pour provisionner le stockage.

Avant de déployer le stockage LVM sur des clusters OpenShift à nœud unique, soyez conscient des limitations suivantes :

  • Vous ne pouvez créer qu'une seule instance de la ressource personnalisée (CR) LVMCluster sur un cluster OpenShift Container Platform.
  • Vous ne pouvez effectuer qu'une seule entrée deviceClass dans le CR LVMCluster.
  • Lorsqu'un dispositif est intégré dans le CR LVMCluster, il ne peut plus être supprimé.
4.12.3.1.2. Limites

Pour le déploiement d'OpenShift à nœud unique, le stockage LVM présente les limitations suivantes :

  • La taille totale du stockage est limitée par la taille du thin pool sous-jacent du Logical Volume Manager (LVM) et par le facteur de surprovisionnement.
  • La taille du volume logique dépend de la taille de l'étendue physique (PE) et de l'étendue logique (LE).

    • Il est possible de définir la taille des PE et LE lors de la création des dispositifs physiques et logiques.
    • La taille par défaut des PE et LE est de 4 Mo.
    • Si la taille du PE est augmentée, la taille maximale du LVM est déterminée par les limites du noyau et votre espace disque.

Tableau 4.1. Limites de taille pour différentes architectures en utilisant la taille par défaut des PE et LE

ArchitectureRHEL 5RHEL 6RHEL 7RHEL 8

32 bits

16 TB

16 TB

-

-

64 bits

8 EB [1]

8 EB [1]

100 TB [2]

8 EB [1]

500 TB [2]

8 EB

  1. Taille théorique.
  2. Taille testée.
4.12.3.1.3. Installation du stockage LVM à l'aide de la console Web d'OpenShift Container Platform

Vous pouvez installer LVM Storage à l'aide de Red Hat OpenShift Container Platform OperatorHub.

Conditions préalables

  • Vous avez accès au cluster OpenShift à nœud unique.
  • Vous utilisez un compte disposant des autorisations d'installation cluster-admin et Operator.

Procédure

  1. Connectez-vous à la console Web de OpenShift Container Platform.
  2. Cliquez sur Operators → OperatorHub.
  3. Faites défiler ou tapez LVM Storage dans la boîte Filter by keyword pour trouver LVM Storage.
  4. Cliquez sur Install.
  5. Définissez les options suivantes sur la page Install Operator:

    1. Update Channel comme stable-4.12.
    2. Installation Mode comme A specific namespace on the cluster.
    3. Installed Namespace comme Operator recommended namespace openshift-storage. Si l'espace de noms openshift-storage n'existe pas, il est créé lors de l'installation de l'opérateur.
    4. Approval Strategy comme Automatic ou Manual.

      Si vous sélectionnez Automatic updates, l'Operator Lifecycle Manager (OLM) met automatiquement à jour l'instance en cours d'exécution de votre opérateur sans aucune intervention.

      Si vous sélectionnez Manual updates, l'OLM crée une demande de mise à jour. En tant qu'administrateur de cluster, vous devez ensuite approuver manuellement cette demande de mise à jour pour que l'opérateur passe à une version plus récente.

  6. Cliquez sur Install.

Verification steps

  • Vérifiez que LVM Storage affiche une coche verte, ce qui indique que l'installation a réussi.
4.12.3.1.4. Désinstallation du stockage LVM installé à l'aide de la console Web OpenShift

Vous pouvez désinstaller le stockage LVM à l'aide de la console Web de Red Hat OpenShift Container Platform.

Conditions préalables

  • Vous avez supprimé toutes les applications sur les clusters qui utilisent le stockage provisionné par LVM Storage.
  • Vous avez supprimé les réclamations de volumes persistants (PVC) et les volumes persistants (PV) provisionnés à l'aide de LVM Storage.
  • Vous avez supprimé tous les instantanés de volume fournis par LVM Storage.
  • Vous avez vérifié qu'il n'existe aucune ressource de volume logique en utilisant la commande oc get logicalvolume.
  • Vous avez accès au cluster OpenShift à nœud unique en utilisant un compte avec les permissions cluster-admin.

Procédure

  1. À partir de la page OperatorsInstalled Operators, faites défiler jusqu'à LVM Storage ou tapez LVM Storage dans Filter by name pour le trouver et cliquez dessus.
  2. Cliquez sur l'onglet LVMCluster.
  3. Dans la partie droite de la page LVMCluster, sélectionnez Delete LVMCluster dans le menu déroulant Actions.
  4. Cliquez sur l'onglet Details.
  5. Dans la partie droite de la page Operator Details, sélectionnez Uninstall Operator dans le menu déroulant Actions.
  6. Sélectionnez Remove. LVM Storage cesse de fonctionner et est complètement supprimé.
4.12.3.1.5. Installation du stockage LVM à l'aide de RHACM

Le stockage LVM est déployé sur des clusters OpenShift à nœud unique à l'aide de Red Hat Advanced Cluster Management (RHACM). Vous créez un objet Policy sur RHACM qui déploie et configure l'opérateur lorsqu'il est appliqué aux clusters gérés qui correspondent au sélecteur spécifié dans la ressource PlacementRule. La politique est également appliquée aux clusters importés ultérieurement et qui satisfont à la règle de placement.

Conditions préalables

  • Accès au cluster RHACM à l'aide d'un compte disposant des autorisations d'installation cluster-admin et Operator.
  • Disques dédiés sur chaque cluster OpenShift à nœud unique à utiliser par le stockage LVM.
  • Le cluster OpenShift à nœud unique doit être géré par RHACM, soit importé, soit créé.

Procédure

  1. Connectez-vous au CLI RHACM en utilisant vos identifiants OpenShift Container Platform.
  2. Créez un espace de noms dans lequel vous créerez des politiques.

    # oc create ns lvms-policy-ns
  3. Pour créer une politique, enregistrez le fichier YAML suivant dans un fichier portant un nom tel que policy-lvms-operator.yaml:

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-install-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector: 1
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-install-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: install-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: install-lvms
    spec:
      disabled: false
      remediationAction: enforce
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: install-lvms
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition:
                apiVersion: v1
                kind: Namespace
                metadata:
                  labels:
                    openshift.io/cluster-monitoring: "true"
                    pod-security.kubernetes.io/enforce: privileged
                    pod-security.kubernetes.io/audit: privileged
                    pod-security.kubernetes.io/warn: privileged
                  name: openshift-storage
            - complianceType: musthave
              objectDefinition:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: musthave
              objectDefinition:
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms
                  namespace: openshift-storage
                spec:
                  installPlanApproval: Automatic
                  name: lvms-operator
                  source: redhat-operators
                  sourceNamespace: openshift-marketplace
            remediationAction: enforce
            severity: low
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: lvms
          spec:
            object-templates:
               - complianceType: musthave
                 objectDefinition:
                   apiVersion: lvm.topolvm.io/v1alpha1
                   kind: LVMCluster
                   metadata:
                     name: my-lvmcluster
                     namespace: openshift-storage
                   spec:
                     storage:
                       deviceClasses:
                       - name: vg1
                         deviceSelector: 2
                           paths:
                           - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
                           - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
                         thinPoolConfig:
                           name: thin-pool-1
                           sizePercent: 90
                           overprovisionRatio: 10
                         nodeSelector: 3
                           nodeSelectorTerms:
                           - matchExpressions:
                               - key: app
                                 operator: In
                                 values:
                                 - test1
            remediationAction: enforce
            severity: low
    1
    Remplacez la clé et la valeur dans PlacementRule.spec.clusterSelector pour correspondre aux étiquettes définies sur les clusters OpenShift à nœud unique sur lesquels vous souhaitez installer LVM Storage.
    2
    Pour contrôler ou restreindre le groupe de volumes à vos disques préférés, vous pouvez spécifier manuellement les chemins d'accès locaux des disques dans la section deviceSelector du fichier YAML LVMCluster.
    3
    Pour ajouter un filtre de nœuds, qui est un sous-ensemble de nœuds de travail supplémentaires, spécifiez le filtre requis dans la section nodeSelector. LVM Storage détecte et utilise les nœuds de travail supplémentaires lorsqu'ils apparaissent.
    Important

    Cette correspondance de filtre de nœud nodeSelector n'est pas la même que la correspondance d'étiquette de pod.

  4. Créez la politique dans l'espace de noms en exécutant la commande suivante :

    # oc create -f policy-lvms-operator.yaml -n lvms-policy-ns 1
    1
    L'adresse policy-lvms-operator.yaml est le nom du fichier dans lequel la politique est enregistrée.

    Cela crée un objet Policy, un objet PlacementRule et un objet PlacementBinding dans l'espace de noms lvms-policy-ns. La politique crée une ressource Namespace, OperatorGroup, Subscription, et LVMCluster sur les clusters qui correspondent à la règle de placement. Cela déploie l'Opérateur sur les clusters OpenShift à nœud unique qui correspondent aux critères de sélection et le configure pour mettre en place les ressources requises pour provisionner le stockage. L'opérateur utilise tous les disques spécifiés dans le CR LVMCluster. Si aucun disque n'est spécifié, l'opérateur utilise tous les disques inutilisés sur le nœud unique OpenShift.

    Important

    Une fois qu'un dispositif a été ajouté au site LVMCluster, il ne peut plus être supprimé.

4.12.3.1.6. Désinstallation du stockage LVM installé à l'aide de RHACM

Pour désinstaller le stockage LVM que vous avez installé à l'aide de RHACM, vous devez supprimer la stratégie RHACM que vous avez créée pour déployer et configurer l'opérateur.

Lorsque vous supprimez la stratégie RHACM, les ressources créées par cette stratégie ne sont pas supprimées. Vous devez créer d'autres politiques pour supprimer les ressources.

Comme les ressources créées ne sont pas supprimées lorsque vous supprimez la politique, vous devez effectuer les étapes suivantes :

  1. Supprimez toutes les réclamations de volumes persistants (PVC) et les instantanés de volumes fournis par LVM Storage.
  2. Supprimez les ressources LVMCluster pour nettoyer les ressources du Logical Volume Manager créées sur les disques.
  3. Créer une politique supplémentaire pour désinstaller l'opérateur.

Conditions préalables

  • Assurez-vous que les éléments suivants sont supprimés avant de supprimer la politique :

    • Toutes les applications sur les clusters gérés qui utilisent le stockage provisionné par LVM Storage.
    • PVC et volumes persistants (PV) provisionnés à l'aide de LVM Storage.
    • Tous les instantanés de volume fournis par LVM Storage.
  • Assurez-vous que vous avez accès au cluster RHACM en utilisant un compte avec un rôle cluster-admin.

Procédure

  1. Dans le CLI OpenShift (oc), supprimez la politique RHACM que vous avez créée pour déployer et configurer le stockage LVM sur le cluster hub en utilisant la commande suivante :

    # oc delete -f policy-lvms-operator.yaml -n lvms-policy-ns 1
    1
    Le site policy-lvms-operator.yaml est le nom du fichier dans lequel la politique a été enregistrée.
  2. Pour créer une politique de suppression de la ressource LVMCluster, enregistrez le fichier YAML suivant dans un fichier portant un nom tel que lvms-remove-policy.yaml. Cela permet à l'opérateur de nettoyer toutes les ressources Logical Volume Manager qu'il a créées sur le cluster.

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-delete
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: enforce
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal
            spec:
              remediationAction: enforce 1
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage 2
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-delete
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-delete
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-delete
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-delete
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue
    1
    La valeur du paramètre policy-template spec.remediationAction est remplacée par la valeur du paramètre spec.remediationAction qui précède.
    2
    Ce champ namespace doit avoir la valeur openshift-storage.
  3. Définissez la valeur du champ PlacementRule.spec.clusterSelector pour sélectionner les clusters à partir desquels désinstaller le stockage LVM.
  4. Créez la politique en exécutant la commande suivante :

    # oc create -f lvms-remove-policy.yaml -n lvms-policy-ns
  5. Pour créer une politique permettant de vérifier si le CR LVMCluster a été supprimé, enregistrez le fichier YAML suivant dans un fichier portant un nom tel que check-lvms-remove-policy.yaml:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-inform
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: inform
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal-inform
            spec:
              remediationAction: inform 1
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage 2
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-check
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-check
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-inform
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-check
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue
    1
    La valeur du paramètre policy-template spec.remediationAction est remplacée par la valeur du paramètre spec.remediationAction qui précède.
    2
    Le champ namespace doit avoir la valeur openshift-storage.
  6. Créez la politique en exécutant la commande suivante :

    # oc create -f check-lvms-remove-policy.yaml -n lvms-policy-ns
  7. Vérifiez l'état de la politique en exécutant la commande suivante :

    # oc get policy -n lvms-policy-ns

    Exemple de sortie

    NAME                       REMEDIATION ACTION   COMPLIANCE STATE   AGE
    policy-lvmcluster-delete   enforce              Compliant          15m
    policy-lvmcluster-inform   inform               Compliant          15m

  8. Une fois que les deux politiques sont conformes, enregistrez le YAML suivant dans un fichier portant un nom tel que lvms-uninstall-policy.yaml pour créer une politique de désinstallation du stockage LVM.

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-uninstall-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-uninstall-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-uninstall-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: uninstall-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: uninstall-lvms
    spec:
      disabled: false
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: uninstall-lvms
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: v1
                kind: Namespace
                metadata:
                  name: openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms-operator
                  namespace: openshift-storage
            remediationAction: enforce
            severity: low
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: policy-remove-lvms-crds
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: logicalvolumes.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmclusters.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroupnodestatuses.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroups.lvm.topolvm.io
            remediationAction: enforce
            severity: high
  9. Créez la politique en exécutant la commande suivante :

    # oc create -f lvms-uninstall-policy.yaml -ns lvms-policy-ns

Ressources supplémentaires

4.12.3.2. Création d'un cluster de Logical Volume Manager

Vous pouvez créer un cluster de Logical Volume Manager après avoir installé LVM Storage.

OpenShift Container Platform prend en charge des nœuds de travail supplémentaires pour les clusters OpenShift à nœud unique sur une infrastructure bare-metal fournie par l'utilisateur. LVM Storage détecte et utilise les nœuds de travail supplémentaires lorsqu'ils apparaissent. Si vous avez besoin de définir un filtre de nœuds pour les nœuds de travail supplémentaires, vous pouvez utiliser la vue YAML lors de la création du cluster.

Important

Cette correspondance de filtre de nœud n'est pas la même que la correspondance d'étiquette de pod.

Conditions préalables

  • Vous avez installé LVM Storage à partir de l'OperatorHub.

Procédure

  1. Dans la console Web de OpenShift Container Platform, cliquez sur Operators → Installed Operators pour afficher tous les opérateurs installés.

    Assurez-vous que le site Project sélectionné est openshift-storage.

  2. Cliquez sur LVM Storage, puis sur Create LVMCluster sous LVMCluster.
  3. Dans la page Create LVMCluster, sélectionnez Form view ou YAML view.
  4. Entrez un nom pour le cluster.
  5. Cliquez sur Create.
  6. Facultatif : Pour ajouter un filtre de nœud, cliquez sur YAML view et spécifiez le filtre dans la section nodeSelector:

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
          - name: vg1
            thinPoolConfig:
              name: thin-pool-1
              sizePercent: 90
              overprovisionRatio: 10
            nodeSelector:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: app
                  operator: In
                  Values:
                    - test1
  7. Facultatif : Pour modifier le chemin d'accès local des disques, cliquez sur YAML view et indiquez le chemin d'accès dans la section deviceSelector:

    spec:
      storage:
        deviceClasses:
          - name: vg1
            deviceSelector:
              paths:
              - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
              - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            thinPoolConfig:
              name: thin-pool-1
              sizePercent: 90
              overprovisionRatio: 10

Étapes de la vérification

  1. Cliquez sur Storage → Storage Classes dans le volet gauche de la console Web OpenShift Container Platform.
  2. Vérifiez que la classe de stockage lvms-<device-class-name> est créée avec la création de LVMCluster. Par défaut, vg1 est la classe de stockage device-class-name.

4.12.3.3. Provisionnement du stockage à l'aide de LVM Storage

Vous pouvez provisionner des réclamations de volumes persistants (PVC) en utilisant la classe de stockage créée lors de l'installation de l'Opérateur. Vous pouvez provisionner des PVC de blocs et de fichiers, mais le stockage n'est alloué que lorsqu'un pod utilisant le PVC est créé.

Note

LVM Storage provisionne les PVC par unités de 1 GiB. L'espace de stockage demandé est arrondi au gigaoctet le plus proche.

Procédure

  1. Identifiez le site StorageClass qui est créé lorsque le stockage LVM est déployé.

    Le nom StorageClass est au format lvms-<device-class-name>. device-class-name est le nom de la classe d'appareil que vous avez fourni dans LVMCluster de Policy YAML. Par exemple, si le site deviceClass s'appelle vg1, le nom storageClass est lvms-vg1.

    Le site volumeBindingMode de la classe de stockage est défini sur WaitForFirstConsumer.

  2. Pour créer un PVC dans lequel l'application a besoin de stockage, enregistrez le fichier YAML suivant dans un fichier portant un nom tel que pvc.yaml.

    Exemple de YAML pour créer un PVC

    # block pvc
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-block-1
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Block
      resources:
        requests:
          storage: 10Gi
      storageClassName: lvms-vg1
    ---
    # file pvc
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-file-1
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 10Gi
      storageClassName: lvms-vg1

  3. Créez le PVC en exécutant la commande suivante :

    # oc create -f pvc.yaml -ns <application_namespace>

    Les PVC créés restent à l'état pending jusqu'à ce que vous déployiez les pods qui les utilisent.

4.12.3.4. Surveillance du stockage LVM

Lorsque le stockage LVM est installé à l'aide de la console Web OpenShift Container Platform, vous pouvez surveiller le cluster en utilisant le tableau de bord Block and File dans la console par défaut. Cependant, lorsque vous utilisez RHACM pour installer le stockage LVM, vous devez configurer RHACM Observability pour surveiller tous les clusters OpenShift à nœud unique à partir d'un seul endroit.

4.12.3.4.1. Metrics

Vous pouvez surveiller le stockage LVM en consultant les métriques exportées par l'opérateur sur les tableaux de bord RHACM et les alertes qui sont déclenchées.

  • Ajouter les métriques topolvm suivantes à la liste allow:

    topolvm_thinpool_data_percent
    topolvm_thinpool_metadata_percent
    topolvm_thinpool_size_bytes
Note

Les mesures sont mises à jour toutes les 10 minutes ou lorsqu'il y a un changement dans le thin pool, comme la création d'un nouveau volume logique.

4.12.3.4.2. Alertes

Lorsque le thin pool et le groupe de volumes sont remplis, les opérations ultérieures échouent et peuvent entraîner une perte de données. LVM Storage envoie les alertes suivantes sur l'utilisation du thin pool et du groupe de volumes lorsque l'utilisation dépasse une certaine valeur :

Alertes pour le cluster Logical Volume Manager dans RHACM

AlerteDescription

VolumeGroupUsageAtThresholdNearFull

Cette alerte est déclenchée lorsque l'utilisation du groupe de volumes et du thin pool dépasse 75 % sur les nœuds. La suppression de données ou l'extension du groupe de volumes est nécessaire.

VolumeGroupUsageAtThresholdCritical

Cette alerte est déclenchée lorsque l'utilisation du groupe de volumes et du thin pool dépasse 85 % sur les nœuds. VolumeGroup est saturé. La suppression de données ou l'extension du groupe de volumes est nécessaire.

ThinPoolDataUsageAtThresholdNearFull

Cette alerte est déclenchée lorsque l'utilisation des données du thin pool dans le groupe de volumes dépasse 75 % sur les nœuds. La suppression de données ou l'extension du thin pool est nécessaire.

ThinPoolDataUsageAtThresholdCritical

Cette alerte est déclenchée lorsque l'utilisation des données du thin pool dans le groupe de volumes dépasse 85 % sur les nœuds. La suppression de données ou l'extension du thin pool est nécessaire.

ThinPoolMetaDataUsageAtThresholdNearFull

Cette alerte est déclenchée lorsque l'utilisation des métadonnées du thin pool dans le groupe de volumes dépasse 75 % sur les nœuds. La suppression des données ou l'extension du thin pool est nécessaire.

ThinPoolMetaDataUsageAtThresholdCritical

Cette alerte est déclenchée lorsque l'utilisation des métadonnées du thin pool dans le groupe de volumes dépasse 85 % sur les nœuds. La suppression de données ou l'extension du thin pool est nécessaire.

4.12.3.5. Mise à l'échelle du stockage des clusters OpenShift à nœud unique

OpenShift Container Platform prend en charge des nœuds de travail supplémentaires pour les clusters OpenShift à nœud unique sur une infrastructure bare-metal fournie par l'utilisateur. LVM Storage détecte et utilise les nouveaux nœuds de travail supplémentaires lorsqu'ils apparaissent.

4.12.3.5.1. Augmenter le stockage en ajoutant de la capacité à votre cluster OpenShift à nœud unique

Pour faire évoluer la capacité de stockage de vos nœuds de travail configurés sur un cluster OpenShift à nœud unique, vous pouvez augmenter la capacité en ajoutant des disques.

Conditions préalables

  • Vous disposez de disques supplémentaires inutilisés sur chaque cluster OpenShift à nœud unique à utiliser par LVM Storage.

Procédure

  1. Connectez-vous à la console OpenShift Container Platform du cluster OpenShift à nœud unique.
  2. À partir de la page OperatorsInstalled Operators, cliquez sur LVM Storage Operator dans l'espace de noms openshift-storage.
  3. Cliquez sur l'onglet LVMCluster pour afficher la liste des LVMCluster CR créés sur le cluster.
  4. Sélectionnez Edit LVMCluster dans le menu déroulant Actions.
  5. Cliquez sur l'onglet YAML.
  6. Modifiez le fichier YAML de LVMCluster CR pour ajouter le nouveau chemin d'accès au périphérique dans la section deviceSelector:

    Note

    Si le champ deviceSelector n'est pas inclus lors de la création de LVMCluster, il n'est pas possible d'ajouter la section deviceSelector au CR. Vous devez supprimer le champ LVMCluster et créer un nouveau CR.

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
        - name: vg1
          deviceSelector:
            paths:
            - /dev/disk/by-path/pci-0000:87:00.0-nvme-1 1
            - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:89:00.0-nvme-1 2
          thinPoolConfig:
            name: thin-pool-1
            sizePercent: 90
            overprovisionRatio: 10
    1
    Le chemin peut être ajouté par nom (/dev/sdb) ou par chemin.
    2
    Un nouveau disque est ajouté.

Ressources supplémentaires

4.12.3.5.2. Augmenter le stockage en ajoutant de la capacité à votre cluster OpenShift à nœud unique à l'aide de RHACM

Vous pouvez faire évoluer la capacité de stockage de vos nœuds de travail configurés sur un cluster OpenShift à nœud unique à l'aide de RHACM.

Conditions préalables

  • Vous avez accès au cluster RHACM en utilisant un compte avec les privilèges cluster-admin.
  • Vous disposez de disques supplémentaires inutilisés sur chaque cluster OpenShift à nœud unique à utiliser par LVM Storage.

Procédure

  1. Connectez-vous au CLI RHACM en utilisant vos identifiants OpenShift Container Platform.
  2. Recherchez le disque que vous souhaitez ajouter. Le disque à ajouter doit correspondre au nom de périphérique et au chemin d'accès des disques existants.
  3. Pour ajouter de la capacité au cluster OpenShift à nœud unique, modifiez la section deviceSelector de la politique YAML existante, par exemple, policy-lvms-operator.yaml.

    Note

    Si le champ deviceSelector n'est pas inclus lors de la création de LVMCluster, il n'est pas possible d'ajouter la section deviceSelector au CR. Vous devez supprimer la section LVMCluster et la recréer à partir du nouveau CR.

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-install-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-install-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: install-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: install-lvms
    spec:
      disabled: false
      remediationAction: enforce
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: install-lvms
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition:
                apiVersion: v1
                kind: Namespace
                metadata:
                  labels:
                    openshift.io/cluster-monitoring: "true"
                    pod-security.kubernetes.io/enforce: privileged
                    pod-security.kubernetes.io/audit: privileged
                    pod-security.kubernetes.io/warn: privileged
                  name: openshift-storage
            - complianceType: musthave
              objectDefinition:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: musthave
              objectDefinition:
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms
                  namespace: openshift-storage
                spec:
                  installPlanApproval: Automatic
                  name: lvms-operator
                  source: redhat-operators
                  sourceNamespace: openshift-marketplace
            remediationAction: enforce
            severity: low
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: lvms
          spec:
            object-templates:
               - complianceType: musthave
                 objectDefinition:
                   apiVersion: lvm.topolvm.io/v1alpha1
                   kind: LVMCluster
                   metadata:
                     name: my-lvmcluster
                     namespace: openshift-storage
                   spec:
                     storage:
                       deviceClasses:
                       - name: vg1
                         deviceSelector:
                           paths:
                           - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
                           - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
                           - /dev/disk/by-path/pci-0000:89:00.0-nvme-1 # new disk is added
                         thinPoolConfig:
                           name: thin-pool-1
                           sizePercent: 90
                           overprovisionRatio: 10
                         nodeSelector:
                           nodeSelectorTerms:
                           - matchExpressions:
                               - key: app
                                 operator: In
                                 values:
                                 - test1
            remediationAction: enforce
            severity: low
  4. Modifiez la politique en exécutant la commande suivante :

    # oc edit -f policy-lvms-operator.yaml -ns lvms-policy-ns 1
    1
    policy-lvms-operator.yaml est le nom de la politique existante.

    Cette opération utilise le nouveau disque spécifié dans le CR LVMCluster pour approvisionner le stockage.

4.12.3.5.3. Expansion des PVC

Pour tirer parti du nouveau stockage après l'ajout de capacité supplémentaire, vous pouvez étendre les réclamations de volumes persistants (PVC) existantes avec le stockage LVM.

Conditions préalables

  • Le provisionnement dynamique est utilisé.
  • L'objet contrôlant StorageClass a pour valeur allowVolumeExpansion et pour valeur true.

Procédure

  1. Modifiez le champ .spec.resources.requests.storage de la ressource PVC souhaitée en fonction de la nouvelle taille en exécutant la commande suivante :

    oc patch <pvc_name> -n <application_namespace> -p '{ "spec" : { \N- "resources\N" : { \N- "requests\N" : { \N- "storage\N" : \N- "<desired_size>\N" }}}}'
  2. Surveillez le champ status.conditions du PVC pour voir si le redimensionnement est terminé. OpenShift Container Platform ajoute la condition Resizing au PVC pendant l'expansion, qui est supprimée une fois l'expansion terminée.

4.12.3.6. Mise à jour du stockage LVM sur les clusters OpenShift à nœud unique

Actuellement, il n'est pas possible de mettre à niveau OpenShift Data Foundation Logical Volume Manager Operator 4.11 vers LVM Storage 4.12 sur les clusters OpenShift à nœud unique.

Important

Les données ne seront pas conservées pendant ce processus.

Procédure

  1. Sauvegardez toutes les données que vous souhaitez conserver sur les réclamations de volumes persistants (PVC).
  2. Supprimer tous les PVC provisionnés par l'opérateur du gestionnaire de volume logique d'OpenShift Data Foundation et leurs pods.
  3. Réinstaller le stockage LVM sur OpenShift Container Platform 4.12.
  4. Recréer les charges de travail.
  5. Copiez les données de sauvegarde sur les PVC créés après la mise à niveau vers la version 4.12.

4.12.3.7. Instantanés de volume pour OpenShift à nœud unique

Vous pouvez prendre des instantanés de volumes persistants (PV) provisionnés par le stockage LVM. Vous pouvez également créer des instantanés de volume des volumes clonés. Les instantanés de volume vous permettent d'effectuer les opérations suivantes :

  • Sauvegardez les données de votre application.

    Important

    Les instantanés de volume sont situés sur les mêmes périphériques que les données d'origine. Pour utiliser les instantanés de volume comme sauvegardes, vous devez déplacer les instantanés vers un emplacement sécurisé. Vous pouvez utiliser les solutions de sauvegarde et de restauration d'OpenShift API for Data Protection.

  • Revenir à l'état dans lequel l'instantané du volume a été pris.

Ressources supplémentaires

4.12.3.7.1. Création d'instantanés de volume dans OpenShift à nœud unique

Vous pouvez créer des instantanés de volume en fonction de la capacité disponible du thin pool et des limites de surprovisionnement. LVM Storage crée un site VolumeSnapshotClass avec le nom lvms-<deviceclass-name>.

Conditions préalables

  • Vous vous êtes assuré que la revendication de volume persistant (PVC) est dans l'état Bound. Cela est nécessaire pour obtenir un instantané cohérent.
  • Vous avez arrêté toutes les entrées/sorties vers le PVC avant de prendre l'instantané.

Procédure

  1. Connectez-vous à l'OpenShift à nœud unique pour lequel vous devez exécuter la commande oc.
  2. Enregistrez le fichier YAML suivant dans un fichier portant un nom tel que lvms-vol-snapshot.yaml.

    Exemple de YAML pour créer un instantané de volume

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
        name: lvm-block-1-snap
    spec:
        volumeSnapshotClassName: lvms-vg1
        source:
            persistentVolumeClaimName: lvm-block-1

  3. Créez l'instantané en exécutant la commande suivante dans le même espace de noms que le PVC :

    # oc create -f lvms-vol-snapshot.yaml

Une copie en lecture seule du PVC est créée sous la forme d'un instantané de volume.

4.12.3.7.2. Restauration d'instantanés de volumes dans OpenShift à nœud unique

Lorsque vous restaurez un instantané de volume, une nouvelle revendication de volume persistante (PVC) est créée. Le PVC restauré est indépendant de l'instantané de volume et du PVC source.

Conditions préalables

  • La classe de stockage doit être la même que celle du PVC source.
  • La taille du PVC demandé doit être la même que celle du volume source de l'instantané.

    Important

    Un instantané doit être restauré sur un PVC de la même taille que le volume source de l'instantané. Si un PVC plus grand est nécessaire, vous pouvez redimensionner le PVC après la restauration réussie de l'instantané.

Procédure

  1. Identifiez le nom de la classe de stockage du PVC source et le nom de l'instantané du volume.
  2. Enregistrez le fichier YAML suivant dans un fichier portant un nom tel que lvms-vol-restore.yaml pour restaurer l'instantané.

    Exemple YAML pour restaurer un PVC.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-block-1-restore
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi
      storageClassName: lvms-vg1
      dataSource:
        name: lvm-block-1-snap
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io

  3. Créez la politique en exécutant la commande suivante dans le même espace de noms que l'instantané :

    # oc create -f lvms-vol-restore.yaml
4.12.3.7.3. Suppression d'instantanés de volumes dans OpenShift à nœud unique

Vous pouvez supprimer les ressources des instantanés de volume et les réclamations de volumes persistants (PVC).

Procédure

  1. Supprimez la ressource de cliché de volume en exécutant la commande suivante :

    # oc delete volumesnapshot <volume_snapshot_name> -n <namespace>
    Note

    Lorsque vous supprimez une revendication de volume persistant (PVC), les instantanés du PVC ne sont pas supprimés.

  2. Pour supprimer l'instantané de volume restauré, supprimez le PVC créé pour restaurer l'instantané de volume en exécutant la commande suivante :

    # oc delete pvc <pvc_name> -n <namespace>

4.12.3.8. Clonage de volume pour OpenShift à nœud unique

Un clone est une copie d'un volume de stockage existant qui peut être utilisé comme n'importe quel volume standard.

4.12.3.8.1. Créer des clones de volume dans OpenShift à nœud unique

Vous créez un clone d'un volume pour faire une copie ponctuelle des données. Une revendication de volume persistant (PVC) ne peut pas être clonée avec une taille différente.

Important

Le PVC cloné a un accès en écriture.

Conditions préalables

  • Vous vous êtes assuré que le PVC est dans l'état Bound. Cela est nécessaire pour obtenir un instantané cohérent.
  • Vous vous êtes assuré que le StorageClass est le même que celui du PVC source.

Procédure

  1. Identifier la classe de stockage du PVC source.
  2. Pour créer un clone de volume, enregistrez le fichier YAML suivant dans un fichier portant un nom tel que lvms-vol-clone.yaml:

    Exemple de YAML pour cloner un volume

    apiVersion: v1
    kind: PersistentVolumeClaim
    Metadata:
      name: lvm-block-1-clone
    Spec:
      storageClassName: lvms-vg1
      dataSource:
        name: lvm-block-1
        kind: PersistentVolumeClaim
      accessModes:
       - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi

  3. Créez la stratégie dans le même espace de noms que le PVC source en exécutant la commande suivante :

    # oc create -f lvms-vol-clone.yaml
4.12.3.8.2. Suppression des volumes clonés dans OpenShift à nœud unique

Vous pouvez supprimer les volumes clonés.

Procédure

  • Pour supprimer le volume cloné, supprimez le PVC cloné en exécutant la commande suivante :

    # oc delete pvc <clone_pvc_name> -n <namespace>

4.12.3.9. Téléchargement de fichiers journaux et d'informations de diagnostic à l'aide de la collecte obligatoire

Lorsque LVM Storage n'est pas en mesure de résoudre automatiquement un problème, utilisez l'outil must-gather pour collecter les fichiers journaux et les informations de diagnostic afin que vous ou l'assistance Red Hat puissiez examiner le problème et déterminer une solution.

  • Exécutez la commande must-gather à partir du client connecté au cluster de stockage LVM en exécutant la commande suivante :

    oc adm must-gather --image=registry.redhat.io/lvms4/lvms-must-gather-rhel8:v4.12 --dest-dir=<directory-name>

4.12.3.10. Fichier YAML de référence du stockage LVM

L'exemple de ressource personnalisée (CR) LVMCluster décrit tous les champs du fichier YAML.

Exemple LVMCluster CR

apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: my-lvmcluster
spec:
  tolerations:
  - effect: NoSchedule
    key: xyz
    operator: Equal
    value: "true"
  storage:
    deviceClasses: 1
    - name: vg1  2
      nodeSelector: 3
        nodeSelectorTerms: 4
        - matchExpressions:
          - key: mykey
            operator: In
            values:
            - ssd
      deviceSelector: 5
        paths:
        - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
      thinPoolConfig: 6
        name: thin-pool-1 7
        sizePercent: 90 8
        overprovisionRatio: 10 9
status:
    deviceClassStatuses: 10
    - name: vg1
      nodeStatus: 11
      - devices: 12
        - /dev/nvme0n1
        - /dev/nvme1n1
        - /dev/nvme2n1
        node: my-node.example.com 13
        status: Ready 14
    ready: true 15
    state: Ready 16

1
Les groupes de volumes LVM à créer sur le cluster. Actuellement, une seule adresse deviceClass est prise en charge.
2
Le nom du groupe de volumes LVM à créer sur les nœuds.
3
Les nœuds sur lesquels créer le groupe de volumes LVM. Si le champ est vide, tous les nœuds sont pris en compte.
4
Liste des exigences relatives aux sélecteurs de nœuds.
5
Liste des chemins d'accès aux périphériques utilisés pour créer le groupe de volumes LVM. Si ce champ est vide, tous les disques inutilisés du nœud seront utilisés.
6
La configuration du thin pool LVM.
7
Le nom du thin pool à créer dans le groupe de volumes LVM.
8
Le pourcentage d'espace restant dans le groupe de volumes LVM qui doit être utilisé pour créer le thin pool.
9
Le facteur par lequel le stockage supplémentaire peut être provisionné par rapport au stockage disponible dans le thin pool.
10
Le statut du site deviceClass.
11
État du groupe de volumes LVM sur chaque nœud.
12
Liste des périphériques utilisés pour créer le groupe de volumes LVM.
13
Le nœud sur lequel le site deviceClass a été créé.
14
État du groupe de volumes LVM sur le nœud.
15
Ce champ est obsolète.
16
Le statut du site LVMCluster.

Chapitre 5. Utilisation de l'interface de stockage des conteneurs (CSI)

5.1. Configuration des volumes CSI

L'interface de stockage des conteneurs (CSI) permet à OpenShift Container Platform de consommer du stockage à partir de backends de stockage qui implémentent l'interface CSI en tant que stockage persistant.

Note

OpenShift Container Platform 4.12 supporte la version 1.6.0 de la spécification CSI.

5.1.1. Architecture CSI

Les pilotes CSI sont généralement livrés sous forme d'images de conteneurs. Ces conteneurs ne savent pas où s'exécute OpenShift Container Platform. Pour utiliser un back-end de stockage compatible CSI dans OpenShift Container Platform, l'administrateur du cluster doit déployer plusieurs composants qui servent de pont entre OpenShift Container Platform et le pilote de stockage.

Le diagramme suivant fournit une vue d'ensemble des composants fonctionnant dans les pods du cluster OpenShift Container Platform.

Architecture of CSI components

Il est possible d'exécuter plusieurs pilotes CSI pour différents backends de stockage. Chaque pilote a besoin de son propre déploiement de contrôleurs externes et d'un démon configuré avec le pilote et le registraire CSI.

5.1.1.1. Contrôleurs CSI externes

Les contrôleurs CSI externes sont des déploiements qui mettent en place un ou plusieurs pods avec cinq conteneurs :

  • Le conteneur snapshotter surveille les objets VolumeSnapshot et VolumeSnapshotContent et est responsable de la création et de la suppression de l'objet VolumeSnapshotContent.
  • Le conteneur resizer est un conteneur sidecar qui surveille les mises à jour de PersistentVolumeClaim et déclenche des opérations ControllerExpandVolume contre un point de terminaison CSI si vous demandez plus d'espace de stockage sur l'objet PersistentVolumeClaim.
  • Un conteneur d'attachement CSI externe traduit les appels attach et detach d'OpenShift Container Platform en appels ControllerPublish et ControllerUnpublish respectifs au pilote CSI.
  • Un conteneur externe de provisionneur CSI qui traduit les appels provision et delete d'OpenShift Container Platform en appels CreateVolume et DeleteVolume au pilote CSI.
  • Un conteneur de pilote CSI.

Les conteneurs CSI attacher et CSI provisioner communiquent avec le conteneur CSI driver en utilisant des UNIX Domain Sockets, garantissant qu'aucune communication CSI ne quitte le pod. Le pilote CSI n'est pas accessible depuis l'extérieur du module.

Note

Les opérations attach, detach, provision et delete nécessitent généralement que le pilote CSI utilise des informations d'identification pour le backend de stockage. Exécuter les pods du contrôleur CSI sur des nœuds d'infrastructure afin que les informations d'identification ne soient jamais divulguées aux processus utilisateurs, même en cas de violation catastrophique de la sécurité sur un nœud de calcul.

Note

L'attacheur externe doit également être exécuté pour les pilotes CSI qui ne prennent pas en charge les opérations attach ou detach de tiers. L'attacheur externe n'émettra aucune opération ControllerPublish ou ControllerUnpublish vers le pilote CSI. Cependant, il doit toujours être exécuté pour mettre en œuvre l'API d'attachement OpenShift Container Platform nécessaire.

5.1.1.2. Jeu de démons pour les pilotes CSI

Le jeu de démons du pilote CSI exécute un pod sur chaque nœud qui permet à OpenShift Container Platform de monter le stockage fourni par le pilote CSI sur le nœud et de l'utiliser dans les charges de travail utilisateur (pods) en tant que volumes persistants (PV). Le pod avec le pilote CSI installé contient les conteneurs suivants :

  • Un registraire de pilote CSI, qui enregistre le pilote CSI dans le service openshift-node fonctionnant sur le nœud. Le processus openshift-node exécuté sur le nœud se connecte alors directement au pilote CSI en utilisant la socket de domaine UNIX disponible sur le nœud.
  • Un conducteur de CSI.

Le pilote CSI déployé sur le nœud devrait avoir le moins d'informations d'identification possible pour le back-end de stockage. OpenShift Container Platform n'utilisera que l'ensemble des appels CSI du plugin du nœud, tels que NodePublish/NodeUnpublish et NodeStage/NodeUnstage, si ces appels sont mis en œuvre.

5.1.2. Pilotes CSI pris en charge par OpenShift Container Platform

OpenShift Container Platform installe certains pilotes CSI par défaut, offrant aux utilisateurs des options de stockage qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Pour créer des volumes persistants provisionnés par CSI qui se montent sur ces ressources de stockage prises en charge, OpenShift Container Platform installe par défaut l'opérateur de pilote CSI nécessaire, le pilote CSI et la classe de stockage requise. Pour plus de détails sur l'espace de noms par défaut de l'opérateur et du pilote, voir la documentation de l'opérateur de pilote CSI spécifique.

Le tableau suivant décrit les pilotes CSI installés avec OpenShift Container Platform et les fonctionnalités CSI qu'ils prennent en charge, telles que les instantanés de volume, le clonage et le redimensionnement.

Tableau 5.1. Pilotes et fonctionnalités CSI pris en charge dans OpenShift Container Platform

Pilote CSIInstantanés de volumes CSIClonage CSIRedimensionnement de l'ICS

Disque AliCloud

 ✅

 -

 ✅

AWS EBS

 ✅

 -

 ✅

AWS EFS

 -

 -

 -

Disque persistant (PD) de Google Compute Platform (GCP)

 ✅

 -

 ✅

Dépôt de fichiers GCP

 ✅

 -

 ✅

IBM VPC Block

 ✅[3]

 -

 ✅[3]

Disque Microsoft Azure

 ✅

 ✅

 ✅

Microsoft Azure Stack Hub

 ✅

 ✅

 ✅

Fichier Microsoft Azure

 -

 -

 ✅

OpenStack Cinder

 ✅

 ✅

 ✅

OpenShift Data Foundation

 ✅

 ✅

 ✅

OpenStack Manille

 ✅

 -

 -

Red Hat Virtualization (oVirt)

 -

 -

 ✅

VMware vSphere

 ✅[1]

 -

 ✅[2]

1.

  • Nécessite la version 7.0 Update 3 de vSphere ou une version ultérieure pour vCenter Server et ESXi.
  • Ne prend pas en charge les volumes de partage de fichiers.

2.

  • Extension de volume hors ligne : la version minimale requise de vSphere est 6.7 Update 3 P06
  • Extension de volume en ligne : la version minimale requise de vSphere est 7.0 Update 2.

3.

  • Ne prend pas en charge les instantanés hors ligne ou le redimensionnement. Le volume doit être attaché à un pod en cours d'exécution.
Important

Si votre pilote CSI ne figure pas dans le tableau précédent, vous devez suivre les instructions d'installation fournies par votre fournisseur de stockage CSI pour utiliser les fonctions CSI prises en charge.

5.1.3. Provisionnement dynamique

Le provisionnement dynamique du stockage persistant dépend des capacités du pilote CSI et du back-end de stockage sous-jacent. Le fournisseur du pilote CSI devrait documenter la façon de créer une classe de stockage dans OpenShift Container Platform et les paramètres disponibles pour la configuration.

La classe de stockage créée peut être configurée pour permettre le provisionnement dynamique.

Procédure

  • Créez une classe de stockage par défaut qui garantit que tous les PVC qui ne nécessitent pas de classe de stockage particulière sont approvisionnés par le pilote CSI installé.

    # oc create -f - << EOF
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class> 1
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: <provisioner-name> 2
    parameters:
    EOF
    1
    Le nom de la classe de stockage qui sera créée.
    2
    Le nom du pilote CSI qui a été installé.

5.1.4. Exemple d'utilisation du pilote CSI

L'exemple suivant installe un modèle MySQL par défaut sans aucune modification du modèle.

Conditions préalables

  • Le pilote CSI a été déployé.
  • Une classe de stockage a été créée pour le provisionnement dynamique.

Procédure

  • Créer le modèle MySQL :

    # oc new-app mysql-persistent

    Exemple de sortie

    --> Deploying template "openshift/mysql-persistent" to project default
    ...

    # oc get pvc

    Exemple de sortie

    NAME              STATUS    VOLUME                                   CAPACITY
    ACCESS MODES   STORAGECLASS   AGE
    mysql             Bound     kubernetes-dynamic-pv-3271ffcb4e1811e8   1Gi
    RWO            cinder         3s

5.1.5. Populateurs de volume

Les créateurs de volumes utilisent le champ datasource dans une demande de volume persistant (PVC) pour créer des volumes pré-remplis.

La population de volume est actuellement activée et prise en charge en tant que fonctionnalité d'aperçu technologique. Cependant, OpenShift Container Platform n'est pas livré avec des populateurs de volume.

Important

Les populateurs de volume sont une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Pour plus d'informations sur les populateurs de volume, voir Populateurs de volume Kubernetes.

5.2. Volumes éphémères en ligne CSI

Les volumes éphémères en ligne de l'interface de stockage des conteneurs (CSI) vous permettent de définir une spécification Pod qui crée des volumes éphémères en ligne lorsqu'un module est déployé et les supprime lorsqu'un module est détruit.

Cette fonction n'est disponible qu'avec les pilotes CSI (Container Storage Interface) pris en charge.

Important

CSI inline ephemeral volumes est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

5.2.1. Vue d'ensemble des volumes éphémères en ligne de CSI

Traditionnellement, les volumes soutenus par des pilotes CSI (Container Storage Interface) ne peuvent être utilisés qu'avec une combinaison d'objets PersistentVolume et PersistentVolumeClaim.

Cette fonctionnalité vous permet de spécifier les volumes CSI directement dans la spécification Pod, plutôt que dans un objet PersistentVolume. Les volumes en ligne sont éphémères et ne persistent pas lors des redémarrages de pods.

5.2.1.1. Limites du soutien

Par défaut, OpenShift Container Platform prend en charge les volumes éphémères en ligne CSI avec ces limitations :

  • La prise en charge n'est disponible que pour les pilotes CSI. In-tree et FlexVolumes ne sont pas pris en charge.
  • Le pilote CSI pour ressources partagées prend en charge les volumes éphémères en ligne en tant que fonctionnalité de l'aperçu technologique.
  • Les fournisseurs communautaires ou de stockage proposent d'autres pilotes CSI qui prennent en charge ces volumes. Suivez les instructions d'installation fournies par le fournisseur du pilote CSI.

Il se peut que les pilotes CSI n'aient pas implémenté la fonctionnalité de volume en ligne, y compris la capacité Ephemeral. Pour plus de détails, voir la documentation du pilote CSI.

Important

Shared Resource CSI Driver est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

5.2.2. Intégration d'un volume éphémère en ligne CSI dans la spécification du pod

Vous pouvez intégrer un volume éphémère en ligne CSI dans la spécification Pod dans OpenShift Container Platform. Au moment de l'exécution, les volumes en ligne imbriqués suivent le cycle de vie éphémère de leurs pods associés, de sorte que le pilote CSI gère toutes les phases des opérations de volume au fur et à mesure que les pods sont créés et détruits.

Procédure

  1. Créez la définition de l'objet Pod et enregistrez-la dans un fichier.
  2. Incorporer le volume éphémère en ligne de CSI dans le fichier.

    my-csi-app.yaml

    kind: Pod
    apiVersion: v1
    metadata:
      name: my-csi-app
    spec:
      containers:
        - name: my-frontend
          image: busybox
          volumeMounts:
          - mountPath: "/data"
            name: my-csi-inline-vol
          command: [ "sleep", "1000000" ]
      volumes: 1
        - name: my-csi-inline-vol
          csi:
            driver: inline.storage.kubernetes.io
            volumeAttributes:
              foo: bar

    1
    Le nom du volume utilisé par les pods.
  3. Créez le fichier de définition d'objet que vous avez enregistré à l'étape précédente.

    $ oc create -f my-csi-app.yaml

5.3. Ressources partagées Opérateur de conducteur CSI

En tant qu'administrateur de cluster, vous pouvez utiliser le pilote Shared Resource CSI dans OpenShift Container Platform pour provisionner des volumes éphémères en ligne qui contiennent le contenu des objets Secret ou ConfigMap. De cette façon, les pods et autres types Kubernetes qui exposent les montages de volumes, et les Builds OpenShift Container Platform peuvent utiliser en toute sécurité le contenu de ces objets à travers potentiellement n'importe quel espace de noms dans le cluster. Pour ce faire, il existe actuellement deux types de ressources partagées : une ressource personnalisée SharedSecret pour les objets Secret et une ressource personnalisée SharedConfigMap pour les objets ConfigMap.

Important

Le pilote CSI de ressources partagées est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Note

Pour activer le pilote CSI de ressources partagées, vous devez activer des fonctionnalités à l'aide de portes de fonctionnalités.

5.3.1. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.3.2. Partager des secrets entre espaces de noms

Pour partager un secret entre les espaces de noms d'un cluster, vous créez une instance de ressource personnalisée (CR) SharedSecret pour l'objet Secret que vous souhaitez partager.

Conditions préalables

Vous devez être autorisé à effectuer les actions suivantes :

  • Créer des instances de la définition de ressource personnalisée (CRD) sharedsecrets.sharedresource.openshift.io au niveau d'un cluster.
  • Gérer les rôles et les liaisons de rôles dans les espaces de noms du cluster afin de contrôler quels utilisateurs peuvent obtenir, répertorier et surveiller ces instances.
  • Gérez les rôles et les liaisons de rôles pour contrôler si le compte de service spécifié par un pod peut monter un volume CSI (Container Storage Interface) qui fait référence à l'instance SharedSecret CR que vous souhaitez utiliser.
  • Accédez aux espaces de noms qui contiennent les Secrets que vous souhaitez partager.

Procédure

  • Créez une instance SharedSecret CR pour l'objet Secret que vous souhaitez partager entre les espaces de noms du cluster :

    $ oc apply -f - <<EOF
    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedSecret
    metadata:
      name: my-share
    spec:
      secretRef:
        name: <name of secret>
        namespace: <namespace of secret>
    EOF

5.3.3. Utilisation d'une instance de SharedSecret dans un pod

Pour accéder à une instance de ressource personnalisée (CR) SharedSecret à partir d'un pod, vous accordez à un compte de service donné des autorisations RBAC pour utiliser cette instance de CR SharedSecret.

Conditions préalables

  • Vous avez créé une instance SharedSecret CR pour le secret que vous souhaitez partager entre les espaces de noms du cluster.
  • Vous devez être autorisé à effectuer les actions suivantes

    • Créer des configurations de construction et démarrer des constructions.
    • Découvrez quelles instances de SharedSecret CR sont disponibles en entrant la commande oc get sharedsecrets et en obtenant une liste non vide en retour.
    • Déterminez si les comptes de service builder dont vous disposez dans votre espace de noms sont autorisés à utiliser l'instance de CR SharedSecret donnée. En d'autres termes, vous pouvez exécuter oc adm policy who-can use <identifier of specific SharedSecret> pour voir si le compte de service builder de votre espace de noms est répertorié.
Note

Si aucune des deux dernières conditions préalables de cette liste n'est remplie, créez, ou demandez à quelqu'un de créer, le contrôle d'accès basé sur les rôles (RBAC) nécessaire pour découvrir les instances de SharedSecret CR et permettre aux comptes de service d'utiliser les instances de SharedSecret CR.

Procédure

  1. Accorder à un compte de service donné des autorisations RBAC pour utiliser l'instance SharedSecret CR dans son pod en utilisant oc apply avec un contenu YAML :

    Note

    Actuellement, kubectl et oc ont une logique de cas spécial codée en dur qui limite le verbe use aux rôles centrés sur la sécurité des pods. Par conséquent, vous ne pouvez pas utiliser oc create role …​ pour créer le rôle nécessaire à la consommation des instances CR SharedSecret.

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: shared-resource-my-share
      namespace: my-namespace
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - my-share
        verbs:
          - use
    EOF
  2. Créez le site RoleBinding associé au rôle en utilisant la commande oc:

    $ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
  3. Accéder à l'instance SharedSecret CR à partir d'un pod :

    $ oc apply -f - <<EOF
    kind: Pod
    apiVersion: v1
    metadata:
      name: my-app
      namespace: my-namespace
    spec:
      serviceAccountName: default
    
    # containers omitted …. Follow standard use of ‘volumeMounts’ for referencing your shared resource volume
    
        volumes:
        - name: my-csi-volume
          csi:
            readOnly: true
            driver: csi.sharedresource.openshift.io
            volumeAttributes:
              sharedSecret: my-share
    
    EOF

5.3.4. Partage d'une carte de configuration entre espaces de noms

Pour partager une carte de configuration entre les espaces de noms d'un cluster, vous créez une instance de ressource personnalisée (CR) SharedConfigMap pour cette carte de configuration.

Conditions préalables

Vous devez être autorisé à effectuer les actions suivantes :

  • Créer des instances de la définition de ressource personnalisée (CRD) sharedconfigmaps.sharedresource.openshift.io au niveau d'un cluster.
  • Gérer les rôles et les liaisons de rôles dans les espaces de noms du cluster afin de contrôler quels utilisateurs peuvent obtenir, répertorier et surveiller ces instances.
  • Gérez les rôles et les liaisons de rôles dans les espaces de noms du cluster pour contrôler quels comptes de service dans les pods qui montent votre volume CSI (Container Storage Interface) peuvent utiliser ces instances.
  • Accédez aux espaces de noms qui contiennent les Secrets que vous souhaitez partager.

Procédure

  1. Créez une instance CR SharedConfigMap pour la carte de configuration que vous souhaitez partager entre les espaces de noms du cluster :

    $ oc apply -f - <<EOF
    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedConfigMap
    metadata:
      name: my-share
    spec:
      configMapRef:
        name: <name of configmap>
        namespace: <namespace of configmap>
    EOF

5.3.5. Utilisation d'une instance de SharedConfigMap dans un pod

Prochaines étapes

Pour accéder à une instance de ressource personnalisée (CR) SharedConfigMap à partir d'un pod, vous accordez à un compte de service donné des autorisations RBAC pour utiliser cette instance de CR SharedConfigMap.

Conditions préalables

  • Vous avez créé une instance SharedConfigMap CR pour la carte de configuration que vous souhaitez partager entre les espaces de noms du cluster.
  • Vous devez être autorisé à effectuer les actions suivantes :

    • Créer des configurations de construction et démarrer des constructions.
    • Découvrez quelles instances de SharedConfigMap CR sont disponibles en entrant la commande oc get sharedconfigmaps et en obtenant une liste non vide en retour.
    • Déterminez si les comptes de service builder dont vous disposez dans votre espace de noms sont autorisés à utiliser l'instance de CR SharedSecret donnée. En d'autres termes, vous pouvez exécuter oc adm policy who-can use <identifier of specific SharedSecret> pour voir si le compte de service builder de votre espace de noms est répertorié.
Note

Si aucune des deux dernières conditions préalables de cette liste n'est remplie, créez, ou demandez à quelqu'un de créer, le contrôle d'accès basé sur les rôles (RBAC) nécessaire pour découvrir les instances de SharedConfigMap CR et permettre aux comptes de service d'utiliser les instances de SharedConfigMap CR.

Procédure

  1. Accorder à un compte de service donné des autorisations RBAC pour utiliser l'instance SharedConfigMap CR dans son pod en utilisant oc apply avec un contenu YAML.

    Note

    Actuellement, kubectl et oc ont une logique de cas spécial codée en dur qui limite le verbe use aux rôles centrés sur la sécurité des pods. Par conséquent, vous ne pouvez pas utiliser oc create role …​ pour créer le rôle nécessaire à la consommation d'une instance CR SharedConfigMap.

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: shared-resource-my-share
      namespace: my-namespace
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedconfigmaps
        resourceNames:
          - my-share
        verbs:
          - use
    EOF
  2. Créez le site RoleBinding associé au rôle en utilisant la commande oc:

    oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
  3. Accéder à l'instance SharedConfigMap CR à partir d'un pod :

    $ oc apply -f - <<EOF
    kind: Pod
    apiVersion: v1
    metadata:
      name: my-app
      namespace: my-namespace
    spec:
      serviceAccountName: default
    
    # containers omitted …. Follow standard use of ‘volumeMounts’ for referencing your shared resource volume
    
        volumes:
        - name: my-csi-volume
          csi:
            readOnly: true
            driver: csi.sharedresource.openshift.io
            volumeAttributes:
              sharedConfigMap: my-share
    
    EOF

5.3.6. Limitations supplémentaires du support pour le pilote CSI de ressources partagées

Le pilote CSI de ressources partagées présente les limitations suivantes :

  • Le pilote est soumis aux limitations des volumes éphémères en ligne de l'interface de stockage de conteneurs (CSI).
  • La valeur du champ readOnly doit être true. Sinon, lors du provisionnement du volume pendant le démarrage du pod, le pilote renvoie une erreur au kubelet. Cette limitation est conforme aux meilleures pratiques proposées pour le pilote CSI Kubernetes en amont afin d'appliquer les étiquettes SELinux aux volumes associés.
  • Le pilote ignore le champ FSType car il ne prend en charge que les volumes tmpfs.
  • Le pilote ignore le champ NodePublishSecretRef. En revanche, il utilise SubjectAccessReviews avec le verbe use pour déterminer si un pod peut obtenir un volume contenant des instances de ressources personnalisées (CR) SharedSecret ou SharedConfigMap.

5.3.7. Détails supplémentaires concernant les VolumeAttributes sur les volumes de pods de ressources partagées

Les attributs suivants affectent les volumes de pods de ressources partagées de différentes manières :

  • L'attribut refreshResource dans les propriétés volumeAttributes.
  • L'attribut refreshResources dans la configuration du pilote CSI de ressources partagées.
  • Les attributs sharedSecret et sharedConfigMap dans les propriétés volumeAttributes.

5.3.7.1. L'attribut refreshResource

Le pilote CSI de ressources partagées respecte l'attribut refreshResource dans les propriétés volumeAttributes du volume. Cet attribut détermine si les mises à jour du contenu de l'objet sous-jacent Secret ou ConfigMap sont copiées sur le volume after. Le volume est initialement provisionné dans le cadre du démarrage du pod. La valeur par défaut de refreshResource est true, ce qui signifie que le contenu est mis à jour.

Important

Si la configuration du pilote CSI pour les ressources partagées a désactivé le rafraîchissement des instances de ressources personnalisées (CR) partagées SharedSecret et SharedConfigMap, l'attribut refreshResource dans les propriétés volumeAttribute n'a aucun effet. L'objectif de cet attribut est de désactiver le rafraîchissement pour des montages de volumes spécifiques lorsque le rafraîchissement est généralement autorisé.

5.3.7.2. L'attribut refreshResources

Vous pouvez utiliser un commutateur global pour activer ou désactiver le rafraîchissement des ressources partagées. Ce commutateur est l'attribut refreshResources dans la carte de configuration csi-driver-shared-resource-config pour le pilote CSI de ressources partagées, que vous pouvez trouver dans l'espace de noms openshift-cluster-csi-drivers. Si vous donnez à cet attribut refreshResources la valeur false, aucun des contenus liés aux objets Secret ou ConfigMap stockés dans le volume n'est mis à jour après le provisionnement initial du volume.

Important

L'utilisation de cette configuration du Shared Resource CSI Driver pour désactiver le rafraîchissement affecte tous les montages de volumes de la grappe qui utilisent le Shared Resource CSI Driver, indépendamment de l'attribut refreshResource dans les propriétés volumeAttributes de l'un de ces volumes.

5.3.7.3. Validation des volumeAttributes avant le provisionnement d'un volume de ressources partagées pour un pod

Dans le volumeAttributes d'un volume unique, vous devez définir un attribut sharedSecret ou sharedConfigMap à la valeur d'une instance SharedSecret ou SharedConfigMap CS. Sinon, lorsque le volume est provisionné pendant le démarrage du pod, une validation vérifie le volumeAttributes de ce volume et renvoie une erreur au kubelet dans les conditions suivantes :

  • Les attributs sharedSecret et sharedConfigMap ont tous deux des valeurs spécifiées.
  • Les attributs sharedSecret et sharedConfigMap n'ont pas de valeurs spécifiées.
  • La valeur de l'attribut sharedSecret ou sharedConfigMap ne correspond pas au nom d'une instance CR SharedSecret ou SharedConfigMap sur le cluster.

5.3.8. Intégration entre les ressources partagées, Insights Operator et OpenShift Container Platform Builds

L'intégration entre les ressources partagées, Insights Operator et OpenShift Container Platform Builds facilite l'utilisation des abonnements Red Hat (droits RHEL) dans OpenShift Container Platform Builds.

Auparavant, dans OpenShift Container Platform 4.9.x et les versions antérieures, vous deviez importer manuellement vos informations d'identification et les copier dans chaque projet ou espace de noms où vous exécutiez des builds.

Désormais, dans OpenShift Container Platform 4.10 et les versions ultérieures, les Builds OpenShift Container Platform peuvent utiliser les abonnements Red Hat (droits RHEL) en référençant les ressources partagées et la fonction d'accès simple au contenu fournie par Insights Operator :

  • La fonction d'accès simple au contenu importe vos identifiants d'abonnement dans un objet Secret bien connu. Voir les liens dans la section suivante "Ressources supplémentaires".
  • L'administrateur du cluster crée une instance de ressource personnalisée (CR) SharedSecret autour de cet objet Secret et accorde des autorisations à des projets ou espaces de noms particuliers. En particulier, l'administrateur du cluster donne au compte de service builder la permission d'utiliser cette instance CR SharedSecret.
  • Les constructions qui s'exécutent dans ces projets ou espaces de noms peuvent monter un volume CSI qui fait référence à l'instance SharedSecret CR et à son contenu RHEL.

5.4. Instantanés de volumes CSI

Ce document décrit comment utiliser les instantanés de volume avec les pilotes CSI (Container Storage Interface) pris en charge pour aider à protéger contre la perte de données dans OpenShift Container Platform. Il est conseillé de se familiariser avec les volumes persistants.

5.4.1. Vue d'ensemble des instantanés de volume CSI

Un site snapshot représente l'état d'un volume de stockage dans un cluster à un moment donné. Les instantanés de volume peuvent être utilisés pour approvisionner un nouveau volume.

OpenShift Container Platform prend en charge par défaut les instantanés de volume de l'interface de stockage des conteneurs (CSI). Cependant, un pilote CSI spécifique est nécessaire.

Avec les instantanés de volume CSI, un administrateur de cluster peut :

  • Déployer un pilote CSI tiers qui prend en charge les instantanés.
  • Créer une nouvelle revendication de volume persistant (PVC) à partir d'un instantané de volume existant.
  • Prendre un instantané d'un PVC existant.
  • Restaurer un instantané en tant que PVC différent.
  • Supprimer un instantané de volume existant.

Avec les instantanés de volume CSI, un développeur d'application peut :

  • Utilisez les instantanés de volume comme éléments de base pour développer des solutions de sauvegarde de stockage au niveau de l'application ou de la grappe.
  • Revenir rapidement à une version de développement antérieure.
  • Utiliser le stockage plus efficacement en évitant de faire une copie complète à chaque fois.

Les points suivants doivent être pris en compte lors de l'utilisation d'instantanés de volume :

  • La prise en charge n'est disponible que pour les pilotes CSI. In-tree et FlexVolumes ne sont pas pris en charge.
  • OpenShift Container Platform n'est livré qu'avec certains pilotes CSI. Pour les pilotes CSI qui ne sont pas fournis par un opérateur de pilote OpenShift Container Platform, il est recommandé d'utiliser les pilotes CSI fournis par la communauté ou les fournisseurs de stockage. Suivez les instructions d'installation fournies par le fournisseur de pilotes CSI.
  • Les pilotes CSI peuvent ou non avoir implémenté la fonctionnalité d'instantané de volume. Les pilotes CSI qui prennent en charge les instantanés de volume utiliseront probablement le sidecar csi-external-snapshotter. Voir la documentation fournie par le pilote CSI pour plus de détails.

5.4.2. Contrôleur d'instantanés CSI et sidecar

OpenShift Container Platform fournit un contrôleur d'instantané qui est déployé dans le plan de contrôle. En outre, votre fournisseur de pilote CSI fournit le sidecar d'instantané CSI sous la forme d'un conteneur d'aide qui est installé lors de l'installation du pilote CSI.

Le contrôleur d'instantanés CSI et le sidecar fournissent des instantanés de volume par le biais de l'API OpenShift Container Platform. Ces composants externes s'exécutent dans le cluster.

Le contrôleur externe est déployé par le CSI Snapshot Controller Operator.

5.4.2.1. Contrôleur externe

Le contrôleur d'instantanés CSI lie les objets VolumeSnapshot et VolumeSnapshotContent. Le contrôleur gère le provisionnement dynamique en créant et en supprimant les objets VolumeSnapshotContent.

5.4.2.2. Sidecar externe

Le fournisseur de votre pilote CSI fournit le sidecar csi-external-snapshotter. Il s'agit d'un conteneur d'aide distinct qui est déployé avec le pilote CSI. Le sidecar gère les instantanés en déclenchant les opérations CreateSnapshot et DeleteSnapshot. Suivez les instructions d'installation fournies par votre fournisseur.

5.4.3. À propos de l'opérateur du contrôleur CSI Snapshot

Le CSI Snapshot Controller Operator s'exécute dans l'espace de noms openshift-cluster-storage-operator. Il est installé par défaut par l'opérateur de version de cluster (CVO) dans tous les clusters.

L'opérateur du contrôleur d'instantanés CSI installe le contrôleur d'instantanés CSI, qui s'exécute dans l'espace de noms openshift-cluster-storage-operator.

5.4.3.1. Instantané de volume CRDs

Lors de l'installation d'OpenShift Container Platform, l'opérateur du contrôleur d'instantanés CSI crée les définitions de ressources personnalisées (CRD) d'instantanés suivantes dans le groupe API snapshot.storage.k8s.io/v1:

VolumeSnapshotContent

Un instantané pris d'un volume dans le cluster qui a été provisionné par un administrateur de cluster.

Comme l'objet PersistentVolume, le CRD VolumeSnapshotContent est une ressource de cluster qui pointe vers un instantané réel dans le back-end de stockage.

Pour les instantanés préprovisionnés manuellement, un administrateur de cluster crée un certain nombre de CRD VolumeSnapshotContent. Ceux-ci contiennent les détails de l'instantané du volume réel dans le système de stockage.

Le CRD VolumeSnapshotContent n'est pas un espace de noms et doit être utilisé par un administrateur de cluster.

VolumeSnapshot

Comme l'objet PersistentVolumeClaim, le CRD VolumeSnapshot définit une demande d'instantané de la part du développeur. L'opérateur du contrôleur d'instantanés CSI exécute le contrôleur d'instantanés CSI, qui gère la liaison d'un CRD VolumeSnapshot avec un CRD VolumeSnapshotContent approprié. La liaison est une correspondance biunivoque.

Le CRD VolumeSnapshot est un espace de noms. Un développeur utilise le CRD comme une demande distincte pour un instantané.

VolumeSnapshotClass

Permet à un administrateur de cluster de spécifier différents attributs appartenant à un objet VolumeSnapshot. Ces attributs peuvent différer entre les instantanés pris du même volume sur le système de stockage, auquel cas ils ne seraient pas exprimés par l'utilisation de la même classe de stockage d'une revendication de volume persistant.

Le CRD VolumeSnapshotClass définit les paramètres que le sidecar csi-external-snapshotter doit utiliser lors de la création d'un instantané. Cela permet au back-end de stockage de savoir quel type d'instantané créer dynamiquement si plusieurs options sont prises en charge.

Les snapshots provisionnés dynamiquement utilisent le CRD VolumeSnapshotClass pour spécifier les paramètres spécifiques au fournisseur de stockage à utiliser lors de la création d'un snapshot.

Le CRD VolumeSnapshotContentClass n'a pas d'espace nominatif et est utilisé par un administrateur de cluster pour activer des options de configuration globales pour leur back-end de stockage.

5.4.4. Provisionnement d'instantanés de volumes

Il y a deux façons d'approvisionner les instantanés : dynamiquement et manuellement.

5.4.4.1. Provisionnement dynamique

Au lieu d'utiliser un instantané préexistant, vous pouvez demander qu'un instantané soit pris dynamiquement à partir d'une demande de volume persistant. Les paramètres sont spécifiés à l'aide d'un CRD VolumeSnapshotClass.

5.4.4.2. Approvisionnement manuel

En tant qu'administrateur de grappe, vous pouvez préapprovisionner manuellement un certain nombre d'objets VolumeSnapshotContent. Ces objets contiennent les détails de l'instantané du volume réel mis à la disposition des utilisateurs de la grappe.

5.4.5. Création d'un instantané de volume

Lorsque vous créez un objet VolumeSnapshot, OpenShift Container Platform crée un instantané de volume.

Conditions préalables

  • Connecté à un cluster OpenShift Container Platform en cours d'exécution.
  • Un PVC créé à l'aide d'un pilote CSI qui prend en charge les objets VolumeSnapshot.
  • Une classe de stockage pour provisionner le back-end de stockage.
  • Aucun pod n'utilise la revendication de volume persistant (PVC) dont vous souhaitez prendre un instantané.

    Note

    Ne créez pas d'instantané de volume d'un PVC si un pod l'utilise. Cela pourrait entraîner une corruption des données car le PVC n'est pas mis en pause (quiesced). Veillez à arrêter d'abord un module en cours d'exécution pour garantir la cohérence des instantanés.

Procédure

Pour créer dynamiquement un instantané de volume :

  1. Créer un fichier avec l'objet VolumeSnapshotClass décrit par le YAML suivant :

    volumesnapshotclass.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-hostpath-snap
    driver: hostpath.csi.k8s.io 1
    deletionPolicy: Delete

    1
    Le nom du pilote CSI utilisé pour créer des instantanés de cet objet VolumeSnapshotClass. Ce nom doit être identique au champ Provisioner de la classe de stockage responsable du PVC qui fait l'objet d'un instantané.
    Note

    Selon le pilote que vous avez utilisé pour configurer le stockage persistant, des paramètres supplémentaires peuvent être nécessaires. Vous pouvez également utiliser un objet VolumeSnapshotClass existant.

  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshotclass.yaml
  3. Créer un objet VolumeSnapshot:

    volumesnapshot-dynamic.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      volumeSnapshotClassName: csi-hostpath-snap 1
      source:
        persistentVolumeClaimName: myclaim 2

    1
    La demande d'une classe particulière par l'instantané de volume. Si le paramètre volumeSnapshotClassName est absent et qu'il existe une classe d'instantané de volume par défaut, un instantané est créé avec le nom de la classe d'instantané de volume par défaut. Mais si le champ est absent et qu'il n'existe pas de classe d'instantané de volume par défaut, aucun instantané n'est créé.
    2
    Le nom de l'objet PersistentVolumeClaim lié à un volume persistant. Il définit ce dont vous voulez créer un instantané. Requis pour le provisionnement dynamique d'un instantané.
  4. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshot-dynamic.yaml

Pour approvisionner manuellement un instantané :

  1. Fournissez une valeur pour le paramètre volumeSnapshotContentName en tant que source de l'instantané, en plus de définir la classe d'instantané de volume comme indiqué ci-dessus.

    volumesnapshot-manual.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-demo
    spec:
      source:
        volumeSnapshotContentName: mycontent 1

    1
    Le paramètre volumeSnapshotContentName est requis pour les instantanés préprovisionnés.
  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshot-manual.yaml

Vérification

Une fois que l'instantané a été créé dans le cluster, des détails supplémentaires sur l'instantané sont disponibles.

  1. Pour afficher les détails de l'instantané de volume qui a été créé, entrez la commande suivante :

    $ oc describe volumesnapshot mysnap

    L'exemple suivant affiche les détails de l'instantané du volume mysnap:

    volumesnapshot.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      source:
        persistentVolumeClaimName: myclaim
      volumeSnapshotClassName: csi-hostpath-snap
    status:
      boundVolumeSnapshotContentName: snapcontent-1af4989e-a365-4286-96f8-d5dcd65d78d6 1
      creationTime: "2020-01-29T12:24:30Z" 2
      readyToUse: true 3
      restoreSize: 500Mi

    1
    Le pointeur sur le contenu de stockage réel qui a été créé par le contrôleur.
    2
    L'heure à laquelle l'instantané a été créé. L'instantané contient le contenu du volume qui était disponible à l'heure indiquée.
    3
    Si la valeur est définie sur true, l'instantané peut être utilisé pour restaurer un nouveau PVC.
    Si la valeur est définie sur false, l'instantané a été créé. Toutefois, le back-end de stockage doit effectuer des tâches supplémentaires pour rendre l'instantané utilisable afin qu'il puisse être restauré en tant que nouveau volume. Par exemple, les données de l'Amazon Elastic Block Store peuvent être déplacées vers un autre emplacement moins coûteux, ce qui peut prendre plusieurs minutes.
  2. Pour vérifier que l'instantané de volume a été créé, entrez la commande suivante :

    $ oc get volumesnapshotcontent

    Le pointeur vers le contenu réel est affiché. Si le champ boundVolumeSnapshotContentName est rempli, un objet VolumeSnapshotContent existe et l'instantané a été créé.

  3. Pour vérifier que l'instantané est prêt, confirmez que l'objet VolumeSnapshot est readyToUse: true.

5.4.6. Suppression d'un instantané de volume

Vous pouvez configurer la façon dont OpenShift Container Platform supprime les instantanés de volume.

Procédure

  1. Spécifiez la politique de suppression dont vous avez besoin dans l'objet VolumeSnapshotClass, comme indiqué dans l'exemple suivant :

    volumesnapshotclass.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-hostpath-snap
    driver: hostpath.csi.k8s.io
    deletionPolicy: Delete 1

    1
    Lors de la suppression de l'instantané de volume, si la valeur Delete est définie, l'instantané sous-jacent est supprimé en même temps que l'objet VolumeSnapshotContent. Si la valeur Retain est définie, l'instantané sous-jacent et l'objet VolumeSnapshotContent sont conservés.
    Si la valeur Retain est définie et que l'objet VolumeSnapshot est supprimé sans supprimer l'objet VolumeSnapshotContent correspondant, le contenu est conservé. L'instantané lui-même est également conservé dans le back-end de stockage.
  2. Supprimez l'instantané du volume en entrant la commande suivante :

    oc delete volumesnapshot <volumesnapshot_name>

    Exemple de sortie

    volumesnapshot.snapshot.storage.k8s.io "mysnapshot" deleted

  3. Si la politique de suppression est définie sur Retain, supprimez le contenu de l'instantané du volume en entrant la commande suivante :

    oc delete volumesnapshotcontent <volumesnapshotcontent_name> $ oc delete volumesnapshotcontent <volumesnapshotcontent_name>
  4. Facultatif : si l'objet VolumeSnapshot n'est pas supprimé avec succès, entrez la commande suivante pour supprimer tous les finaliseurs de la ressource restante afin que l'opération de suppression puisse se poursuivre :

    Important

    Ne supprimez les finaliseurs que si vous êtes certain qu'il n'existe aucune référence existante à l'objet VolumeSnapshot, que ce soit à partir de réclamations de volume persistantes ou de contenus d'instantanés de volume. Même avec l'option --force, l'opération de suppression ne supprime pas les objets instantanés tant que tous les finaliseurs n'ont pas été supprimés.

    $ oc patch -n $PROJECT volumesnapshot/$NAME --type=merge -p '{"metadata": {"finalizers":null}}'

    Exemple de sortie

    volumesnapshotclass.snapshot.storage.k8s.io "csi-ocs-rbd-snapclass" deleted

    Les finaliseurs sont supprimés et l'instantané du volume est supprimé.

5.4.7. Restauration d'un instantané de volume

Le contenu du CRD VolumeSnapshot peut être utilisé pour restaurer le volume existant dans un état antérieur.

After your VolumeSnapshot CRD is bound and the readyToUse value is set to true, you can use that resource to provision a new volume that is pre-populated with data from the snapshot. .Prerequisites * Logged in to a running OpenShift Container Platform cluster. * A persistent volume claim (PVC) created using a Container Storage Interface (CSI) driver that supports volume snapshots. * A storage class to provision the storage back end. * A volume snapshot has been created and is ready to use.

Procédure

  1. Spécifiez une source de données VolumeSnapshot sur un PVC comme indiqué ci-dessous :

    pvc-restore.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: myclaim-restore
    spec:
      storageClassName: csi-hostpath-sc
      dataSource:
        name: mysnap 1
        kind: VolumeSnapshot 2
        apiGroup: snapshot.storage.k8s.io 3
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

    1
    Nom de l'objet VolumeSnapshot représentant l'instantané à utiliser comme source.
    2
    Doit être réglé sur la valeur VolumeSnapshot.
    3
    Doit être réglé sur la valeur snapshot.storage.k8s.io.
  2. Créez un PVC en entrant la commande suivante :

    $ oc create -f pvc-restore.yaml
  3. Vérifiez que le PVC restauré a été créé en entrant la commande suivante :

    $ oc get pvc

    Un nouveau PVC tel que myclaim-restore s'affiche.

5.5. Clonage du volume CSI

Le clonage de volume duplique un volume persistant existant pour aider à protéger contre la perte de données dans OpenShift Container Platform. Cette fonctionnalité n'est disponible qu'avec les pilotes CSI (Container Storage Interface) pris en charge. Vous devez vous familiariser avec les volumes persistants avant de provisionner un clone de volume CSI.

5.5.1. Vue d'ensemble du clonage de volumes CSI

Un clone de volume de l'interface de stockage de conteneurs (CSI) est un duplicata d'un volume persistant existant à un moment donné.

Le clonage de volume est similaire aux instantanés de volume, mais il est plus efficace. Par exemple, un administrateur de cluster peut dupliquer un volume de cluster en créant une autre instance du volume de cluster existant.

Le clonage crée une copie exacte du volume spécifié sur le périphérique dorsal, plutôt que de créer un nouveau volume vide. Après le provisionnement dynamique, vous pouvez utiliser un clone de volume comme vous le feriez avec n'importe quel volume standard.

Aucun nouvel objet API n'est nécessaire pour le clonage. Le champ dataSource existant dans l'objet PersistentVolumeClaim est étendu de manière à pouvoir accepter le nom d'un PersistentVolumeClaim existant dans le même espace de noms.

5.5.1.1. Limites du soutien

Par défaut, OpenShift Container Platform prend en charge le clonage de volume CSI avec ces limitations :

  • La revendication de volume persistant (PVC) de destination doit exister dans le même espace de noms que le PVC source.
  • Le clonage est pris en charge avec une classe de stockage différente.

    • Le volume de destination peut être le même pour une classe de stockage différente de celle de la source.
    • Vous pouvez utiliser la classe de stockage par défaut et omettre storageClassName dans le champ spec.
  • La prise en charge n'est disponible que pour les pilotes CSI. In-tree et FlexVolumes ne sont pas pris en charge.
  • Les pilotes CSI peuvent ne pas avoir implémenté la fonctionnalité de clonage de volume. Pour plus de détails, voir la documentation du pilote CSI.

5.5.2. Approvisionnement d'un clone de volume CSI

Lorsque vous créez un objet API de réclamation de volume persistant (PVC) cloné, vous déclenchez le provisionnement d'un clone de volume CSI. Le clone est pré-rempli avec le contenu d'un autre PVC, en respectant les mêmes règles que tout autre volume persistant. La seule exception est que vous devez ajouter une adresse dataSource qui fait référence à un PVC existant dans le même espace de noms.

Conditions préalables

  • Vous êtes connecté à un cluster OpenShift Container Platform en cours d'exécution.
  • Votre PVC est créé à l'aide d'un pilote CSI qui prend en charge le clonage de volume.
  • Votre back-end de stockage est configuré pour le provisionnement dynamique. La prise en charge du clonage n'est pas disponible pour les provisionneurs statiques.

Procédure

Pour cloner un PVC à partir d'un PVC existant :

  1. Créer et sauvegarder un fichier avec l'objet PersistentVolumeClaim décrit par le YAML suivant :

    pvc-clone.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-1-clone
      namespace: mynamespace
    spec:
      storageClassName: csi-cloning 1
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      dataSource:
        kind: PersistentVolumeClaim
        name: pvc-1

    1
    Le nom de la classe de stockage qui fournit le back-end de stockage. La classe de stockage par défaut peut être utilisée et storageClassName peut être omis dans la spécification.
  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en exécutant la commande suivante :

    $ oc create -f pvc-clone.yaml

    Un nouveau PVC pvc-1-clone est créé.

  3. Vérifiez que le clone de volume a été créé et qu'il est prêt en exécutant la commande suivante :

    $ oc get pvc pvc-1-clone

    Le site pvc-1-clone indique qu'il s'agit de Bound.

    Vous êtes maintenant prêt à utiliser le nouveau PVC cloné pour configurer un pod.

  4. Créer et enregistrer un fichier avec l'objet Pod décrit par le YAML. Par exemple :

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: myfrontend
          image: dockerfile/nginx
          volumeMounts:
          - mountPath: "/var/www/html"
            name: mypd
      volumes:
        - name: mypd
          persistentVolumeClaim:
            claimName: pvc-1-clone 1
    1
    Le PVC cloné créé lors de l'opération de clonage du volume CSI.

    L'objet Pod créé est maintenant prêt à consommer, cloner, snapshoter ou supprimer votre PVC cloné indépendamment de son PVC dataSource d'origine.

5.6. Migration automatique CSI

Les pilotes de stockage in-tree qui sont traditionnellement livrés avec OpenShift Container Platform sont dépréciés et remplacés par leurs pilotes équivalents Container Storage Interface (CSI). OpenShift Container Platform fournit une migration automatique pour certains plugins de volume in-tree pris en charge vers leurs pilotes CSI équivalents.

5.6.1. Vue d'ensemble

Les volumes qui sont provisionnés en utilisant des plugins de stockage dans l'arborescence, et qui sont pris en charge par cette fonctionnalité, sont migrés vers leurs pilotes homologues de l'interface de stockage de conteneur (CSI). Ce processus n'effectue aucune migration de données ; OpenShift Container Platform ne fait que traduire l'objet de volume persistant en mémoire. Par conséquent, l'objet de volume persistant traduit n'est pas stocké sur le disque, et son contenu n'est pas modifié.

Les pilotes d'arborescence à CSI suivants sont pris en charge :

Tableau 5.2. La fonction de migration automatique CSI prend en charge les pilotes in-tree/CSI

Conducteurs In-tree/CSINiveau de soutienLa migration automatique du CSI est-elle activée automatiquement ?
  • Disque Azure
  • OpenStack Cinder
  • Amazon Web Services (AWS) Elastic Block Storage (EBS)
  • Disque persistant de Google Compute Engine (GCP PD)

Généralement disponible (GA)

 Yes. For more information, see "Automatic migration of in-tree volumes to CSI".

  • Fichier Azure
  • VMware vSphere

Avant-première technologique (APT)

 No. To enable, see "Manually enabling CSI automatic migration".

La migration automatique de l'ICS devrait être transparente. Cette fonctionnalité ne modifie pas la façon dont vous utilisez tous les objets API existants : par exemple, PersistentVolumes, PersistentVolumeClaims, et StorageClasses.

L'activation de la migration automatique CSI pour les volumes persistants (PV) ou les réclamations de volumes persistants (PVC) dans l'arborescence ne permet pas d'activer de nouvelles fonctionnalités du pilote CSI, telles que les instantanés ou l'expansion, si le plugin de stockage dans l'arborescence d'origine ne les prenait pas en charge.

5.6.2. Migration automatique des volumes dans l'arborescence vers le CSI

OpenShift Container Platform prend en charge la migration automatique et transparente des types de volumes in-tree suivants vers leur contrepartie de pilote Container Storage Interface (CSI) :

  • Disque Azure
  • OpenStack Cinder
  • Amazon Web Services (AWS) Elastic Block Storage (EBS)
  • Disque persistant de Google Compute Engine (GCP PD)

La migration CSI pour ces types de volumes est considérée comme généralement disponible (GA) et ne nécessite aucune intervention manuelle.

Pour les nouvelles installations d'OpenShift Container Platform 4.11 et suivantes, la classe de stockage par défaut est la classe de stockage CSI. Tous les volumes provisionnés à l'aide de cette classe de stockage sont des volumes persistants (PV) CSI.

Pour les clusters mis à niveau de la version 4.10 ou antérieure vers la version 4.11 ou ultérieure, la classe de stockage CSI est créée et devient la classe par défaut si aucune classe de stockage par défaut n'a été définie avant la mise à niveau. Dans le cas très improbable où il existe une classe de stockage portant le même nom, la classe de stockage existante reste inchangée. Toutes les classes de stockage existantes dans l'arborescence sont conservées et peuvent être nécessaires pour que certaines fonctionnalités, telles que l'extension de volume, fonctionnent pour les PV existants dans l'arborescence. Bien que le référencement de la classe de stockage au plugin de stockage dans l'arborescence continue de fonctionner, nous vous recommandons de remplacer la classe de stockage par défaut par la classe de stockage CSI.

5.6.3. Activation manuelle de la migration automatique du CSI

Si vous souhaitez tester la migration Container Storage Interface (CSI) dans des clusters OpenShift Container Platform de développement ou de staging, vous devez activer manuellement la migration in-tree to CSI pour les types de volumes in-tree suivants :

  • Disque VMware vSphere
  • Fichier Azure
Important

La migration automatique CSI pour les plugins de volume dans l'arborescence précédents et les paires de pilotes CSI est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Après la migration, la classe de stockage par défaut reste la classe de stockage dans l'arborescence.

La migration automatique CSI sera activée par défaut pour tous les plugins de stockage dans l'arborescence dans une prochaine version d'OpenShift Container Platform, il est donc fortement recommandé de la tester dès maintenant et de signaler tout problème.

Note

L'activation de la migration automatique CSI entraîne la vidange, puis le redémarrage de tous les nœuds du cluster dans l'ordre. Cela peut prendre un certain temps.

Procédure

  • Activer les portillons (voir Nodes → Working with clusters → Enabling features using feature gates).

    Important

    Après avoir activé des fonctionnalités de l'aperçu technologique à l'aide de portes de fonctionnalités, il est impossible de les désactiver. Par conséquent, les mises à niveau des clusters sont empêchées.

    L'exemple de configuration suivant active la migration automatique CSI pour tous les pilotes CSI pris en charge par cette fonctionnalité et qui sont actuellement en état d'aperçu technologique (TP) :

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 1
    ...
    1
    Permet la migration automatique pour Azure File et VMware vSphere.

    Vous pouvez spécifier la migration automatique CSI pour un pilote CSI sélectionné en définissant CustomNoUpgrade featureSet et pour featuregates l'une des valeurs suivantes :

    • CSIMigrationAzureFile
    • CSIMigrationvSphere

    L'exemple de configuration suivant permet la migration automatique vers le pilote vSphere CSI uniquement :

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: CustomNoUpgrade
      customNoUpgrade:
        enabled:
          - CSIMigrationvSphere 1
        ...
    1
    Active la migration automatique pour vSphere uniquement.

5.7. Opérateur du pilote AliCloud Disk CSI

5.7.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour Alibaba AliCloud Disk Storage.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage AliCloud Disk, OpenShift Container Platform installe l'opérateur AliCloud Disk CSI Driver et le pilote AliCloud Disk CSI, par défaut, dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site AliCloud Disk CSI Driver Operator fournit une classe de stockage (alicloud-disk) que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC). Le pilote AliCloud Disk CSI Driver Operator prend en charge l'approvisionnement dynamique en volume en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de clusters d'avoir à préprovisionner le stockage.
  • Le site AliCloud Disk CSI driver vous permet de créer et de monter des PV AliCloud Disk.

5.7.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Ressources supplémentaires

5.8. AWS Elastic Block Store CSI Driver Operator

5.8.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour AWS Elastic Block Store (EBS).

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsqu'on travaille avec un opérateur et un pilote d'interface de stockage de conteneurs (CSI).

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage AWS EBS, OpenShift Container Platform installe l'opérateur AWS EBS CSI Driver et le pilote AWS EBS CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site AWS EBS CSI Driver Operator fournit par défaut une StorageClass que vous pouvez utiliser pour créer des PVC. Vous avez également la possibilité de créer la classe de stockage AWS EBS, comme décrit dans la section Stockage persistant à l'aide d'AWS Elastic Block Store.
  • Le site AWS EBS CSI driver vous permet de créer et de monter des PV AWS EBS.
Note

Si vous avez installé l'opérateur et le pilote AWS EBS CSI sur un cluster OpenShift Container Platform 4.5, vous devez désinstaller l'opérateur et le pilote 4.5 avant de mettre à jour OpenShift Container Platform 4.12.

5.8.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage AWS EBS.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plug-ins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique vers le CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Pour plus d'informations sur le provisionnement dynamique des volumes persistants AWS EBS dans OpenShift Container Platform, voir Stockage persistant à l'aide d'AWS Elastic Block Store.

5.9. Opérateur du pilote CSI de AWS Elastic File Service

5.9.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour AWS Elastic File Service (EFS).

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Après avoir installé l'opérateur de pilote AWS EFS CSI, OpenShift Container Platform installe l'opérateur AWS EFS CSI et le pilote AWS EFS CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers. Cela permet à l'opérateur de pilote AWS EFS CSI de créer des PV provisionnées CSI qui se montent sur des actifs AWS EFS.

  • Le site AWS EFS CSI Driver Operator, une fois installé, ne crée pas par défaut de classe de stockage à utiliser pour créer des réclamations de volumes persistants (PVC). Toutefois, vous pouvez créer manuellement la classe de stockage AWS EFS StorageClass. L'AWS EFS CSI Driver Operator prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande. Les administrateurs de clusters n'ont donc plus besoin de préprovisionner le stockage.
  • Le site AWS EFS CSI driver vous permet de créer et de monter des PV AWS EFS.
Note

AWS EFS ne prend en charge que les volumes régionaux, et non les volumes zonaux.

5.9.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.9.3. Configuration de l'opérateur du pilote AWS EFS CSI

  1. Installez le pilote AWS EFS CSI Driver Operator.
  2. Installez le pilote AWS EFS CSI.

5.9.3.1. Installation de l'opérateur du pilote AWS EFS CSI

L'opérateur de pilote AWS EFS CSI n'est pas installé par défaut dans OpenShift Container Platform. Utilisez la procédure suivante pour installer et configurer le pilote AWS EFS CSI Driver Operator dans votre cluster.

Conditions préalables

  • Accès à la console web d'OpenShift Container Platform.

Procédure

Pour installer l'opérateur de pilote AWS EFS CSI à partir de la console web :

  1. Connectez-vous à la console web.
  2. Installez l'opérateur AWS EFS CSI :

    1. Cliquez sur OperatorsOperatorHub.
    2. Localisez l'opérateur AWS EFS CSI en tapant AWS EFS CSI dans la boîte de filtre.
    3. Cliquez sur le bouton AWS EFS CSI Driver Operator.

      Important

      Veillez à sélectionner AWS EFS CSI Driver Operator et non AWS EFS Operator. AWS EFS Operator est un opérateur communautaire et n'est pas pris en charge par Red Hat.

    4. Sur la page AWS EFS CSI Driver Operator, cliquez sur Install.
    5. Sur la page Install Operator, assurez-vous que

      • All namespaces on the cluster (default) est sélectionné.
      • Installed Namespace est fixé à openshift-cluster-csi-drivers.
    6. Cliquez sur Install.

      Une fois l'installation terminée, l'opérateur AWS EFS CSI est répertorié dans la section Installed Operators de la console Web.

Prochaines étapes

  • Si vous utilisez AWS EFS avec AWS Secure Token Service (STS), vous devez configurer le pilote AWS EFS CSI avec STS. Pour plus d'informations, voir Configuration du pilote AWS EFS CSI avec STS.

5.9.3.2. Configuration d'AWS EFS CSI Driver Operator avec Security Token Service

Cette procédure explique comment configurer l'opérateur du pilote AWS EFS CSI avec OpenShift Container Platform sur AWS Security Token Service (STS).

Effectuez cette procédure avant d'avoir installé l'opérateur AWS EFS CSI, mais pas encore le pilote AWS EFS CSI dans le cadre de la procédure Installing the AWS EFS CSI Driver Operator.

Important

Si vous effectuez cette procédure après avoir installé le pilote et créé des volumes, vos volumes ne pourront pas être montés dans les pods.

Conditions préalables

  • Vous avez accès au cluster en tant qu'utilisateur ayant le rôle de cluster-admin.
  • Informations d'identification du compte AWS
  • Vous avez installé l'opérateur AWS EFS CSI.

Procédure

Pour configurer l'opérateur de pilote AWS EFS CSI avec STS :

  1. Extrayez le binaire de l'utilitaire CCO (ccoctl) de l'image de version d'OpenShift Container Platform, que vous avez utilisée pour installer le cluster avec STS. Pour plus d'informations, voir "Configuring the Cloud Credential Operator utility".
  2. Créez et enregistrez un fichier YAML EFS CredentialsRequest, comme dans l'exemple suivant, et placez-le dans le répertoire credrequests:

    Exemple :

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: openshift-aws-efs-csi-driver
      namespace: openshift-cloud-credential-operator
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AWSProviderSpec
        statementEntries:
        - action:
          - elasticfilesystem:*
          effect: Allow
          resource: '*'
      secretRef:
        name: aws-efs-cloud-credentials
        namespace: openshift-cluster-csi-drivers
      serviceAccountNames:
      - aws-efs-csi-driver-operator
      - aws-efs-csi-driver-controller-sa

  3. Exécutez l'outil ccoctl pour générer un nouveau rôle IAM dans AWS et créez un fichier YAML pour ce rôle dans le système de fichiers local (<path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml).

    $ ccoctl aws create-iam-roles --name=<name> --region=<aws_region> --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests --identity-provider-arn=arn :aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
    • name=<name> est le nom utilisé pour étiqueter toutes les ressources du nuage créées pour le suivi.
    • region=<aws_region> est la région AWS où les ressources cloud sont créées.
    • dir=<path_to_directory_with_list_of_credentials_requests>/credrequests est le répertoire contenant le fichier EFS CredentialsRequest de l'étape précédente.
    • <aws_account_id> est l'identifiant du compte AWS.

      Exemple :

      $ ccoctl aws create-iam-roles --name my-aws-efs --credentials-requests-dir credrequests --identity-provider-arn arn:aws:iam::123456789012:oidc-provider/my-aws-efs-oidc.s3.us-east-2.amazonaws.com

      Exemple de sortie

      2022/03/21 06:24:44 Role arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud- created
      2022/03/21 06:24:44 Saved credentials configuration to: /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
      2022/03/21 06:24:45 Updated Role policy for Role my-aws-efs-openshift-cluster-csi-drivers-aws-efs-cloud-

  4. Créez les informations d'identification et le secret du nuage AWS EFS :

    oc create -f <path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml

    Exemple :

    $ oc create -f /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml

    Exemple de sortie

    secret/aws-efs-cloud-credentials created

5.9.3.3. Installation du pilote AWS EFS CSI

Conditions préalables

  • Accès à la console web d'OpenShift Container Platform.

Procédure

  1. Cliquez sur AdministrationCustomResourceDefinitionsClusterCSIDriver.
  2. Dans l'onglet Instances, cliquez sur Create ClusterCSIDriver.
  3. Utilisez le fichier YAML suivant :

    apiVersion: operator.openshift.io/v1
    kind: ClusterCSIDriver
    metadata:
        name: efs.csi.aws.com
    spec:
      managementState: Managed
  4. Cliquez sur Create.
  5. Attendre que les conditions suivantes passent à l'état "Vrai" :

    • AWSEFSDriverNodeServiceControllerAvailable (Contrôleur de service du pilote AWSEFSD)
    • AWSEFSDriverControllerServiceControllerAvailable (disponible)

5.9.4. Création de la classe de stockage AWS EFS

Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, les utilisateurs peuvent obtenir des volumes persistants provisionnés dynamiquement.

Le site AWS EFS CSI Driver Operator, une fois installé, ne crée pas de classe de stockage par défaut. Cependant, vous pouvez créer manuellement la classe de stockage AWS EFS.

5.9.4.1. Création de la classe de stockage AWS EFS à l'aide de la console

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur StorageStorageClasses.
  2. Sur la page StorageClasses, cliquez sur Create StorageClass.
  3. Sur la page StorageClass, procédez comme suit :

    1. Entrez un nom pour référencer la classe de stockage.
    2. En option : Saisissez la description.
    3. Sélectionnez la politique de récupération.
    4. Sélectionnez efs.csi.aws.com dans la liste déroulante Provisioner.
    5. Optionnel : Définir les paramètres de configuration du provisionneur sélectionné.
  4. Cliquez sur Create.

5.9.4.2. Création de la classe de stockage AWS EFS à l'aide de la CLI

Procédure

  • Créer un objet StorageClass:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: efs-sc
    provisioner: efs.csi.aws.com
    parameters:
      provisioningMode: efs-ap 1
      fileSystemId: fs-a5324911 2
      directoryPerms: "700" 3
      gidRangeStart: "1000" 4
      gidRangeEnd: "2000" 5
      basePath: "/dynamic_provisioning" 6
    1
    provisioningMode doit être efs-ap pour permettre le provisionnement dynamique.
    2
    fileSystemId doit être l'ID du volume EFS créé manuellement.
    3
    directoryPerms est l'autorisation par défaut du répertoire racine du volume. Dans cet exemple, le volume n'est accessible que par le propriétaire.
    4 5
    gidRangeStart et gidRangeEnd définissent la plage d'ID de groupe POSIX (GID) utilisée pour définir le GID du point d'accès AWS. Si elle n'est pas spécifiée, la plage par défaut est 50000-7000000. Chaque volume provisionné, et donc chaque point d'accès AWS, se voit attribuer un GID unique dans cette plage.
    6
    basePath est le répertoire du volume EFS utilisé pour créer des volumes provisionnés dynamiquement. Dans ce cas, un PV est provisionné en tant que "/dynamic_provisioning/<random uuid>" sur le volume EFS. Seul le sous-répertoire est monté sur les pods qui utilisent le PV.
    Note

    Un administrateur de cluster peut créer plusieurs objets StorageClass, chacun utilisant un volume EFS différent.

5.9.5. Création et configuration de l'accès aux volumes EFS dans AWS

Cette procédure explique comment créer et configurer des volumes EFS dans AWS afin de pouvoir les utiliser dans OpenShift Container Platform.

Conditions préalables

  • Informations d'identification du compte AWS

Procédure

Pour créer et configurer l'accès à un volume EFS dans AWS :

  1. Dans la console AWS, ouvrez https://console.aws.amazon.com/efs.
  2. Cliquez sur Create file system:

    • Saisissez un nom pour le système de fichiers.
    • Pour Virtual Private Cloud (VPC), sélectionnez le nuage privé virtuel (VPC) de votre OpenShift Container Platform.
    • Accepter les paramètres par défaut pour toutes les autres sélections.
  3. Attendez que le volume et les cibles de montage soient entièrement créés :

    1. Allez sur https://console.aws.amazon.com/efs#/file-systems.
    2. Cliquez sur votre volume et, dans l'onglet Network, attendez que toutes les cibles de montage soient disponibles (~1-2 minutes).
  4. Dans l'onglet Network, copiez l'identifiant du groupe de sécurité (vous en aurez besoin à l'étape suivante).
  5. Allez sur https://console.aws.amazon.com/ec2/v2/home#SecurityGroups, et trouvez le groupe de sécurité utilisé par le volume EFS.
  6. Dans l'onglet Inbound rules, cliquez sur Edit inbound rules, puis ajoutez une nouvelle règle avec les paramètres suivants pour permettre aux nœuds OpenShift Container Platform d'accéder aux volumes EFS :

    • Type: NFS
    • Protocol: TCP
    • Port range: 2049
    • Source: Plage d'adresses IP personnalisées de vos nœuds (par exemple : "10.0.0.0/16")

      Cette étape permet à OpenShift Container Platform d'utiliser les ports NFS du cluster.

  7. Sauvegarder la règle.

5.9.6. Provisionnement dynamique pour AWS EFS

Le pilote CSI AWS EFS prend en charge une forme de provisionnement dynamique différente de celle des autres pilotes CSI. Il provisionne de nouveaux PV en tant que sous-répertoires d'un volume EFS préexistant. Les PV sont indépendantes les unes des autres. Cependant, ils partagent tous le même volume EFS. Lorsque le volume est supprimé, toutes les parties privatives provisionnées à partir de celui-ci sont également supprimées. Le pilote EFS CSI crée un point d'accès AWS pour chacun de ces sous-répertoires. En raison des limites imposées par les points d'accès AWS, vous ne pouvez provisionner dynamiquement que 1 000 PV à partir d'un seul volume StorageClass/EFS.

Important

Notez que PVC.spec.resources n'est pas appliqué par l'EFS.

Dans l'exemple ci-dessous, vous demandez 5 GiB d'espace. Cependant, le PV créé est illimité et peut stocker n'importe quelle quantité de données (comme des pétaoctets). Une application défectueuse, ou même une application malveillante, peut entraîner des dépenses importantes si elle stocke trop de données sur le volume.

Il est fortement recommandé de surveiller la taille des volumes EFS dans AWS.

Conditions préalables

  • Vous avez créé des volumes AWS EFS.
  • Vous avez créé la classe de stockage AWS EFS.

Procédure

Pour activer le provisionnement dynamique :

  • Créez un PVC (ou StatefulSet ou Template) comme d'habitude, en vous référant au site StorageClass créé précédemment.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test
    spec:
      storageClassName: efs-sc
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi

Si vous rencontrez des problèmes lors de la configuration du provisionnement dynamique, consultez la section Dépannage d'AWS EFS.

5.9.7. Création de PV statiques avec AWS EFS

Il est possible d'utiliser un volume AWS EFS en tant que PV unique sans provisionnement dynamique. L'ensemble du volume est monté sur des pods.

Conditions préalables

  • Vous avez créé des volumes AWS EFS.

Procédure

  • Créez le PV à l'aide du fichier YAML suivant :

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: efs-pv
    spec:
      capacity: 1
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: efs.csi.aws.com
        volumeHandle: fs-ae66151a 2
        volumeAttributes:
          encryptInTransit: "false" 3
    1
    spec.capacity n'a aucune signification et est ignorée par le pilote CSI. Il n'est utilisé que lors de la liaison avec un PVC. Les applications peuvent stocker n'importe quelle quantité de données sur le volume.
    2
    volumeHandle doit être le même ID que le volume EFS que vous avez créé dans AWS. Si vous fournissez votre propre point d'accès, volumeHandle doit être <EFS volume ID>::<access point ID>. Par exemple : fs-6e633ada::fsap-081a1d293f0004630.
    3
    Si vous le souhaitez, vous pouvez désactiver le cryptage en transit. Le cryptage est activé par défaut.

Si vous rencontrez des problèmes lors de la configuration des PV statiques, consultez la section Dépannage d'AWS EFS.

5.9.8. Sécurité AWS EFS

Les informations suivantes sont importantes pour la sécurité d'AWS EFS.

Lors de l'utilisation de points d'accès, par exemple en utilisant le provisionnement dynamique comme décrit précédemment, Amazon remplace automatiquement les GID des fichiers par le GID du point d'accès. En outre, EFS prend en compte l'ID de l'utilisateur, l'ID du groupe et les ID du groupe secondaire du point d'accès lors de l'évaluation des autorisations du système de fichiers. EFS ignore les ID du client NFS. Pour plus d'informations sur les points d'accès, voir https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html.

Par conséquent, les volumes EFS ignorent silencieusement FSGroup ; OpenShift Container Platform n'est pas en mesure de remplacer les GID des fichiers sur le volume par FSGroup. Tout pod qui peut accéder à un point d'accès EFS monté peut accéder à n'importe quel fichier qui s'y trouve.

Sans rapport avec cela, le cryptage en transit est activé par défaut. Pour plus d'informations, voir https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html.

5.9.9. Dépannage d'AWS EFS

Les informations suivantes indiquent comment résoudre les problèmes liés à AWS EFS :

  • L'opérateur AWS EFS et le pilote CSI s'exécutent dans l'espace de noms openshift-cluster-csi-drivers.
  • Pour lancer la collecte des journaux de l'opérateur AWS EFS et du pilote CSI, exécutez la commande suivante :

    $ oc adm must-gather
    [must-gather      ] OUT Using must-gather plugin-in image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5
    [must-gather      ] OUT namespace/openshift-must-gather-xm4wq created
    [must-gather      ] OUT clusterrolebinding.rbac.authorization.k8s.io/must-gather-2bd8x created
    [must-gather      ] OUT pod for plug-in image quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 created
  • Pour afficher les erreurs de l'opérateur AWS EFS, consultez l'état de ClusterCSIDriver:

    $ oc get clustercsidriver efs.csi.aws.com -o yaml
  • Si un volume ne peut pas être monté sur un pod (comme le montre la sortie de la commande suivante) :

    $ oc describe pod
    ...
      Type     Reason       Age    From               Message
      ----     ------       ----   ----               -------
      Normal   Scheduled    2m13s  default-scheduler  Successfully assigned default/efs-app to ip-10-0-135-94.ec2.internal
      Warning  FailedMount  13s    kubelet            MountVolume.SetUp failed for volume "pvc-d7c097e6-67ec-4fae-b968-7e7056796449" : rpc error: code = DeadlineExceeded desc = context deadline exceeded 1
      Warning  FailedMount  10s    kubelet            Unable to attach or mount volumes: unmounted volumes=[persistent-storage], unattached volumes=[persistent-storage kube-api-access-9j477]: timed out waiting for the condition
    1
    Message d'avertissement indiquant que le volume n'est pas monté.

    Cette erreur est souvent causée par l'abandon de paquets par AWS entre un nœud OpenShift Container Platform et AWS EFS.

    Vérifiez que les éléments suivants sont corrects :

    • Pare-feu AWS et groupes de sécurité
    • Réseau : numéro de port et adresses IP

5.9.10. Désinstallation de l'opérateur du pilote CSI AWS EFS

Tous les PV EFS sont inaccessibles après la désinstallation de AWS EFS CSI Driver Operator.

Conditions préalables

  • Accès à la console web d'OpenShift Container Platform.

Procédure

Pour désinstaller l'opérateur du pilote AWS EFS CSI à partir de la console Web :

  1. Connectez-vous à la console web.
  2. Arrêtez toutes les applications qui utilisent les PV AWS EFS.
  3. Supprimer tous les PV AWS EFS :

    1. Cliquez sur StoragePersistentVolumeClaims.
    2. Sélectionnez chaque PVC utilisé par l'opérateur du pilote AWS EFS CSI, cliquez sur le menu déroulant à l'extrême droite du PVC, puis sur Delete PersistentVolumeClaims.
  4. Désinstallez le pilote AWS EFS CSI :

    Note

    Avant de pouvoir désinstaller l'Opérateur, vous devez d'abord supprimer le pilote CSI.

    1. Cliquez sur AdministrationCustomResourceDefinitionsClusterCSIDriver.
    2. Dans l'onglet Instances, pour efs.csi.aws.com, à l'extrême gauche, cliquez sur le menu déroulant, puis sur Delete ClusterCSIDriver.
    3. Lorsque vous y êtes invité, cliquez sur Delete.
  5. Désinstallez l'opérateur AWS EFS CSI :

    1. Cliquez sur OperatorsInstalled Operators.
    2. Sur la page Installed Operators, faites défiler ou tapez AWS EFS CSI dans la case Search by name pour trouver l'opérateur, puis cliquez dessus.
    3. En haut à droite de la page Installed Operators > Operator details, cliquez sur ActionsUninstall Operator.
    4. Lorsque la fenêtre Uninstall Operator vous le demande, cliquez sur le bouton Uninstall pour supprimer l'opérateur de l'espace de noms. Toutes les applications déployées par l'opérateur sur le cluster doivent être nettoyées manuellement.

      Après la désinstallation, AWS EFS CSI Driver Operator n'est plus listé dans la section Installed Operators de la console web.

Note

Avant de pouvoir détruire un cluster (openshift-install destroy cluster), vous devez supprimer le volume EFS dans AWS. Un cluster OpenShift Container Platform ne peut pas être détruit lorsqu'il y a un volume EFS qui utilise le VPC du cluster. Amazon n'autorise pas la suppression d'un tel VPC.

5.9.11. Ressources supplémentaires

5.10. Opérateur Azure Disk CSI Driver

5.10.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour Microsoft Azure Disk Storage.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage Azure Disk, OpenShift Container Platform installe l'opérateur Azure Disk CSI Driver et le pilote Azure Disk CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site Azure Disk CSI Driver Operator fournit une classe de stockage nommée managed-csi que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC). L'Azure Disk CSI Driver Operator prend en charge l'approvisionnement dynamique en volume en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de cluster d'avoir à préprovisionner le stockage.
  • Le site Azure Disk CSI driver vous permet de créer et de monter des PV Azure Disk.

5.10.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage Azure Disk.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les versions ultérieures d'OpenShift Container Platform.

5.10.3. Création d'une classe de stockage avec un type de compte de stockage

Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, vous pouvez obtenir des volumes persistants provisionnés dynamiquement.

Lors de la création d'une classe de stockage, vous pouvez désigner le type de compte de stockage. Cela correspond au niveau SKU de votre compte de stockage Azure. Les options valides sont Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS et StandardSSD_ZRS. Pour plus d'informations sur la recherche de votre niveau d'UGS Azure, voir Types d'UGS.

ZRS a des limitations régionales. Pour plus d'informations sur ces limitations, voir Limitations de ZRS.

Conditions préalables

  • Accès à un cluster OpenShift Container Platform avec des droits d'administrateur

Procédure

Procédez comme suit pour créer une classe de stockage avec un type de compte de stockage.

  1. Créez une classe de stockage désignant le type de compte de stockage à l'aide d'un fichier YAML similaire au suivant :

    $ oc create -f - << EOF
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage-class> 1
    provisioner: disk.csi.azure.com
    parameters:
      skuName: <storage-class-account-type> 2
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    EOF
    1
    Nom de la classe de stockage.
    2
    Type de compte de stockage. Cela correspond à votre compte de stockage Azure SKU tier:`Standard_LRS`, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS.
  2. Assurez-vous que la classe de stockage a été créée en dressant la liste des classes de stockage :

    $ oc get storageclass

    Exemple de sortie

    $ oc get storageclass
    NAME                    PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    azurefile-csi           file.csi.azure.com   Delete          Immediate              true                   68m
    managed-csi (default)   disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   68m
    sc-prem-zrs             disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   4m25s 1

    1
    Nouvelle classe de stockage avec type de compte de stockage.

5.10.4. Ensembles de machines qui déploient des machines avec des ultra-disques utilisant des PVC

Vous pouvez créer un jeu de machines fonctionnant sur Azure qui déploie des machines avec des ultra-disques. Les disques ultra sont des systèmes de stockage haute performance destinés à être utilisés avec les charges de travail les plus exigeantes.

Le plugin in-tree et le pilote CSI prennent tous deux en charge l'utilisation des PVC pour activer les ultra-disques. Vous pouvez également déployer des machines avec des ultra-disques en tant que disques de données sans créer de PVC.

5.10.4.1. Création de machines avec ultra-disques à l'aide de jeux de machines

Vous pouvez déployer des machines avec des ultra-disques sur Azure en modifiant votre fichier YAML de configuration des machines.

Conditions préalables

  • Disposer d'un cluster Microsoft Azure existant.

Procédure

  1. Copiez une ressource personnalisée (CR) Azure MachineSet existante et modifiez-la en exécutant la commande suivante :

    oc edit machineset <machine-set-name> $ oc edit machineset <machine-set-name>

    <machine-set-name> est l'ensemble de machines que vous voulez provisionner avec des ultra-disques.

  2. Ajouter les lignes suivantes aux endroits indiqués :

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    spec:
      template:
        spec:
          metadata:
            labels:
              disk: ultrassd 1
          providerSpec:
            value:
              ultraSSDCapability: Enabled 2
    1
    Indiquez une étiquette à utiliser pour sélectionner un nœud créé par ce jeu de machines. Cette procédure utilise disk.ultrassd pour cette valeur.
    2
    Ces lignes permettent l'utilisation d'ultra-disques.
  3. Créez un jeu de machines à l'aide de la configuration mise à jour en exécutant la commande suivante :

    oc create -f <machine-set-name>.yaml
  4. Créez une classe de stockage contenant la définition YAML suivante :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ultra-disk-sc 1
    parameters:
      cachingMode: None
      diskIopsReadWrite: "2000" 2
      diskMbpsReadWrite: "320" 3
      kind: managed
      skuname: UltraSSD_LRS
    provisioner: disk.csi.azure.com 4
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer 5
    1
    Indiquez le nom de la classe de stockage. Cette procédure utilise ultra-disk-sc pour cette valeur.
    2
    Spécifiez le nombre d'IOPS pour la classe de stockage.
    3
    Spécifiez le débit en MBps pour la classe de stockage.
    4
    Pour Azure Kubernetes Service (AKS) version 1.21 ou ultérieure, utilisez disk.csi.azure.com. Pour les versions antérieures d'AKS, utilisez kubernetes.io/azure-disk.
    5
    Facultatif : Ce paramètre permet d'attendre la création du module qui utilisera le disque.
  5. Créez une revendication de volume persistant (PVC) pour référencer la classe de stockage ultra-disk-sc qui contient la définition YAML suivante :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk 1
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: ultra-disk-sc 2
      resources:
        requests:
          storage: 4Gi 3
    1
    Indiquez le nom du PVC. Cette procédure utilise ultra-disk pour cette valeur.
    2
    Ce PVC fait référence à la classe de stockage ultra-disk-sc.
    3
    Spécifiez la taille de la classe de stockage. La valeur minimale est 4Gi.
  6. Créez un pod qui contient la définition YAML suivante :

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-ultra
    spec:
      nodeSelector:
        disk: ultrassd 1
      containers:
      - name: nginx-ultra
        image: alpine:latest
        command:
          - "sleep"
          - "infinity"
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk 2
    1
    Indiquez l'étiquette du jeu de machines qui permet l'utilisation d'ultra-disques. Cette procédure utilise disk.ultrassd pour cette valeur.
    2
    Ce pod fait référence au PVC ultra-disk.

Vérification

  1. Validez la création des machines en exécutant la commande suivante :

    $ oc get machines

    Les machines doivent être dans l'état Running.

  2. Pour une machine en cours d'exécution et à laquelle un nœud est attaché, validez la partition en exécutant la commande suivante :

    $ oc debug node/<node-name> -- chroot /host lsblk

    Dans cette commande, oc debug node/<node-name> démarre un shell de débogage sur le nœud <node-name> et transmet une commande à --. La commande passée chroot /host permet d'accéder aux binaires du système d'exploitation hôte sous-jacent, et lsblk montre les périphériques de bloc attachés à la machine du système d'exploitation hôte.

Prochaines étapes

  • Pour utiliser un ultra disque à partir d'un pod, créez une charge de travail qui utilise le point de montage. Créez un fichier YAML similaire à l'exemple suivant :

    apiVersion: v1
    kind: Pod
    metadata:
      name: ssd-benchmark1
    spec:
      containers:
      - name: ssd-benchmark1
        image: nginx
        ports:
          - containerPort: 80
            name: "http-server"
        volumeMounts:
        - name: lun0p1
          mountPath: "/tmp"
      volumes:
        - name: lun0p1
          hostPath:
            path: /var/lib/lun0p1
            type: DirectoryOrCreate
      nodeSelector:
        disktype: ultrassd

5.10.4.2. Ressources de dépannage pour les ensembles de machines qui activent les ultra-disques

Utilisez les informations de cette section pour comprendre et résoudre les problèmes que vous pourriez rencontrer.

5.10.4.2.1. Impossible de monter une revendication de volume persistant soutenue par un ultra disque

En cas de problème lors du montage d'une revendication de volume persistant soutenue par un ultra disque, le pod reste bloqué à l'état ContainerCreating et une alerte est déclenchée.

Par exemple, si le paramètre additionalCapabilities.ultraSSDEnabled n'est pas défini sur la machine qui soutient le nœud qui héberge le module, le message d'erreur suivant apparaît :

StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
  • Pour résoudre ce problème, décrivez le pod en exécutant la commande suivante :

    oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>

5.10.5. Ressources supplémentaires

5.11. Opérateur Azure File CSI Driver

5.11.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) en utilisant le pilote Container Storage Interface (CSI) pour Microsoft Azure File Storage.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage Azure File, OpenShift Container Platform installe l'opérateur Azure File CSI Driver et le pilote Azure File CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site Azure File CSI Driver Operator fournit une classe de stockage nommée azurefile-csi que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC).
  • Le site Azure File CSI driver vous permet de créer et de monter des PV Azure File. Le pilote Azure File CSI prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de clusters d'avoir à préprovisionner le stockage.

Azure File CSI Driver Operator ne prend pas en charge :

  • Disques durs virtuels (VHD)
  • Système de fichiers réseau (NFS) : OpenShift Container Platform ne déploie pas de classe de stockage soutenue par NFS.
  • Exécution sur des nœuds avec le mode FIPS activé.

Pour plus d'informations sur les fonctionnalités prises en charge, voir Pilotes et fonctionnalités CSI pris en charge.

5.11.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.12. Azure Stack Hub CSI Driver Operator

5.12.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour Azure Stack Hub Storage. Azure Stack Hub, qui fait partie du portefeuille Azure Stack, vous permet d'exécuter des applications dans un environnement sur site et de fournir des services Azure dans votre centre de données.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage Azure Stack Hub, OpenShift Container Platform installe l'opérateur Azure Stack Hub CSI Driver et le pilote Azure Stack Hub CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site Azure Stack Hub CSI Driver Operator fournit une classe de stockage (managed-csi), avec \N "Standard_LRS" comme type de compte de stockage par défaut, que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC). L'Azure Stack Hub CSI Driver Operator prend en charge l'approvisionnement dynamique en volume en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de cluster de devoir préprovisionner le stockage.
  • Le site Azure Stack Hub CSI driver vous permet de créer et de monter des PV Azure Stack Hub.

5.12.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.12.3. Ressources supplémentaires

5.13. GCP PD CSI Chauffeur

5.13.1. Vue d'ensemble

OpenShift Container Platform peut provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour le stockage sur disque persistant (PD) de Google Cloud Platform (GCP).

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsqu'on travaille avec un opérateur et un pilote d'interface de stockage de conteneurs (CSI).

Pour créer des volumes persistants (PV) provisionnés CSI qui se montent sur des ressources de stockage GCP PD, OpenShift Container Platform installe l'opérateur de pilote GCP PD CSI et le pilote GCP PD CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • GCP PD CSI Driver Operator: Par défaut, l'Opérateur fournit une classe de stockage que vous pouvez utiliser pour créer des PVC. Vous avez également la possibilité de créer la classe de stockage GCP PD comme décrit dans Stockage persistant à l'aide de GCE Persistent Disk.
  • GCP PD driver: Le pilote vous permet de créer et de monter des PV GCP PD.
Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage GCP PD.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plug-ins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique vers le CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

5.13.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.13.3. Paramètres de la classe de stockage du pilote GCP PD CSI

Le pilote CSI (Container Storage Interface) du disque persistant (PD) de Google Cloud Platform (GCP) utilise le sidecar CSI external-provisioner comme contrôleur. Il s'agit d'un conteneur d'aide distinct qui est déployé avec le pilote CSI. Le sidecar gère les volumes persistants (PV) en déclenchant l'opération CreateVolume.

Le pilote GCP PD CSI utilise la clé de paramètre csi.storage.k8s.io/fstype pour prendre en charge le provisionnement dynamique. Le tableau suivant décrit tous les paramètres de la classe de stockage GCP PD CSI qui sont pris en charge par OpenShift Container Platform.

Tableau 5.3. CreateVolume Paramètres

ParamètresValeursDéfautDescription

type

pd-ssd ou pd-standard

pd-standard

Permet de choisir entre des PV standard et des PV à semi-conducteurs.

replication-type

none ou regional-pd

none

Permet de choisir entre des PV zonales ou régionales.

disk-encryption-kms-key

Identifiant de ressource pleinement qualifié pour la clé à utiliser pour chiffrer les nouveaux disques.

Chaîne vide

Utilise des clés de chiffrement gérées par le client (CMEK) pour chiffrer les nouveaux disques.

5.13.4. Création d'un volume persistant crypté personnalisé

Lorsque vous créez un objet PersistentVolumeClaim, OpenShift Container Platform provisionne un nouveau volume persistant (PV) et crée un objet PersistentVolume. Vous pouvez ajouter une clé de chiffrement personnalisée dans Google Cloud Platform (GCP) pour protéger un PV dans votre cluster en chiffrant le PV nouvellement créé.

Pour le chiffrement, le PV nouvellement attaché que vous créez utilise des clés de chiffrement gérées par le client (CMEK) sur un cluster à l'aide d'une clé Google Cloud Key Management Service (KMS) nouvelle ou existante.

Conditions préalables

  • Vous êtes connecté à un cluster OpenShift Container Platform en cours d'exécution.
  • Vous avez créé un porte-clés et une version de clé de Cloud KMS.

Pour plus d'informations sur les ressources CMEK et Cloud KMS, voir Utilisation de clés de chiffrement gérées par le client (CMEK).

Procédure

Pour créer un PV crypté personnalisé, procédez comme suit :

  1. Créez une classe de stockage avec la clé Cloud KMS. L'exemple suivant permet le provisionnement dynamique des volumes cryptés :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-gce-pd-cmek
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: "WaitForFirstConsumer"
    allowVolumeExpansion: true
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/<key-project-id>/locations/<location>/keyRings/<key-ring>/cryptoKeys/<key> 1
    1
    Ce champ doit être l'identifiant de la ressource pour la clé qui sera utilisée pour crypter les nouveaux disques. Les valeurs sont sensibles à la casse. Pour plus d'informations sur la fourniture de valeurs d'ID de clé, voir Récupérer l'ID d'une ressource et Obtenir l'ID d'une ressource Cloud KMS.
    Note

    Vous ne pouvez pas ajouter le paramètre disk-encryption-kms-key à une classe de stockage existante. Cependant, vous pouvez supprimer la classe de stockage et la recréer avec le même nom et un ensemble de paramètres différent. Dans ce cas, le provisionneur de la classe existante doit être pd.csi.storage.gke.io.

  2. Déployez la classe de stockage sur votre cluster OpenShift Container Platform à l'aide de la commande oc:

    $ oc describe storageclass csi-gce-pd-cmek

    Exemple de sortie

    Name:                  csi-gce-pd-cmek
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:            disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard
    AllowVolumeExpansion:  true
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none

  3. Créez un fichier nommé pvc.yaml qui correspond au nom de l'objet de classe de stockage que vous avez créé à l'étape précédente :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-gce-pd-cmek
      resources:
        requests:
          storage: 6Gi
    Note

    Si vous avez marqué la nouvelle classe de stockage comme étant par défaut, vous pouvez omettre le champ storageClassName.

  4. Appliquez le PVC à votre cluster :

    $ oc apply -f pvc.yaml
  5. Obtenez le statut de votre PVC et vérifiez qu'il est créé et lié à un PV nouvellement provisionné :

    $ oc get pvc

    Exemple de sortie

    NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    podpvc    Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi       RWO            csi-gce-pd-cmek  9s

    Note

    Si le champ volumeBindingMode de votre classe de stockage est défini sur WaitForFirstConsumer, vous devez créer un module pour utiliser le PVC avant de pouvoir le vérifier.

Votre PV protégé par CMEK est maintenant prêt à être utilisé avec votre cluster OpenShift Container Platform.

5.14. Opérateur du pilote CSI de Google Compute Platform Filestore

5.14.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour Google Compute Platform (GCP) Filestore Storage.

Important

GCP Filestore CSI Driver Operator est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnés CSI qui se montent sur des ressources de stockage GCP Filestore, vous installez l'opérateur de pilote GCP Filestore CSI et le pilote GCP Filestore CSI dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site GCP Filestore CSI Driver Operator ne fournit pas de classe de stockage par défaut, mais vous pouvez en créer une si nécessaire. GCP Filestore CSI Driver Operator prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de cluster d'avoir à préprovisionner le stockage.
  • Le site GCP Filestore CSI driver vous permet de créer et de monter des PV de dépôt de fichiers GCP.

5.14.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.14.3. Installation du pilote CSI de GCP Filestore Operator

Le Filestore Container Storage Interface (CSI) Driver Operator de Google Compute Platform (GCP) n'est pas installé par défaut dans OpenShift Container Platform. Utilisez la procédure suivante pour installer le GCP Filestore CSI Driver Operator dans votre cluster.

Conditions préalables

  • Accès à la console web d'OpenShift Container Platform.

Procédure

Pour installer l'opérateur de pilote GCP Filestore CSI à partir de la console web :

  1. Connectez-vous à la console web.
  2. Activez l'API Filestore dans le projet GCE en exécutant la commande suivante :

    $ gcloud services enable file.googleapis.com  --project <my_gce_project> 1
    1
    Remplacez <my_gce_project> par votre projet Google Cloud.

    Vous pouvez également le faire à l'aide de la console web de Google Cloud.

  3. Installer l'opérateur CSI du dépôt de fichiers GCP :

    1. Cliquez sur OperatorsOperatorHub.
    2. Localisez le GCP Filestore CSI Operator en tapant GCP Filestore dans la boîte de filtre.
    3. Cliquez sur le bouton GCP Filestore CSI Driver Operator.
    4. Sur la page GCP Filestore CSI Driver Operator, cliquez sur Install.
    5. Sur la page Install Operator, assurez-vous que

      • All namespaces on the cluster (default) est sélectionné.
      • Installed Namespace est fixé à openshift-cluster-csi-drivers.
    6. Cliquez sur Install.

      Une fois l'installation terminée, l'opérateur GCP Filestore CSI est répertorié dans la section Installed Operators de la console web.

  4. Installez le pilote CSI du dépôt de fichiers GCP :

    1. Cliquez sur administrationCustomResourceDefinitionsClusterCSIDriver.
    2. Dans l'onglet Instances, cliquez sur Create ClusterCSIDriver.

      Utilisez le fichier YAML suivant :

      apiVersion: operator.openshift.io/v1
      kind: ClusterCSIDriver
      metadata:
          name: filestore.csi.storage.gke.io
      spec:
        managementState: Managed
    3. Cliquez sur Create.
    4. Attendre que les conditions suivantes passent à l'état "vrai" :

      • GCPFilestoreDriverCredentialsRequestControllerAvailable (disponible)
      • GCPFilestoreDriverNodeServiceControllerAvailable (disponible)
      • GCPFilestoreDriverControllerServiceControllerAvailable (disponible)

5.14.4. Création d'une classe de stockage pour GCP Filestore Storage

Après avoir installé l'opérateur, vous devez créer une classe de stockage pour le provisionnement dynamique des volumes de Google Compute Platform (GCP) Filestore.

Conditions préalables

  • Vous êtes connecté au cluster OpenShift Container Platform en cours d'exécution.

Procédure

Pour créer une classe de stockage :

  1. Créez une classe de stockage à l'aide du fichier YAML suivant :

    Exemple de fichier YAML

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: filestore-csi
    provisioner: filestore.csi.storage.gke.io
    parameters:
      network: network-name 1
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer

    1
    Indiquez le nom du réseau de nuage privé virtuel (VPC) GCP dans lequel les instances Filestore doivent être créées.
  2. Spécifiez le nom du réseau VPC dans lequel les instances Filestore doivent être créées.

    Il est recommandé de spécifier le réseau VPC dans lequel les instances Filestore doivent être créées. Si aucun réseau VPC n'est spécifié, le pilote de l'interface de stockage de conteneurs (CSI) tente de créer les instances dans le réseau VPC par défaut du projet. Sur les installations IPI, le nom du réseau VPC est généralement le nom du cluster avec le suffixe "-network". Cependant, sur les installations UPI, le nom du réseau VPC peut être n'importe quelle valeur choisie par l'utilisateur.

    Vous pouvez trouver le nom du réseau VPC en inspectant les objets MachineSets avec la commande suivante :

    $ oc -n openshift-machine-api get machinesets -o yaml | grep "network:"
                - network: gcp-filestore-network
    (...)

    Dans cet exemple, le nom du réseau VPC dans ce cluster est "gcp-filestore-network".

5.14.5. Destruction des clusters et du GCP Filestore

Généralement, si vous détruisez un cluster, le programme d'installation d'OpenShift Container Platform supprime toutes les ressources cloud qui appartiennent à ce cluster. Cependant, lorsqu'un cluster est détruit, les instances Filestore de Google Compute Platform (GCP) ne sont pas automatiquement supprimées. Vous devez donc supprimer manuellement toutes les réclamations de volumes persistants (PVC) qui utilisent la classe de stockage Filestore avant de détruire le cluster.

Procédure

Pour supprimer tous les PVC du dépôt de fichiers GCP :

  1. Liste de tous les PVC créés à l'aide de la classe de stockage filestore-csi:

    $ oc get pvc -o json -A | jq -r '.items[] | select(.spec.storageClassName == "filestore-csi")
  2. Supprimez tous les PVC répertoriés par la commande précédente :

    oc delete <pvc-name> 1
    1
    Remplacez <name-pvc> par le nom du PVC à supprimer.

5.14.6. Ressources supplémentaires

5.15. IBM VPC Block CSI Driver Operator

5.15.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour IBM Virtual Private Cloud (VPC) Block Storage.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des PV provisionnées CSI qui se montent sur des ressources de stockage IBM VPC Block, OpenShift Container Platform installe par défaut l'opérateur IBM VPC Block CSI Driver et le pilote IBM VPC Block CSI dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site IBM VPC Block CSI Driver Operator fournit trois classes de stockage nommées ibmc-vpc-block-10iops-tier (par défaut), ibmc-vpc-block-5iops-tier et ibmc-vpc-block-custom pour différents niveaux que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC). IBM VPC Block CSI Driver Operator prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de cluster de devoir préprovisionner le stockage.
  • Le site IBM VPC Block CSI driver vous permet de créer et de monter des PV IBM VPC Block.

5.15.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Ressources supplémentaires

5.16. Opérateur de pilote CSI OpenStack Cinder

5.16.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour OpenStack Cinder.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsqu'on travaille avec un opérateur et un pilote d'interface de stockage de conteneurs (CSI).

Pour créer des PV provisionnées CSI qui se montent sur des ressources de stockage OpenStack Cinder, OpenShift Container Platform installe l'opérateur OpenStack Cinder CSI Driver et le pilote OpenStack Cinder CSI dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site OpenStack Cinder CSI Driver Operator fournit une classe de stockage CSI que vous pouvez utiliser pour créer des PVC.
  • Le site OpenStack Cinder CSI driver vous permet de créer et de monter des PV OpenStack Cinder.

Pour OpenShift Container Platform, la migration automatique d'OpenStack Cinder in-tree vers le pilote CSI est disponible en tant que fonctionnalité Technology Preview (TP). Lorsque la migration est activée, les volumes provisionnés à l'aide du plugin in-tree existant sont automatiquement migrés pour utiliser le pilote OpenStack Cinder CSI. Pour plus d'informations, voir la fonctionnalité de migration automatique CSI.

5.16.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage Cinder.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

5.16.3. Faire de l'OpenStack Cinder CSI la classe de stockage par défaut

Le pilote OpenStack Cinder CSI utilise la clé de paramètre cinder.csi.openstack.org pour prendre en charge le provisionnement dynamique.

Pour activer le provisionnement OpenStack Cinder CSI dans OpenShift Container Platform, il est recommandé d'écraser la classe de stockage par défaut dans l'arborescence avec standard-csi. Vous pouvez également créer la revendication de volume persistant (PVC) et spécifier la classe de stockage comme "standard-csi".

Dans OpenShift Container Platform, la classe de stockage par défaut fait référence au pilote Cinder in-tree. Cependant, lorsque la migration automatique CSI est activée, les volumes créés à l'aide de la classe de stockage par défaut utilisent en réalité le pilote CSI.

Procédure

Suivez les étapes suivantes pour appliquer la classe de stockage standard-csi en remplaçant la classe de stockage par défaut dans l'arborescence.

  1. Indiquez la classe de stockage :

    $ oc get storageclass

    Exemple de sortie

    NAME                   PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    standard(default)      cinder.csi.openstack.org   Delete          WaitForFirstConsumer   true                   46h
    standard-csi           kubernetes.io/cinder       Delete          WaitForFirstConsumer   true                   46h

  2. Modifiez la valeur de l'annotation storageclass.kubernetes.io/is-default-class en false pour la classe de stockage par défaut, comme indiqué dans l'exemple suivant :

    $ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
  3. Faites d'une autre classe de stockage la classe par défaut en ajoutant ou en modifiant l'annotation à l'adresse suivante : storageclass.kubernetes.io/is-default-class=true.

    $ oc patch storageclass standard-csi -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
  4. Vérifiez que le PVC fait désormais référence à la classe de stockage CSI par défaut :

    $ oc get storageclass

    Exemple de sortie

    NAME                   PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    standard               kubernetes.io/cinder       Delete          WaitForFirstConsumer   true                   46h
    standard-csi(default)  cinder.csi.openstack.org   Delete          WaitForFirstConsumer   true                   46h

  5. Facultatif : Vous pouvez définir un nouveau PVC sans avoir à spécifier la classe de stockage :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cinder-claim
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

    Un PVC qui ne spécifie pas de classe de stockage spécifique est automatiquement provisionné en utilisant la classe de stockage par défaut.

  6. Facultatif : Une fois le nouveau fichier configuré, créez-le dans votre cluster :

    $ oc create -f cinder-claim.yaml

Ressources supplémentaires

5.17. OpenStack Manila CSI Driver Operator

5.17.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour le service de système de fichiers partagés OpenStack Manila.

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsqu'on travaille avec un opérateur et un pilote d'interface de stockage de conteneurs (CSI).

Pour créer des PV provisionnées CSI qui se montent sur des ressources de stockage Manila, OpenShift Container Platform installe l'opérateur de pilote CSI Manila et le pilote CSI Manila par défaut sur tout cluster OpenStack dont le service Manila est activé.

  • Le site Manila CSI Driver Operator crée la classe de stockage nécessaire pour créer des PVC pour tous les types de partage Manila disponibles. L'opérateur est installé dans l'espace de noms openshift-cluster-csi-drivers.
  • Le site Manila CSI driver vous permet de créer et de monter des PV de Manille. Le pilote est installé dans l'espace de noms openshift-manila-csi-driver.

5.17.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.17.3. Manille Limites de l'activité de conducteur de CSI

Les limitations suivantes s'appliquent à l'opérateur de conduite de l'interface de stockage de conteneurs (CSI) de Manille :

Seul NFS est pris en charge
OpenStack Manila prend en charge de nombreux protocoles de stockage en réseau, tels que NFS, CIFS et CEPHFS, et ceux-ci peuvent être activés de manière sélective dans le nuage OpenStack. Le Manila CSI Driver Operator dans OpenShift Container Platform ne prend en charge que l'utilisation du protocole NFS. Si NFS n'est pas disponible et activé dans le nuage OpenStack sous-jacent, vous ne pouvez pas utiliser le Manila CSI Driver Operator pour provisionner le stockage pour OpenShift Container Platform.
Les instantanés ne sont pas pris en charge si le back-end est CephFS-NFS
Pour prendre des instantanés de volumes persistants (PV) et inverser des volumes en instantanés, vous devez vous assurer que le type de partage Manila que vous utilisez prend en charge ces fonctionnalités. Un administrateur Red Hat OpenStack doit activer la prise en charge des instantanés (share type extra-spec snapshot_support) et la création de partages à partir d'instantanés (share type extra-spec create_share_from_snapshot_support) dans le type de partage associé à la classe de stockage que vous avez l'intention d'utiliser.
Les FSGroups ne sont pas pris en charge
Étant donné que la CSI de Manille fournit des systèmes de fichiers partagés pour l'accès par plusieurs lecteurs et plusieurs écrivains, elle ne prend pas en charge l'utilisation des FSGroups. Ceci est vrai même pour les volumes persistants créés avec le mode d'accès ReadWriteOnce. Il est donc important de ne pas spécifier l'attribut fsType dans une classe de stockage que vous créez manuellement pour l'utiliser avec le pilote Manila CSI.
Important

Dans Red Hat OpenStack Platform 16.x et 17.x, le service Shared File Systems (Manila) avec CephFS via NFS prend entièrement en charge le service des partages à OpenShift Container Platform via le CSI Manila. Cependant, cette solution n'est pas destinée à une utilisation massive. Veillez à examiner les recommandations importantes dans Recommandations de charge de travail CephFS NFS Manila-CSI pour Red Hat OpenStack Platform.

5.17.4. Approvisionnement dynamique des volumes Manila CSI

OpenShift Container Platform installe une classe de stockage pour chaque type de partage Manila disponible.

Les fichiers YAML créés sont complètement découplés de Manila et de son plugin CSI (Container Storage Interface). En tant que développeur d'applications, vous pouvez provisionner dynamiquement le stockage ReadWriteMany (RWX) et déployer des pods avec des applications qui consomment le stockage en toute sécurité à l'aide de manifestes YAML.

Vous pouvez utiliser les mêmes définitions de pod et de revendication de volume persistant (PVC) sur site que celles que vous utilisez avec OpenShift Container Platform sur AWS, GCP, Azure et d'autres plateformes, à l'exception de la référence à la classe de stockage dans la définition du PVC.

Note

Le service Manila est facultatif. Si le service n'est pas activé dans Red Hat OpenStack Platform (RHOSP), le pilote CSI Manila n'est pas installé et les classes de stockage pour Manila ne sont pas créées.

Conditions préalables

  • RHOSP est déployé avec l'infrastructure de partage Manila appropriée afin qu'il puisse être utilisé pour provisionner et monter dynamiquement des volumes dans OpenShift Container Platform.

Procédure (UI)

Pour créer dynamiquement un volume Manila CSI à l'aide de la console Web :

  1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
  2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
  3. Définissez les options requises sur la page résultante.

    1. Sélectionnez la classe de stockage appropriée.
    2. Saisissez un nom unique pour la créance de stockage.
    3. Sélectionnez le mode d'accès pour spécifier l'accès en lecture et en écriture pour le PVC que vous créez.

      Important

      Utilisez RWX si vous souhaitez que le volume persistant (PV) qui remplit ce PVC soit monté sur plusieurs pods sur plusieurs nœuds du cluster.

  4. Définir la taille de la demande de stockage.
  5. Cliquez sur Create pour créer la demande de volume persistant et générer un volume persistant.

Procédure (CLI)

Pour créer dynamiquement un volume Manila CSI à l'aide de l'interface de ligne de commande (CLI) :

  1. Créer et sauvegarder un fichier avec l'objet PersistentVolumeClaim décrit par le YAML suivant :

    pvc-manila.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-manila
    spec:
      accessModes: 1
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: csi-manila-gold 2

    1
    Utilisez RWX si vous souhaitez que le volume persistant (PV) qui remplit ce PVC soit monté sur plusieurs pods sur plusieurs nœuds du cluster.
    2
    Le nom de la classe de stockage qui approvisionne le back-end de stockage. Les classes de stockage de Manille sont approvisionnées par l'opérateur et portent le préfixe csi-manila-.
  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en exécutant la commande suivante :

    $ oc create -f pvc-manila.yaml

    Un nouveau PVC est créé.

  3. Pour vérifier que le volume a été créé et qu'il est prêt, exécutez la commande suivante :

    $ oc get pvc pvc-manila

    Le site pvc-manila indique qu'il s'agit de Bound.

Vous pouvez maintenant utiliser le nouveau PVC pour configurer un pod.

Ressources supplémentaires

5.18. Red Hat Virtualization CSI Driver Operator

5.18.1. Vue d'ensemble

OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour Red Hat Virtualization (RHV).

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsqu'on travaille avec un opérateur et un pilote d'interface de stockage de conteneurs (CSI).

Pour créer des PV provisionnées CSI qui se montent sur des ressources de stockage RHV, OpenShift Container Platform installe l'opérateur oVirt CSI Driver et le pilote oVirt CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • Le site oVirt CSI Driver Operator fournit un objet StorageClass par défaut que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC).
  • Le site oVirt CSI driver vous permet de créer et de monter des PV oVirt.

5.18.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

Note

Le pilote CSI oVirt ne prend pas en charge les instantanés.

5.18.3. Classe de stockage du pilote CSI de Red Hat Virtualization (RHV)

OpenShift Container Platform crée un objet par défaut de type StorageClass nommé ovirt-csi-sc qui est utilisé pour créer des volumes persistants provisionnés dynamiquement.

Pour créer des classes de stockage supplémentaires pour différentes configurations, créez et enregistrez un fichier avec l'objet StorageClass décrit par l'exemple YAML suivant :

ovirt-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: <storage_class_name>  1
  annotations:
    storageclass.kubernetes.io/is-default-class: "<boolean>"  2
provisioner: csi.ovirt.org
allowVolumeExpansion: <boolean> 3
reclaimPolicy: Delete 4
volumeBindingMode: Immediate 5
parameters:
  storageDomainName: <rhv-storage-domain-name> 6
  thinProvisioning: "<boolean>"  7
  csi.storage.k8s.io/fstype: <file_system_type> 8

1
Nom de la classe de stockage.
2
Défini à false si la classe de stockage est la classe de stockage par défaut dans le cluster. Si la valeur est true, la classe de stockage par défaut existante doit être modifiée et définie sur false.
3
true permet une expansion dynamique du volume, tandis que false l'empêche. true est recommandé.
4
Les volumes persistants provisionnés dynamiquement de cette classe de stockage sont créés avec cette politique de récupération. Cette politique par défaut est Delete.
5
Indique comment provisionner et lier PersistentVolumeClaims. S'il n'est pas défini, c'est VolumeBindingImmediate qui est utilisé. Ce champ ne s'applique qu'aux serveurs qui activent la fonction VolumeScheduling.
6
Le nom du domaine de stockage RHV à utiliser.
7
Si true, le disque est en mode "thin provisioned". Si false, le disque est pré-alloué. Le provisionnement fin est recommandé.
8
Facultatif : Type de système de fichiers à créer. Valeurs possibles : ext4 (par défaut) ou xfs.

5.18.4. Création d'un volume persistant sur RHV

Lorsque vous créez un objet PersistentVolumeClaim (PVC), OpenShift Container Platform provisionne un nouveau volume persistant (PV) et crée un objet PersistentVolume.

Conditions préalables

  • Vous êtes connecté à un cluster OpenShift Container Platform en cours d'exécution.
  • Vous avez fourni les informations d'identification RHV correctes dans ovirt-credentials secret.
  • Vous avez installé le pilote CSI oVirt.
  • Vous avez défini au moins une classe de stockage.

Procédure

  • Si vous utilisez la console web pour créer dynamiquement un volume persistant sur RHV :

    1. Dans la console OpenShift Container Platform, cliquez sur StoragePersistent Volume Claims.
    2. Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
    3. Définissez les options requises sur la page résultante.
    4. Sélectionnez l'objet StorageClass approprié, qui est ovirt-csi-sc par défaut.
    5. Saisissez un nom unique pour la créance de stockage.
    6. Sélectionnez le mode d'accès. Actuellement, RWO (ReadWriteOnce) est le seul mode d'accès pris en charge.
    7. Définir la taille de la demande de stockage.
    8. Sélectionnez le mode de volume :

      Filesystem: Monté dans les pods en tant que répertoire. Ce mode est le mode par défaut.

      Block: Périphérique bloc, sans système de fichiers

    9. Cliquez sur Create pour créer l'objet PersistentVolumeClaim et générer un objet PersistentVolume.
  • Si vous utilisez l'interface de ligne de commande (CLI) pour créer dynamiquement un volume RHV CSI :

    1. Créez et enregistrez un fichier avec l'objet PersistentVolumeClaim décrit par l'exemple YAML suivant :

      pvc-ovirt.yaml

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-ovirt
      spec:
        storageClassName: ovirt-csi-sc 1
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: <volume size>  2
        volumeMode: <volume mode> 3

      1
      Nom de la classe de stockage requise.
      2
      Taille du volume en gigaoctets.
      3
      Options prises en charge :
      • Filesystem: Monté dans les pods en tant que répertoire. Ce mode est le mode par défaut.
      • Block: Périphérique en mode bloc, sans système de fichiers.
    2. Créez l'objet que vous avez sauvegardé à l'étape précédente en exécutant la commande suivante :

      $ oc create -f pvc-ovirt.yaml
    3. Pour vérifier que le volume a été créé et qu'il est prêt, exécutez la commande suivante :

      $ oc get pvc pvc-ovirt

      Le site pvc-ovirt montre qu'il s'agit de Bound.

Note

Si vous devez mettre à jour les informations d'identification de l'opérateur, reportez-vous aux instructions de la section Comment modifier les informations d'identification du RHV dans l'OCP 4.

5.19. Opérateur de pilote VMware vSphere CSI

5.19.1. Vue d'ensemble

OpenShift Container Platform peut provisionner des volumes persistants (PV) à l'aide du pilote VMware vSphere Container Storage Interface (CSI) pour les volumes Virtual Machine Disk (VMDK).

Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.

Pour créer des volumes persistants (PV) provisionnés par CSI qui se montent sur des ressources de stockage vSphere, OpenShift Container Platform installe l'opérateur vSphere CSI Driver Operator et le pilote vSphere CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers.

  • vSphere CSI Driver Operator: L'opérateur fournit une classe de stockage, appelée thin-csi, que vous pouvez utiliser pour créer des réclamations de volumes persistants (PVC). L'opérateur du pilote vSphere CSI prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande, ce qui évite aux administrateurs de clusters de devoir préprovisionner le stockage.
  • vSphere CSI driver: Le pilote permet de créer et de monter des PV vSphere. Dans OpenShift Container Platform 4.12, la version du pilote est 2.6.1. Le pilote vSphere CSI prend en charge tous les systèmes de fichiers pris en charge par la version sous-jacente de Red Hat Core OS, y compris XFS et Ext4. Pour plus d'informations sur les systèmes de fichiers pris en charge, voir Vue d'ensemble des systèmes de fichiers disponibles.
Important

OpenShift Container Platform utilise par défaut un plugin in-tree (non-CSI) pour provisionner le stockage vSphere.

Dans les prochaines versions d'OpenShift Container Platform, les volumes provisionnés à l'aide des plugins in-tree existants sont prévus pour une migration vers leur pilote CSI équivalent. La migration automatique CSI devrait être transparente. La migration ne modifie pas la façon dont vous utilisez tous les objets API existants, tels que les volumes persistants, les réclamations de volumes persistants et les classes de stockage. Pour plus d'informations sur la migration, voir Migration automatique CSI.

Après la migration complète, les plugins in-tree seront éventuellement supprimés dans les futures versions d'OpenShift Container Platform.

Note

Le pilote vSphere CSI prend en charge le provisionnement dynamique et statique. Lorsque vous utilisez le provisionnement statique dans les spécifications des PV, n'utilisez pas la clé storage.kubernetes.io/csiProvisionerIdentity dans csi.volumeAttributes car cette clé indique des PV provisionnés dynamiquement.

5.19.2. À propos du CSI

Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.

Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.

5.19.3. politique de stockage vSphere

La classe de stockage vSphere CSI Operator Driver utilise la politique de stockage de vSphere. OpenShift Container Platform crée automatiquement une politique de stockage qui cible le datastore configuré dans la configuration du cloud :

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: thin-csi
provisioner: csi.vsphere.vmware.com
parameters:
  StoragePolicyName: "$openshift-storage-policy-xxxx"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: false
reclaimPolicy: Delete

5.19.4. Prise en charge des volumes vSphere ReadWriteMany

Si l'environnement vSphere sous-jacent prend en charge le service de fichiers vSAN, l'opérateur de pilote de l'interface de stockage de conteneurs (CSI) vSphere installé par OpenShift Container Platform prend en charge le provisionnement des volumes ReadWriteMany (RWX). Si le service de fichiers vSAN n'est pas configuré, le seul mode d'accès disponible est ReadWriteOnce (RWO). Si le service de fichiers vSAN n'est pas configuré et que vous demandez RWX, le volume n'est pas créé et une erreur est consignée.

Pour plus d'informations sur la configuration du service de fichiers vSAN dans votre environnement, voir Service de fichiers vSAN.

Vous pouvez demander des volumes RWX en effectuant la demande de volume persistant (PVC) suivante :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  resources:
    requests:
      storage: 1Gi
  accessModes:
     - ReadWriteMany
  storageClassName: thin-csi

La demande d'un PVC du type de volume RWX devrait entraîner le provisionnement de volumes persistants (PV) soutenus par le service de fichiers vSAN.

5.19.5. VMware vSphere CSI Driver Operator requirements

Pour installer vSphere CSI Driver Operator, les conditions suivantes doivent être remplies :

  • VMware vSphere version 7.0 Update 2 or later
  • vCenter 7.0 Update 2 or later
  • Virtual machines of hardware version 15 or later
  • Aucun pilote vSphere CSI tiers n'est déjà installé dans le cluster

Si un pilote vSphere CSI tiers est présent dans le cluster, OpenShift Container Platform ne l'écrase pas. La présence d'un pilote vSphere CSI tiers empêche OpenShift Container Platform de se mettre à niveau vers OpenShift Container Platform 4.13 ou une version ultérieure.

To remove a third-party CSI driver, see Removing a third-party vSphere CSI Driver.

5.19.6. Suppression d'un pilote d'opérateur vSphere CSI tiers

OpenShift Container Platform 4.10, et les versions ultérieures, inclut une version intégrée du pilote d'opérateur vSphere Container Storage Interface (CSI) qui est prise en charge par Red Hat. Si vous avez installé un pilote vSphere CSI fourni par la communauté ou un autre fournisseur, les mises à jour vers la prochaine version majeure d'OpenShift Container Platform, telle que 4.13, ou ultérieure, pourraient être désactivées pour votre cluster.

Les clusters OpenShift Container Platform 4.12, et ultérieurs, sont toujours entièrement pris en charge, et les mises à jour vers les versions z-stream de 4.12, telles que 4.12.z, ne sont pas bloquées, mais vous devez corriger cet état en supprimant le pilote vSphere CSI tiers avant que les mises à jour vers la prochaine version majeure d'OpenShift Container Platform ne puissent avoir lieu. La suppression du pilote vSphere CSI tiers ne nécessite pas la suppression des objets de volume persistant (PV) associés, et aucune perte de données ne devrait se produire.

Note

Ces instructions peuvent ne pas être complètes ; il convient donc de consulter le guide de désinstallation du fournisseur ou du prestataire communautaire pour s'assurer de la suppression du pilote et de ses composants.

Pour désinstaller le pilote vSphere CSI tiers :

  1. Supprimez les objets tiers vSphere CSI Driver (VMware vSphere Container Storage Plugin) Deployment et Daemonset.
  2. Supprimer les objets configmap et secret qui ont été installés précédemment avec le pilote vSphere CSI.
  3. Supprimez l'objet pilote vSphere CSI tiers CSIDriver:

    ~ $ oc delete CSIDriver csi.vsphere.vmware.com
    csidriver.storage.k8s.io "csi.vsphere.vmware.com" deleted

Une fois que vous avez supprimé le pilote vSphere CSI tiers du cluster OpenShift Container Platform, l'installation du pilote vSphere CSI Operator Driver de Red Hat reprend automatiquement, et toutes les conditions qui pourraient bloquer les mises à niveau vers OpenShift Container Platform 4.11, ou une version ultérieure, sont automatiquement supprimées. Si vous aviez des objets vSphere CSI PV existants, leur cycle de vie est maintenant géré par le pilote vSphere CSI Operator Driver de Red Hat.

5.19.7. Configuration de la topologie vSphere CSI

OpenShift Container Platform offre la possibilité de déployer OpenShift Container Platform for vSphere sur différentes zones et régions, ce qui vous permet de déployer sur plusieurs clusters de calcul, contribuant ainsi à éviter un point de défaillance unique.

Note

OpenShift Container Platform sur vSphere ne prend pas en charge plusieurs centres de données.

Pour ce faire, il faut définir des catégories de zones et de régions dans vCenter, puis assigner ces catégories à différents domaines de défaillance, tels qu'un cluster de calcul, en créant des balises pour ces catégories de zones et de régions. Après avoir créé les catégories appropriées et attribué des balises aux objets vCenter, vous pouvez créer des ensembles de machines supplémentaires qui créent des machines virtuelles (VM) responsables de la planification des pods dans ces domaines de défaillance.

Procédure

  1. Dans l'interface graphique du client VMware vCenter vSphere, définissez les catégories et les balises appropriées pour les zones et les régions.

    Bien que vSphere vous permette de créer des catégories avec n'importe quel nom arbitraire, OpenShift Container Platform recommande fortement l'utilisation des noms openshift-region et openshift-zone pour définir la topologie.

    L'exemple suivant définit deux domaines de défaillance avec une région et deux zones :

    Tableau 5.4. topologie vSphere avec une région et deux zones

    Grappe de calculDomaine de défaillanceDescription

    Cluster de calcul : ocp1, Datacenter : Atlanta

    openshift-region : us-east-1 (tag), openshift-zone : us-east-1a (tag)

    Ceci définit un domaine de défaillance dans la région us-east-1 avec la zone us-east-1a.

    Groupe d'ordinateurs : ocp2, Centre de données : Atlanta

    openshift-region : us-east-1 (tag), openshift-zone : us-east-1b (tag)

    Cela définit un domaine de défaillance différent au sein de la même région, appelé us-east-1b.

    Pour plus d'informations sur les catégories et les balises vSphere, voir la documentation VMware vSphere.

  2. Pour permettre au pilote de l'interface de stockage de conteneurs (CSI) de détecter cette topologie, modifiez le fichier YAML de l'objet clusterCSIDriver, section driverConfig:

    • Spécifiez les catégories openshift-zone et openshift-region que vous avez créées précédemment.
    • Définir driverType à vSphere.

      ~ $ oc edit clustercsidriver csi.vsphere.vmware.com -o yaml

      Exemple de sortie

      apiVersion: operator.openshift.io/v1
      kind: ClusterCSIDriver
      metadata:
       name: csi.vsphere.vmware.com
      spec:
       logLevel: Normal
       managementState: Managed
       observedConfig: null
       operatorLogLevel: Normal
       unsupportedConfigOverrides: null
       driverConfig:
        driverType: vSphere 1
          vSphere:
            topologyCategories: 2
            - openshift-zone
            - openshift-region

      1
      Assurez-vous que driverType est défini sur vSphere.
      2
      openshift-zone et openshift-region catégories créées précédemment dans vCenter.
  3. Vérifiez que l'objet CSINode possède des clés de topologie en exécutant les commandes suivantes :

    ~ $ oc get csinode

    Exemple de sortie

    NAME                        DRIVERS     AGE
    co8-4s88d-infra-2m5vd       1           27m
    co8-4s88d-master-0          1           70m
    co8-4s88d-master-1          1           70m
    co8-4s88d-master-2          1           70m
    co8-4s88d-worker-j2hmg      1           47m
    co8-4s88d-worker-mbb46      1           47m
    co8-4s88d-worker-zlk7d      1           47m

    ~ $ oc get csinode co8-4s88d-worker-j2hmg -o yaml

    Exemple de sortie

    ...
    spec:
        drivers:
        - allocatable:
            count: 59
        name: csi-vsphere.vmware.com
        nodeID: co8-4s88d-worker-j2hmg
        topologyKeys: 1
        - topology.csi.vmware.com/openshift-zone
        - topology.csi.vmware.com/openshift-region

    1
    Clés de topologie des catégories vSphere openshift-zone et openshift-region.
    Note

    CSINode peuvent mettre un certain temps à recevoir les informations topologiques mises à jour. Après la mise à jour du pilote, les objets CSINode devraient contenir des clés de topologie.

  4. Créer une balise à attribuer aux datastores dans les domaines de défaillance :

    Lorsqu'une OpenShift Container Platform s'étend sur plus d'un domaine de défaillance, le datastore peut ne pas être partagé à travers ces domaines de défaillance, c'est pourquoi le provisionnement topologique des volumes persistants (PV) est utile.

    1. Dans vCenter, créez une catégorie pour baliser les datastores. Par exemple, openshift-zonal-datastore-cat. Vous pouvez utiliser n'importe quel autre nom de catégorie, à condition que la catégorie soit utilisée uniquement pour baliser les datastores participant au cluster OpenShift Container Platform. Assurez-vous également que StoragePod, Datastore et Folder sont sélectionnés en tant qu'entités associables pour la catégorie créée.
    2. Dans vCenter, créez une balise qui utilise la catégorie précédemment créée. Cet exemple utilise le nom de balise openshift-zonal-datastore.
    3. Attribuer la balise créée précédemment (dans cet exemple openshift-zonal-datastore) à chaque datastore d'un domaine de défaillance qui serait pris en compte pour le provisionnement dynamique.

      Note

      Vous pouvez utiliser les noms de votre choix pour les catégories et les étiquettes. Les noms utilisés dans cet exemple sont fournis à titre de recommandation. Assurez-vous que les balises et les catégories que vous définissez n'identifient que les datastores qui sont partagés avec tous les hôtes du cluster OpenShift Container Platform.

  5. Créer une stratégie de stockage qui cible les datastores basés sur les balises dans chaque domaine de défaillance :

    1. Dans vCenter, dans le menu principal, cliquez sur Policies and Profiles.
    2. Sur la page Policies and Profiles, dans le volet de navigation, cliquez sur VM Storage Policies.
    3. Cliquez sur CREATE.
    4. Saisissez un nom pour la stratégie de stockage.
    5. Pour les règles, choisissez Tag Placement rules et sélectionnez la balise et la catégorie qui cible les datastores souhaités (dans cet exemple, la balise openshift-zonal-datastore ).

      Les magasins de données sont répertoriés dans le tableau de compatibilité du stockage.

  6. Créez une nouvelle classe de stockage qui utilise la nouvelle politique de stockage zoné :

    1. Cliquez sur Storage > StorageClasses.
    2. Sur la page StorageClasses, cliquez sur Create StorageClass.
    3. Saisissez un nom pour la nouvelle classe de stockage à l'adresse Name.
    4. Sous Provisioner, sélectionnez csi.vsphere.vmware.com.
    5. Sous Additional parameters, pour le paramètre StoragePolicyName, définissez Value comme étant le nom de la nouvelle stratégie de stockage zoné que vous avez créée précédemment.
    6. Cliquez sur Create.

      Exemple de sortie

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: zoned-sc 1
      provisioner: csi.vsphere.vmware.com
      parameters:
        StoragePolicyName: zoned-storage-policy 2
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer

      1
      Nouveau nom de classe de stockage tenant compte de la topologie.
      2
      Spécifier la politique de stockage par zones.
      Note

      Vous pouvez également créer la classe de stockage en modifiant le fichier YAML précédent et en exécutant la commande oc create -f $FILE.

Résultats

La création de réclamations de volumes persistants (PVC) et de PV à partir de la classe de stockage adaptée à la topologie est véritablement zonale et devrait utiliser le magasin de données dans leur zone respective en fonction de la façon dont les pods sont planifiés :

~ $ oc get pv <pv-name> -o yaml

Exemple de sortie

...
nodeAffinity:
  required:
    nodeSelectorTerms:
    - matchExpressions:
      - key: topology.csi.vmware.com/openshift-zone 1
        operator: In
        values:
        - <openshift-zone>
      -key: topology.csi.vmware.com/openshift-region 2
        operator: In
        values:
        - <openshift-region>
...
peristentVolumeclaimPolicy: Delete
storageClassName: <zoned-storage-class-name> 3
volumeMode: Filesystem
...

1 2
Le PV a des clés zonées.
3
PV utilise la classe de stockage zonée.

5.19.8. Ressources supplémentaires

Chapitre 6. Volumes éphémères génériques

6.1. Vue d'ensemble

Les volumes éphémères génériques sont un type de volume éphémère qui peut être fourni par tous les pilotes de stockage qui prennent en charge les volumes persistants et le provisionnement dynamique. Les volumes éphémères génériques sont similaires aux volumes emptyDir dans la mesure où ils fournissent un répertoire par pod pour les données scratch, qui est généralement vide après le provisionnement.

Les volumes éphémères génériques sont spécifiés en ligne dans les spécifications du module et suivent le cycle de vie du module. Ils sont créés et supprimés en même temps que le module.

Les volumes éphémères génériques présentent les caractéristiques suivantes :

  • Le stockage peut être local ou relié au réseau.
  • Les volumes peuvent avoir une taille fixe que les pods ne peuvent pas dépasser.
  • Les volumes peuvent contenir des données initiales, en fonction du pilote et des paramètres.
  • Les opérations habituelles sur les volumes sont prises en charge, à condition que le pilote les prenne en charge, notamment la prise d'instantanés, le clonage, le redimensionnement et le suivi de la capacité de stockage.
Note

Les volumes éphémères génériques ne prennent pas en charge les instantanés hors ligne et le redimensionnement.

En raison de cette limitation, les pilotes CSI (Container Storage Interface) suivants ne prennent pas en charge les fonctionnalités suivantes pour les volumes éphémères génériques :

  • Le pilote Azure Disk CSI ne prend pas en charge le redimensionnement.
  • Le pilote Cinder CSI ne prend pas en charge les instantanés.

6.2. Cycle de vie et revendications de volumes persistants

Les paramètres d'une demande de volume sont autorisés à l'intérieur d'une source de volume d'un module. Les étiquettes, les annotations et l'ensemble des champs pour les demandes de volumes persistants (PVC) sont pris en charge. Lorsqu'un tel module est créé, le contrôleur de volume éphémère crée alors un objet PVC réel (à partir du modèle présenté dans la procédure Creating generic ephemeral volumes ) dans le même espace de noms que le module, et s'assure que le PVC est supprimé lorsque le module est supprimé. Cela déclenche la liaison de volume et le provisionnement de deux manières :

  • Soit immédiatement, si la classe de stockage utilise la liaison de volume immédiate.

    Avec la liaison immédiate, l'ordonnanceur est obligé de sélectionner un nœud qui a accès au volume dès qu'il est disponible.

  • Lorsque le pod est provisoirement programmé sur un nœud (WaitForFirstConsumervolume binding mode).

    Cette option de liaison de volume est recommandée pour les volumes éphémères génériques, car l'ordonnanceur peut alors choisir un nœud approprié pour le module.

En termes de propriété des ressources, un pod qui dispose d'un stockage éphémère générique est le propriétaire des PVC qui fournissent ce stockage éphémère. Lorsque le pod est supprimé, le garbage collector de Kubernetes supprime le PVC, ce qui déclenche généralement la suppression du volume car la politique de récupération par défaut des classes de stockage consiste à supprimer les volumes. Vous pouvez créer un stockage local quasi-éphémère en utilisant une classe de stockage dont la politique de récupération est de conserver : le stockage survit au pod et, dans ce cas, vous devez vous assurer que le nettoyage du volume s'effectue séparément. Tant que ces PVC existent, ils peuvent être utilisés comme n'importe quel autre PVC. En particulier, ils peuvent être référencés comme source de données dans le clonage de volume ou l'instantané. L'objet PVC contient également l'état actuel du volume.

6.3. Sécurité

Vous pouvez activer la fonctionnalité de volume éphémère générique pour permettre aux utilisateurs qui peuvent créer des pods de créer également des réclamations de volume persistant (PVC) indirectement. Cette fonctionnalité fonctionne même si ces utilisateurs n'ont pas la permission de créer des PVC directement. Les administrateurs de clusters doivent en être conscients. Si cela ne correspond pas à votre modèle de sécurité, utilisez un webhook d'admission qui rejette les objets tels que les pods qui ont un volume éphémère générique.

Le quota normal de l'espace de noms pour les PVC s'applique toujours, de sorte que même si les utilisateurs sont autorisés à utiliser ce nouveau mécanisme, ils ne peuvent pas l'utiliser pour contourner d'autres politiques.

6.4. Nommage des volumes persistants

Les réclamations de volumes persistants (PVC) créées automatiquement sont nommées par une combinaison du nom du pod et du nom du volume, avec un trait d'union (-) au milieu. Cette convention de dénomination introduit également un conflit potentiel entre différents pods, et entre les pods et les PVC créés manuellement.

Par exemple, pod-a avec le volume scratch et pod avec le volume a-scratch se retrouvent tous deux avec le même nom de PVC, pod-a-scratch.

De tels conflits sont détectés et un PVC n'est utilisé pour un volume éphémère que s'il a été créé pour le pod. Cette vérification est basée sur la relation de propriété. Un PVC existant n'est ni écrasé ni modifié, mais cela ne résout pas le conflit. Sans le bon PVC, un pod ne peut pas démarrer.

Important

Soyez prudent lorsque vous nommez des pods et des volumes dans le même espace de noms afin d'éviter les conflits de noms.

6.5. Création de volumes éphémères génériques

Procédure

  1. Créez la définition de l'objet pod et enregistrez-la dans un fichier.
  2. Inclure les informations génériques sur le volume éphémère dans le fichier.

    my-example-pod-with-generic-vols.yaml

    kind: Pod
    apiVersion: v1
    metadata:
      name: my-app
    spec:
      containers:
        - name: my-frontend
          image: busybox:1.28
          volumeMounts:
          - mountPath: "/mnt/storage"
            name: data
          command: [ "sleep", "1000000" ]
      volumes:
        - name: data 1
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-app-ephvol
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: "gp2-csi"
                resources:
                  requests:
                    storage: 1Gi

    1
    Demande générique de volume éphémère

Chapitre 7. Extension des volumes persistants

7.1. Activation de la prise en charge de l'extension de volume

Avant de pouvoir étendre les volumes persistants, l'objet StorageClass doit avoir le champ allowVolumeExpansion défini sur true.

Procédure

  • Modifiez l'objet StorageClass et ajoutez l'attribut allowVolumeExpansion en exécutant la commande suivante :

    oc edit storageclass <storage_class_name> $ oc edit storageclass <storage_class_name> 1
    1
    Spécifie le nom de la classe de stockage.

    L'exemple suivant montre comment ajouter cette ligne au bas de la configuration de la classe de stockage.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    ...
    parameters:
      type: gp2
    reclaimPolicy: Delete
    allowVolumeExpansion: true 1
    1
    La définition de cet attribut à true permet d'étendre les PVC après leur création.

7.2. Augmentation des volumes d'ISC

Vous pouvez utiliser l'interface de stockage des conteneurs (CSI) pour étendre les volumes de stockage une fois qu'ils ont été créés.

L'expansion du volume CSI ne prend pas en charge les éléments suivants :

  • Récupération en cas d'échec lors de l'expansion des volumes
  • Rétrécissement

Conditions préalables

  • Le pilote CSI sous-jacent prend en charge le redimensionnement.
  • Le provisionnement dynamique est utilisé.
  • L'objet contrôlant StorageClass a pour valeur allowVolumeExpansion et pour valeur true. Pour plus d'informations, voir "Activation de la prise en charge de l'extension de volume"

Procédure

  1. Pour la revendication de volume persistant (PVC), définissez .spec.resources.requests.storage à la nouvelle taille souhaitée.
  2. Surveillez le champ status.conditions du PVC pour voir si le redimensionnement est terminé. OpenShift Container Platform ajoute la condition Resizing au PVC pendant l'expansion, qui est supprimée une fois l'expansion terminée.

7.3. Extension du FlexVolume avec un pilote pris en charge

Lorsque vous utilisez FlexVolume pour vous connecter à votre système de stockage dorsal, vous pouvez étendre les volumes de stockage persistant après leur création. Pour ce faire, il faut mettre à jour manuellement la revendication de volume persistant (PVC) dans OpenShift Container Platform.

Le FlexVolume peut être étendu si le pilote est configuré avec RequiresFSResize à true. Le FlexVolume peut être étendu lors du redémarrage du pod.

Comme les autres types de volumes, les volumes FlexVolume peuvent également être étendus lorsqu'ils sont utilisés par un pod.

Conditions préalables

  • Le pilote de volume sous-jacent prend en charge le redimensionnement.
  • Le pilote est configuré avec la capacité RequiresFSResize pour true.
  • Le provisionnement dynamique est utilisé.
  • L'objet contrôlant StorageClass a pour valeur allowVolumeExpansion et pour valeur true.

Procédure

  • Pour utiliser le redimensionnement dans le plugin FlexVolume, vous devez implémenter l'interface ExpandableVolumePlugin à l'aide de ces méthodes :

    RequiresFSResize
    Si true, la capacité est mise à jour directement. Si false, il appelle la méthode ExpandFS pour terminer le redimensionnement du système de fichiers.
    ExpandFS
    Si true, il appelle ExpandFS pour redimensionner le système de fichiers après l'expansion du volume physique. Le pilote de volume peut également effectuer le redimensionnement du volume physique en même temps que le redimensionnement du système de fichiers.
Important

OpenShift Container Platform ne prenant pas en charge l'installation de plugins FlexVolume sur les nœuds du plan de contrôle, elle ne prend pas en charge l'expansion du plan de contrôle de FlexVolume.

7.4. Augmentation des volumes locaux

Vous pouvez étendre manuellement les volumes persistants (PV) et les réclamations de volumes persistants (PVC) créés à l'aide de l'opérateur de stockage local (LSO).

Procédure

  1. Étendre les dispositifs sous-jacents. Veillez à ce que la capacité appropriée soit disponible sur ces appareils.
  2. Mettez à jour les objets PV correspondants pour qu'ils correspondent aux nouvelles tailles des appareils en modifiant le champ .spec.capacity du PV.
  3. Pour la classe de stockage utilisée pour lier le PVC à PVet, définir allowVolumeExpansion:true.
  4. Pour le PVC, régler .spec.resources.requests.storage pour qu'il corresponde à la nouvelle taille.

Kubelet doit automatiquement étendre le système de fichiers sous-jacent sur le volume, si nécessaire, et mettre à jour le champ d'état du PVC pour refléter la nouvelle taille.

7.5. Extension des réclamations de volumes persistants (PVC) à l'aide d'un système de fichiers

L'extension des PVC basés sur des types de volumes nécessitant un redimensionnement du système de fichiers, tels que GCE, EBS et Cinder, est un processus en deux étapes. Tout d'abord, développez les objets de volume dans le fournisseur de cloud. Deuxièmement, développer le système de fichiers sur le nœud.

L'extension du système de fichiers sur le nœud ne se produit que lorsqu'un nouveau module est démarré avec le volume.

Conditions préalables

  • L'objet contrôlant StorageClass doit avoir allowVolumeExpansion fixé à true.

Procédure

  1. Editez le PVC et demandez une nouvelle taille en éditant spec.resources.requests. Par exemple, ce qui suit étend le PVC ebs à 8 Gi :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: ebs
    spec:
      storageClass: "storageClassWithFlagSet"
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi 1
    1
    La mise à jour de spec.resources.requests pour un montant plus élevé élargit le PVC.
  2. Une fois que le redimensionnement de l'objet du fournisseur de cloud est terminé, le PVC est défini sur FileSystemResizePending. Vérifiez la condition en entrant la commande suivante :

    oc describe pvc <nom_du_vc>
  3. Lorsque le redimensionnement de l'objet fournisseur de cloud est terminé, l'objet PersistentVolume reflète la nouvelle taille demandée dans PersistentVolume.Spec.Capacity. À ce stade, vous pouvez créer ou recréer un nouveau module à partir du PVC pour terminer le redimensionnement du système de fichiers. Une fois que le pod fonctionne, la nouvelle taille demandée est disponible et la condition FileSystemResizePending est supprimée du PVC.

7.6. Récupération en cas d'échec lors de l'expansion des volumes

Si l'extension du stockage sous-jacent échoue, l'administrateur d'OpenShift Container Platform peut récupérer manuellement l'état de la revendication de volume persistant (PVC) et annuler les demandes de redimensionnement. Sinon, les demandes de redimensionnement sont continuellement relancées par le contrôleur.

Procédure

  1. Marquez le volume persistant (PV) lié au PVC avec la politique de récupération Retain. Pour ce faire, modifiez le PV et remplacez persistentVolumeReclaimPolicy par Retain.
  2. Supprimer le PVC.
  3. Modifiez manuellement le PV et supprimez l'entrée claimRef des spécifications du PV pour vous assurer que le PVC nouvellement créé peut se lier au PV marqué Retain. Ceci marque le PV comme étant Available.
  4. Recréer le PVC dans une taille plus petite, ou une taille qui peut être allouée par le fournisseur de stockage sous-jacent.
  5. Définir le champ volumeName du PVC au nom du PV. Cela lie le PVC au PV provisionné uniquement.
  6. Rétablir la politique de récupération sur le PV.

Ressources supplémentaires

Chapitre 8. Provisionnement dynamique

8.1. À propos du provisionnement dynamique

L'objet ressource StorageClass décrit et classifie le stockage qui peut être demandé, et fournit un moyen de transmettre des paramètres pour le stockage dynamique à la demande. Les objets StorageClass peuvent également servir de mécanisme de gestion pour contrôler les différents niveaux de stockage et l'accès au stockage. Les administrateurs de grappes (cluster-admin) ou les administrateurs de stockage (storage-admin) définissent et créent les objets StorageClass que les utilisateurs peuvent demander sans avoir besoin d'une connaissance détaillée des sources de volume de stockage sous-jacentes.

Le cadre de volume persistant d'OpenShift Container Platform permet cette fonctionnalité et permet aux administrateurs de provisionner un cluster avec un stockage persistant. Ce cadre permet également aux utilisateurs de demander ces ressources sans avoir aucune connaissance de l'infrastructure sous-jacente.

De nombreux types de stockage sont disponibles pour une utilisation en tant que volumes persistants dans OpenShift Container Platform. Alors qu'ils peuvent tous être provisionnés statiquement par un administrateur, certains types de stockage sont créés dynamiquement à l'aide du fournisseur intégré et des API de plugin.

8.2. Plugins de provisionnement dynamique disponibles

OpenShift Container Platform fournit les plugins de provisionnement suivants, qui ont des implémentations génériques pour le provisionnement dynamique qui utilisent l'API du fournisseur configuré du cluster pour créer de nouvelles ressources de stockage :

Type de stockageNom du plugin ProvisionerNotes

Red Hat OpenStack Platform (RHOSP) Cinder

kubernetes.io/cinder

 

Interface de stockage de conteneurs (CSI) de RHOSP Manille

manila.csi.openstack.org

Une fois installés, l'OpenStack Manila CSI Driver Operator et ManilaDriver créent automatiquement les classes de stockage requises pour tous les types de partage Manila disponibles nécessaires au provisionnement dynamique.

AWS Elastic Block Store (EBS)

kubernetes.io/aws-ebs

Pour le provisionnement dynamique lors de l'utilisation de plusieurs clusters dans différentes zones, marquez chaque nœud avec Key=kubernetes.io/cluster/<cluster_name>,Value=<cluster_id><cluster_name> et <cluster_id> sont uniques par cluster.

Disque Azure

kubernetes.io/azure-disk

 

Fichier Azure

kubernetes.io/azure-file

Le compte de service persistent-volume-binder a besoin d'autorisations pour créer et obtenir des secrets afin de stocker le compte de stockage Azure et les clés.

Disque persistant de la CME (gcePD)

kubernetes.io/gce-pd

Dans les configurations multizones, il est conseillé d'exécuter un cluster OpenShift Container Platform par projet GCE afin d'éviter que des PV ne soient créés dans des zones où aucun nœud du cluster actuel n'existe.

VMware vSphere

kubernetes.io/vsphere-volume

 
Important

Tout plugin de provisionnement choisi nécessite également une configuration pour le nuage, l'hôte ou le fournisseur tiers concerné, conformément à la documentation correspondante.

8.3. Définition d'une classe de stockage

StorageClass sont actuellement des objets à portée globale et doivent être créés par les utilisateurs cluster-admin ou storage-admin.

Important

L'opérateur de stockage en cluster peut installer une classe de stockage par défaut en fonction de la plate-forme utilisée. Cette classe de stockage est détenue et contrôlée par l'opérateur. Elle ne peut pas être supprimée ou modifiée au-delà de la définition des annotations et des étiquettes. Si vous souhaitez un comportement différent, vous devez définir une classe de stockage personnalisée.

Les sections suivantes décrivent la définition de base d'un objet StorageClass et des exemples spécifiques pour chacun des types de plugins pris en charge.

8.3.1. Définition de base de l'objet StorageClass

La ressource suivante présente les paramètres et les valeurs par défaut que vous utilisez pour configurer une classe de stockage. Cet exemple utilise la définition de l'objet AWS ElasticBlockStore (EBS).

Exemple de définition StorageClass

kind: StorageClass 1
apiVersion: storage.k8s.io/v1 2
metadata:
  name: <storage-class-name> 3
  annotations: 4
    storageclass.kubernetes.io/is-default-class: 'true'
    ...
provisioner: kubernetes.io/aws-ebs 5
parameters: 6
  type: gp3
...

1
(obligatoire) Le type d'objet de l'API.
2
(obligatoire) Version actuelle de l'api.
3
(obligatoire) Nom de la classe de stockage.
4
(facultatif) Annotations pour la classe de stockage.
5
(obligatoire) Le type de provisionneur associé à cette classe de stockage.
6
(optionnel) Les paramètres requis pour le provisionneur spécifique, cela changera d'un plugin à l'autre.

8.3.2. Annotations de la classe de stockage

Pour définir une classe de stockage comme étant la classe par défaut à l'échelle du cluster, ajoutez l'annotation suivante aux métadonnées de votre classe de stockage :

storageclass.kubernetes.io/is-default-class: "true"

Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
...

Cela permet à toute demande de volume persistant (PVC) qui ne spécifie pas de classe de stockage spécifique d'être automatiquement approvisionnée par la classe de stockage par défaut. Cependant, votre cluster peut avoir plus d'une classe de stockage, mais une seule d'entre elles peut être la classe de stockage par défaut.

Note

La version bêta de l'annotation storageclass.beta.kubernetes.io/is-default-class fonctionne toujours, mais elle sera supprimée dans une prochaine version.

Pour définir la description d'une classe de stockage, ajoutez l'annotation suivante aux métadonnées de votre classe de stockage :

kubernetes.io/description: My Storage Class Description

Par exemple :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    kubernetes.io/description: My Storage Class Description
...

8.3.3. Définition de l'objet RHOSP Cinder

cinder-storageclass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: <storage-class-name> 1
provisioner: kubernetes.io/cinder
parameters:
  type: fast  2
  availability: nova 3
  fsType: ext4 4

1
Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour provisionner les volumes persistants associés.
2
Type de volume créé dans Cinder. La valeur par défaut est vide.
3
Zone de disponibilité. S'ils ne sont pas spécifiés, les volumes sont généralement arrondis dans toutes les zones actives où le cluster OpenShift Container Platform a un nœud.
4
Système de fichiers créé sur les volumes provisionnés dynamiquement. Cette valeur est copiée dans le champ fsType des volumes persistants provisionnés dynamiquement et le système de fichiers est créé lorsque le volume est monté pour la première fois. La valeur par défaut est ext4.

8.3.4. Définition de l'objet RHOSP Manila Container Storage Interface (CSI)

Une fois installés, l'OpenStack Manila CSI Driver Operator et ManilaDriver créent automatiquement les classes de stockage requises pour tous les types de partage Manila disponibles nécessaires au provisionnement dynamique.

8.3.5. Définition de l'objet AWS Elastic Block Store (EBS)

aws-ebs-storageclass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: <storage-class-name> 1
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1 2
  iopsPerGB: "10" 3
  encrypted: "true" 4
  kmsKeyId: keyvalue 5
  fsType: ext4 6

1
(obligatoire) Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour le provisionnement des volumes persistants associés.
2
(obligatoire) Choisissez parmi io1, gp3, sc1, st1. La valeur par défaut est gp3. Voir la documentation AWS pour les valeurs valides de l'Amazon Resource Name (ARN).
3
Optionnel : Uniquement pour les volumes io1. Opérations d'E/S par seconde et par gigaoctet. Le plugin de volume AWS multiplie cette valeur avec la taille du volume demandé pour calculer les IOPS du volume. La valeur maximale est de 20 000 IOPS, ce qui correspond au maximum supporté par AWS. Voir la documentation AWS pour plus de détails.
4
Facultatif : Indique s'il faut crypter le volume EBS. Les valeurs valides sont true ou false.
5
Facultatif : L'ARN complet de la clé à utiliser pour le chiffrement du volume. Si aucune valeur n'est fournie, mais que encypted est défini sur true, AWS génère une clé. Voir la documentation AWS pour une valeur ARN valide.
6
Facultatif : Système de fichiers créé sur les volumes approvisionnés dynamiquement. Cette valeur est copiée dans le champ fsType des volumes persistants provisionnés dynamiquement et le système de fichiers est créé lorsque le volume est monté pour la première fois. La valeur par défaut est ext4.

8.3.6. Définition de l'objet Azure Disk

azure-advanced-disk-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: <storage-class-name> 1
provisioner: kubernetes.io/azure-disk
volumeBindingMode: WaitForFirstConsumer 2
allowVolumeExpansion: true
parameters:
  kind: Managed 3
  storageaccounttype: Premium_LRS 4
reclaimPolicy: Delete

1
Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour provisionner les volumes persistants associés.
2
L'utilisation de WaitForFirstConsumer est fortement recommandée. Cela permet de provisionner le volume tout en laissant suffisamment de stockage pour planifier le pod sur un nœud de travail libre à partir d'une zone disponible.
3
Les valeurs possibles sont Shared (par défaut), Managed et Dedicated.
Important

Red Hat ne prend en charge que l'utilisation de kind: Managed dans la classe de stockage.

Avec Shared et Dedicated, Azure crée des disques non gérés, tandis qu'OpenShift Container Platform crée un disque géré pour les disques du système d'exploitation de la machine (racine). Mais comme Azure Disk ne permet pas l'utilisation de disques gérés et non gérés sur un nœud, les disques non gérés créés avec Shared ou Dedicated ne peuvent pas être attachés aux nœuds d'OpenShift Container Platform.

4
Niveau SKU du compte de stockage Azure. La valeur par défaut est vide. Notez que les VM Premium peuvent attacher les disques Standard_LRS et Premium_LRS, les VM Standard ne peuvent attacher que les disques Standard_LRS, les VM gérées ne peuvent attacher que les disques gérés, et les VM non gérées ne peuvent attacher que les disques non gérés.
  1. Si kind est défini sur Shared, Azure crée tous les disques non gérés dans quelques comptes de stockage partagé dans le même groupe de ressources que le cluster.
  2. Si kind est défini sur Managed, Azure crée de nouveaux disques gérés.
  3. Si kind est défini sur Dedicated et qu'un storageAccount est spécifié, Azure utilise le compte de stockage spécifié pour le nouveau disque non géré dans le même groupe de ressources que le cluster. Pour que cela fonctionne :

    • Le compte de stockage spécifié doit se trouver dans la même région.
    • Azure Cloud Provider doit avoir un accès en écriture au compte de stockage.
  4. Si kind est défini sur Dedicated et que storageAccount n'est pas spécifié, Azure crée un nouveau compte de stockage dédié pour le nouveau disque non géré dans le même groupe de ressources que le cluster.

8.3.7. Définition de l'objet Azure File

La classe de stockage Azure File utilise des secrets pour stocker le nom et la clé du compte de stockage Azure nécessaires à la création d'un partage Azure Files. Ces autorisations sont créées dans le cadre de la procédure suivante.

Procédure

  1. Définir un objet ClusterRole qui permet de créer et de consulter des secrets :

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    #  name: system:azure-cloud-provider
      name: <persistent-volume-binder-role> 1
    rules:
    - apiGroups: ['']
      resources: ['secrets']
      verbs:     ['get','create']
    1
    Nom du rôle de cluster permettant de visualiser et de créer des secrets.
  2. Ajouter le rôle de cluster au compte de service :

    oc adm policy add-cluster-role-to-user <persistent-volume-binder-role> system:serviceaccount:kube-system:persistent-volume-binder
  3. Créez l'objet Azure File StorageClass:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: <azure-file> 1
    provisioner: kubernetes.io/azure-file
    parameters:
      location: eastus 2
      skuName: Standard_LRS 3
      storageAccount: <storage-account> 4
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    1
    Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour provisionner les volumes persistants associés.
    2
    Emplacement du compte de stockage Azure, tel que eastus. La valeur par défaut est vide, ce qui signifie qu'un nouveau compte de stockage Azure sera créé à l'emplacement du cluster OpenShift Container Platform.
    3
    Niveau SKU du compte de stockage Azure, par exemple Standard_LRS. La valeur par défaut est vide, ce qui signifie qu'un nouveau compte de stockage Azure sera créé avec l'UGS Standard_LRS.
    4
    Nom du compte de stockage Azure. Si un compte de stockage est fourni, les adresses skuName et location sont ignorées. Si aucun compte de stockage n'est fourni, la classe de stockage recherche tout compte de stockage associé au groupe de ressources pour tout compte correspondant aux valeurs définies skuName et location.

8.3.7.1. Points à prendre en compte lors de l'utilisation d'Azure File

Les fonctionnalités suivantes du système de fichiers ne sont pas prises en charge par la classe de stockage Azure File par défaut :

  • Liens symboliques
  • Liens directs
  • Attributs étendus
  • Fichiers épars
  • Tuyaux nommés

De plus, l'identifiant de l'utilisateur propriétaire (UID) du répertoire monté Azure File est différent de l'UID du processus du conteneur. L'option uid mount peut être spécifiée dans l'objet StorageClass pour définir un identifiant utilisateur spécifique à utiliser pour le répertoire monté.

L'objet StorageClass suivant montre comment modifier l'identifiant de l'utilisateur et du groupe, et comment activer les liens symboliques pour le répertoire monté.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azure-file
mountOptions:
  - uid=1500 1
  - gid=1500 2
  - mfsymlinks 3
provisioner: kubernetes.io/azure-file
parameters:
  location: eastus
  skuName: Standard_LRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
1
Spécifie l'identifiant de l'utilisateur à utiliser pour le répertoire monté.
2
Spécifie l'identifiant de groupe à utiliser pour le répertoire monté.
3
Active les liens symboliques.

8.3.8. Définition de l'objet GCE PersistentDisk (gcePD)

gce-pd-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: <storage-class-name> 1
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard 2
  replication-type: none
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
reclaimPolicy: Delete

1
Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour provisionner les volumes persistants associés.
2
Sélectionnez pd-standard ou pd-ssd. La valeur par défaut est pd-standard.

8.3.9. Définition de l'objet VMware vSphere

vsphere-storageclass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: <storage-class-name> 1
provisioner: kubernetes.io/vsphere-volume 2
parameters:
  diskformat: thin 3

1
Nom de la classe de stockage. La revendication de volume persistant utilise cette classe de stockage pour provisionner les volumes persistants associés.
2
Pour plus d'informations sur l'utilisation de VMware vSphere avec OpenShift Container Platform, consultez la documentation de VMware vSphere.
3
diskformat: thin, zeroedthick et eagerzeroedthick sont tous des formats de disque valides. Voir la documentation vSphere pour plus de détails sur les types de format de disque. La valeur par défaut est thin.

8.4. Modification de la classe de stockage par défaut

Cette procédure permet de modifier la classe de stockage par défaut. Par exemple, vous avez deux classes de stockage définies, gp3 et standard, et vous souhaitez modifier la classe de stockage par défaut de gp3 à standard.

Procédure

  1. Dressez la liste des classes de stockage :

    $ oc get storageclass

    Exemple de sortie

    NAME                 TYPE
    gp3 (default)        kubernetes.io/aws-ebs 1
    standard             kubernetes.io/aws-ebs

    1
    (default) indique la classe de stockage par défaut.
  2. Changer la valeur de l'annotation storageclass.kubernetes.io/is-default-class en false pour la classe de stockage par défaut :

    $ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
  3. Faites d'une autre classe de stockage la classe par défaut en définissant l'annotation storageclass.kubernetes.io/is-default-class sur true:

    $ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
  4. Vérifiez les modifications :

    $ oc get storageclass

    Exemple de sortie

    NAME                 TYPE
    gp3                  kubernetes.io/aws-ebs
    standard (default)   kubernetes.io/aws-ebs

Note légale

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.