Stockage
Configurer et gérer le stockage dans OpenShift Container Platform
Résumé
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
, ouDelete
. - 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: {}
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.
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.
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.
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.
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'objetPersistentVolume
d'OpenShift Container Platform et la ressource de stockage associée dans l'infrastructure externe, comme AWS EBS ou VMware vSphere.
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 :
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.
- Nettoyer les données sur le support de stockage associé.
- 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 :
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
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"}''
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érationRetain
. Le volume ne sera pas automatiquement supprimé lorsqu'un utilisateur supprimera la revendicationdefault/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: ...
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 :
Mode d'accès | Abréviation CLI | Description |
---|---|---|
ReadWriteOnce |
| Le volume peut être monté en lecture-écriture par un seul nœud. |
ReadOnlyMany |
| Le volume peut être monté en lecture seule par de nombreux nœuds. |
Lecture/écriture/nombre |
| Le volume peut être monté en lecture-écriture par de nombreux nœuds. |
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.
Plugin de volume | ReadWriteOnce [1] | ReadOnlyMany | Lecture/é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] |
- 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.
- Utilisez une stratégie de déploiement par recréation pour les pods qui dépendent d'AWS EBS.
- 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 :
Phase | Description |
---|---|
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
Les PV Fibre Channel et HostPath ne prennent pas en charge les options de montage.
Ressources supplémentaires
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: ...
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.
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.
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.
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.
Plugin de volume | Approvisionnement manuel | Approvisionnement dynamique | Entiè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 | ✅ | ✅ | ✅ |
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
volumeDevices
au lieu devolumeMounts
, est utilisé pour les périphériques en bloc. Seules les sourcesPersistentVolumeClaim
peuvent être utilisées avec des volumes de blocs bruts.- 2
devicePath
au lieu demountPath
, 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.
Valeur | Défaut |
---|---|
Système de fichiers | Oui |
Bloc | Non |
PV volumeMode | PVC volumeMode | Ré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 |
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.
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.
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.
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
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
Définissez les options souhaitées sur la page qui s'affiche.
- Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
- Saisissez un nom unique pour la créance de stockage.
- 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.
- Définir la taille de la demande de stockage.
- 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.
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
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 surtrue
, la clé KMS par défaut est utilisée. Voir Finding the key ID and key ARN on A WS dans la documentation AWS.
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
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.
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.
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
- Dans la console OpenShift Container Platform, cliquez sur Storage → Storage Classes.
- Dans l'aperçu de la classe de stockage, cliquez sur Create Storage Class.
Définissez les options souhaitées sur la page qui s'affiche.
- Entrez un nom pour référencer la classe de stockage.
- Saisissez une description facultative.
- Sélectionnez la politique de récupération.
Sélectionnez
kubernetes.io/azure-disk
dans la liste déroulante.-
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
etUltraSSD_LRS
. Saisissez le type de compte. Les options valables sont
shared
,dedicated,
etmanaged
.ImportantRed Hat ne prend en charge que l'utilisation de
kind: Managed
dans la classe de stockage.Avec
Shared
etDedicated
, 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 avecShared
ouDedicated
ne peuvent pas être attachés aux nœuds d'OpenShift Container Platform.
-
Saisissez le type de compte de stockage. Cela correspond au niveau SKU de votre compte de stockage Azure. Les options valides sont
- Saisissez des paramètres supplémentaires pour la classe de stockage si vous le souhaitez.
- 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
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
Définissez les options souhaitées sur la page qui s'affiche.
- Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
- Saisissez un nom unique pour la créance de stockage.
- 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.
- Définir la taille de la demande de stockage.
- 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.
Ressources supplémentaires
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
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>
où
<machine-set-name>
est l'ensemble de machines que vous voulez provisionner avec des ultra-disques.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
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
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, utilisezkubernetes.io/azure-disk
. - 5
- Facultatif : Ce paramètre permet d'attendre la création du module qui utilisera le disque.
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
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
Vérification
Validez la création des machines en exécutant la commande suivante :
$ oc get machines
Les machines doivent être dans l'état
Running
.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éechroot /host
permet d'accéder aux binaires du système d'exploitation hôte sous-jacent, etlsblk
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.
La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.
Les volumes Azure File utilisent le bloc de messages du serveur.
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
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
Créez un objet
PersistentVolume
qui fait référence à l'objetSecret
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
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.
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
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.
ImportantNe 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.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
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>
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.
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.
La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.
Ressources supplémentaires
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 FCtargetWWNs
etlun
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 compris0x
, et tout ce qui suit, y compris-
(trait d'union).
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
FlexVolume est une fonctionnalité obsolète. Les fonctionnalités obsolètes sont toujours incluses dans OpenShift Container Platform et continuent d'être prises en charge ; cependant, elles seront supprimées dans une prochaine version de ce produit et ne sont pas recommandées pour les nouveaux déploiements.
Le pilote Out-of-tree Container Storage Interface (CSI) est la manière recommandée d'écrire des pilotes de volume dans OpenShift Container Platform. Les mainteneurs des pilotes FlexVolume devraient implémenter un pilote CSI et déplacer les utilisateurs de FlexVolume vers CSI. Les utilisateurs de FlexVolume devraient déplacer leurs charges de travail vers le pilote CSI.
Pour obtenir la liste la plus récente des fonctionnalités majeures qui ont été dépréciées ou supprimées dans OpenShift Container Platform, consultez la section Deprecated and removed features des notes de version d'OpenShift Container Platform.
OpenShift Container Platform prend en charge FlexVolume, un plugin hors arbre qui utilise un modèle exécutable pour s'interfacer avec les pilotes.
Pour utiliser le stockage à partir d'un back-end qui n'a pas de plugin intégré, vous pouvez étendre OpenShift Container Platform par le biais de pilotes FlexVolume et fournir un stockage persistant aux applications.
Les pods interagissent avec les pilotes FlexVolume par l'intermédiaire du plugin in-tree flexvolume
.
Ressources supplémentaires
4.6.1. À propos des pilotes FlexVolume
Un pilote FlexVolume est un fichier exécutable qui réside dans un répertoire bien défini sur tous les nœuds du cluster. OpenShift Container Platform appelle le pilote FlexVolume chaque fois qu'il doit monter ou démonter un volume représenté par un objet PersistentVolume
dont la source est flexVolume
.
Les opérations d'attachement et de détachement ne sont pas prises en charge dans OpenShift Container Platform for FlexVolume.
4.6.2. Exemple de pilote FlexVolume
Le premier argument de la ligne de commande du pilote FlexVolume est toujours un nom d'opération. Les autres paramètres sont spécifiques à chaque opération. La plupart des opérations prennent en paramètre une chaîne JavaScript Object Notation (JSON). Ce paramètre est une chaîne JSON complète, et non le nom d'un fichier contenant les données JSON.
Le pilote FlexVolume contient
-
Tous les
flexVolume.options
. -
Certaines options de
flexVolume
préfixées parkubernetes.io/
, telles quefsType
etreadwrite
. -
Le contenu du secret référencé, s'il est spécifié, préfixé par
kubernetes.io/secret/
.
Exemple d'entrée JSON du pilote FlexVolume
{ "fooServer": "192.168.0.1:1234", 1 "fooVolumeName": "bar", "kubernetes.io/fsType": "ext4", 2 "kubernetes.io/readwrite": "ro", 3 "kubernetes.io/secret/<key name>": "<key value>", 4 "kubernetes.io/secret/<another key name>": "<another key value>", }
OpenShift Container Platform attend des données JSON sur la sortie standard du pilote. Si rien n'est spécifié, la sortie décrit le résultat de l'opération.
Exemple de sortie par défaut du pilote FlexVolume
{ "status": "<Success/Failure/Not supported>", "message": "<Reason for success/failure>" }
Le code de sortie du pilote doit être 0
en cas de succès et 1
en cas d'erreur.
Les opérations doivent être idempotentes, ce qui signifie que le montage d'un volume déjà monté doit aboutir à une opération réussie.
4.6.3. Installation des pilotes FlexVolume
Les pilotes FlexVolume qui sont utilisés pour étendre OpenShift Container Platform sont exécutés uniquement sur le nœud. Pour mettre en œuvre FlexVolumes, une liste d'opérations à appeler et le chemin d'installation sont tout ce qui est nécessaire.
Conditions préalables
Les pilotes FlexVolume doivent implémenter ces opérations :
init
Initialise le pilote. Il est appelé lors de l'initialisation de tous les nœuds.
- Arguments : aucun
- Exécuté sur : node
- Résultat attendu : JSON par défaut
mount
Monte un volume dans un répertoire. Cela peut inclure tout ce qui est nécessaire pour monter le volume, y compris la recherche du périphérique, puis le montage du périphérique.
-
Arguments :
<mount-dir>
<json>
- Exécuté sur : node
- Résultat attendu : JSON par défaut
-
Arguments :
unmount
Démonte un volume à partir d'un répertoire. Cela peut inclure tout ce qui est nécessaire pour nettoyer le volume après le démontage.
-
Arguments :
<mount-dir>
- Exécuté sur : node
- Résultat attendu : JSON par défaut
-
Arguments :
mountdevice
- Monte le périphérique d'un volume dans un répertoire où les pods individuels peuvent ensuite lier le montage.
Cet appel ne passe pas les "secrets" spécifiés dans la spécification FlexVolume. Si votre pilote exige des secrets, n'implémentez pas cet appel.
-
Arguments :
<mount-dir>
<json>
- Exécuté sur : node
Résultat attendu : JSON par défaut
unmountdevice
- Démonte le périphérique d'un volume à partir d'un répertoire.
-
Arguments :
<mount-dir>
- Exécuté sur : node
Résultat attendu : JSON par défaut
-
Toutes les autres opérations doivent renvoyer JSON avec
{"status": "Not supported"}
et le code de sortie1
.
-
Toutes les autres opérations doivent renvoyer JSON avec
Procédure
Pour installer le pilote FlexVolume :
- Assurez-vous que le fichier exécutable existe sur tous les nœuds du cluster.
-
Placez le fichier exécutable dans le chemin d'accès au plugin du volume :
/etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>
.
Par exemple, pour installer le pilote FlexVolume pour le stockage foo
, placez le fichier exécutable à l'adresse suivante : /etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo
.
4.6.4. Consommation de stockage à l'aide de pilotes FlexVolume
Chaque objet PersistentVolume
dans OpenShift Container Platform représente un actif de stockage dans le back-end de stockage, tel qu'un volume.
Procédure
-
Utilisez l'objet
PersistentVolume
pour référencer le stockage installé.
Exemple de définition d'un objet de volume persistant à l'aide des pilotes FlexVolume
apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 1 spec: capacity: storage: 1Gi 2 accessModes: - ReadWriteOnce flexVolume: driver: openshift.com/foo 3 fsType: "ext4" 4 secretRef: foo-secret 5 readOnly: true 6 options: 7 fooServer: 192.168.0.1:1234 fooVolumeName: bar
- 1
- Le nom du volume. C'est ainsi qu'il est identifié par les réclamations de volumes persistants ou par les pods. Ce nom peut être différent du nom du volume sur le stockage final.
- 2
- La quantité de stockage allouée à ce volume.
- 3
- Le nom du conducteur. Ce champ est obligatoire.
- 4
- Système de fichiers présent sur le volume. Ce champ est facultatif.
- 5
- La référence à un secret. Les clés et les valeurs de ce secret sont fournies au pilote FlexVolume lors de l'invocation. Ce champ est facultatif.
- 6
- L'indicateur de lecture seule. Ce champ est facultatif.
- 7
- Les options supplémentaires pour le pilote FlexVolume. Outre les options spécifiées par l'utilisateur dans le champ
options
, les options suivantes sont également transmises à l'exécutable :"fsType":"<FS type>", "readwrite":"<rw>", "secret/key1":"<secret1>" ... "secret/keyN":"<secretN>"
Les secrets ne sont transmis que pour monter ou démonter des call-outs.
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.
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.
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
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
Définissez les options souhaitées sur la page qui s'affiche.
- Sélectionnez la classe de stockage précédemment créée dans le menu déroulant.
- Saisissez un nom unique pour la créance de stockage.
- 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.
- Définir la taille de la demande de stockage.
- 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.
La haute disponibilité du stockage dans l'infrastructure est laissée au fournisseur de stockage sous-jacent.
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
.
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
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é.
NoteChaque volume NFS doit pouvoir être monté par tous les nœuds programmables du cluster.
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
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: ""
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.
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.
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
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é.
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
.
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
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égierunAsUser
, 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é.
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 SELinuxvirt_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) et111
(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 |
|
Désactivation du mappage d'identifiants sur NFSv4 |
|
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.
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.
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.
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
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
Définissez les options requises sur la page résultante.
-
Sélectionnez la classe de stockage
thin
. - Saisissez un nom unique pour la créance de stockage.
- 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.
- Définir la taille de la demande de stockage.
-
Sélectionnez la classe de stockage
- 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)
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
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
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
Créez un volume persistant qui référence les VMDK. Créez un fichier,
pv1.yaml
, avec la définition de l'objetPersistentVolume
: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.
ImportantLa 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.
Créer l'objet
PersistentVolume
à partir du fichier :$ oc create -f pv1.yaml
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'objetPersistentVolumeClaim
: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.
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.
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
Créez le projet
openshift-local-storage
:$ oc adm new-project openshift-local-storage
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 :
- Connectez-vous à la console web de OpenShift Container Platform.
- Naviguez jusqu'à Operators → OperatorHub.
- Tapez Local Storage dans le champ de filtre pour localiser l'opérateur de stockage local.
- Cliquez sur Install.
- Sur la page Install Operator, sélectionnez A specific namespace on the cluster. Sélectionnez openshift-local-storage dans le menu déroulant.
- Ajustez les valeurs de Update Channel et Approval Strategy aux valeurs que vous souhaitez.
- 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)
Installez l'opérateur de stockage local à partir de l'interface de gestion.
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)
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.
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.
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 :
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
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
Créer la ressource volume local. Cette ressource doit définir les nœuds et les chemins d'accès aux volumes locaux.
NoteN'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
ouBlock
, qui définit le type de volumes locaux.NoteUn 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.NoteSi 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
ouBlock
, 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 exempledev/disk/by-id/wwn
. Les PV sont créés pour ces disques locaux lorsque le provisionneur est déployé avec succès.
NoteSi 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>
.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
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.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
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.
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
Définir le PV. Créez un fichier, tel que
example-pv-filesystem.yaml
ouexample-pv-block.yaml
, avec la définition de l'objetPersistentVolume
. Cette ressource doit définir les nœuds et les chemins d'accès aux volumes locaux.NoteN'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
ouBlock
, 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
.
NoteUn 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
ouBlock
, 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.
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
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
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
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
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.
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.
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.
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
Pour activer la découverte automatique des appareils locaux à partir de la console web :
- Dans la perspective Administrator, naviguez vers Operators → Installed Operators et cliquez sur l'onglet Local Volume Discovery.
- Cliquez sur Create Local Volume Discovery.
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.
NoteSeuls les nœuds de travail sont disponibles, que vous filtriez à l'aide de All nodes ou de Select nodes.
- Cliquez sur Create.
Une instance de découverte de volume local nommée auto-discover-devices
est affichée.
Pour afficher une liste continue des dispositifs disponibles sur un nœud :
- Connectez-vous à la console web de OpenShift Container Platform.
- Naviguez jusqu'à Compute → Nodes.
- Cliquez sur le nom du nœud que vous souhaitez ouvrir. La page "Détails du nœud" s'affiche.
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.
Pour provisionner automatiquement des volumes locaux pour les appareils découverts à partir de la console web :
- Naviguez jusqu'à Operators → Installed Operators et sélectionnez Local Storage dans la liste des opérateurs.
- Sélectionnez Local Volume Set → Create Local Volume Set.
- Saisissez un nom d'ensemble de volumes et un nom de classe de stockage.
Choisissez All nodes ou Select nodes pour appliquer des filtres en conséquence.
NoteSeuls les nœuds de travail sont disponibles, que vous filtriez à l'aide de All nodes ou de Select nodes.
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
Il est également possible de provisionner des volumes locaux pour les appareils découverts à partir de la CLI :
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).
Créer l'objet jeu de volume local :
$ oc apply -f local-volume-set.yaml
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
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.
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 :
Modifiez le fichier YAML qui définit le site
Pod
et ajoutez la spécificationLocalVolume
, 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ètreskey
/value
correspondent. Si l'opérateur estExists
, le système vérifie que la clé existe et ignore la valeur. Si l'opérateur estEqual
, la clé et la valeur doivent correspondre. - 3
- Indiquer la valeur
local
du nœud altéré. - 4
- Le mode de volume, soit
Filesystem
ouBlock
, définissant le type de volumes locaux. - 5
- Chemin d'accès contenant une liste de périphériques de stockage locaux à sélectionner.
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_count
nombre total de dispositifs découverts sur chaque nœud -
lso_lvset_provisioned_PV_count
nombre total de PV créés par les objetsLocalVolumeSet
-
lso_lvset_unmatched_disk_count
nombre 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_count
nombre d'appareils dont les PV ne correspondent plus aux critères de l'objetLocalVolumeSet
-
lso_lv_orphaned_symlink_count
nombre d'appareils dont les PV ne correspondent plus aux critères de l'objetLocalVolume
-
lso_lv_provisioned_PV_count
nombre total de PV provisionnées pourLocalVolume
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.
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
ouAvailable
.AvertissementLa suppression d'un volume persistant encore en cours d'utilisation peut entraîner la perte ou la corruption de données.
Procédure
Modifiez le volume local précédemment créé pour supprimer les disques indésirables.
Modifiez la ressource du cluster :
oc edit localvolume <name> -n openshift-local-storage
-
Naviguez jusqu'aux lignes sous
devicePaths
, et supprimez tous les disques non désirés.
Supprimer tous les volumes persistants créés.
oc delete pv <pv-name> $ oc delete pv <pv-name>
Supprimer tous les liens symboliques sur le nœud.
AvertissementL'é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.
Créer un pod de débogage sur le nœud :
$ oc debug node/<node-name>
Changez votre répertoire racine en
/host
:$ chroot /host
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.
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
.
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
Supprimez toutes les ressources de volume local installées dans le projet, telles que
localvolume
,localvolumeset
, etlocalvolumediscovery
:$ oc delete localvolume --all --all-namespaces $ oc delete localvolumeset --all --all-namespaces $ oc delete localvolumediscovery --all --all-namespaces
Désinstallez l'Opérateur de stockage local à partir de la console web.
- Connectez-vous à la console web de OpenShift Container Platform.
- Naviguez jusqu'à Operators → Installed Operators.
- Tapez Local Storage dans le champ de filtre pour localiser l'opérateur de stockage local.
-
Cliquez sur le menu Options
à la fin de l'opérateur de stockage local.
- Cliquez sur Uninstall Operator.
- Cliquez sur Remove dans la fenêtre qui s'affiche.
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>
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.
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.
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
Définir le volume persistant (PV). Créer un fichier,
pv.yaml
, avec la définition de l'objetPersistentVolume
: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
.
Créer le PV à partir du fichier :
$ oc create -f pv.yaml
Définir la revendication de volume persistant (PVC). Créez un fichier,
pvc.yaml
, avec la définition de l'objetPersistentVolumeClaim
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: task-pvc-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: manual
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 CRLVMCluster
. -
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.
Architecture | RHEL 5 | RHEL 6 | RHEL 7 | RHEL 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 |
- Taille théorique.
- Taille testée.
Ressources supplémentaires
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
- Connectez-vous à la console Web de OpenShift Container Platform.
- Cliquez sur Operators → OperatorHub.
-
Faites défiler ou tapez
LVM Storage
dans la boîte Filter by keyword pour trouver LVM Storage. - Cliquez sur Install.
Définissez les options suivantes sur la page Install Operator:
- Update Channel comme stable-4.12.
- Installation Mode comme A specific namespace on the cluster.
-
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. 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.
- 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
-
À partir de la page Operators → Installed Operators, faites défiler jusqu'à LVM Storage ou tapez
LVM Storage
dans Filter by name pour le trouver et cliquez dessus. - Cliquez sur l'onglet LVMCluster.
- Dans la partie droite de la page LVMCluster, sélectionnez Delete LVMCluster dans le menu déroulant Actions.
- Cliquez sur l'onglet Details.
- Dans la partie droite de la page Operator Details, sélectionnez Uninstall Operator dans le menu déroulant Actions.
- 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
- Connectez-vous au CLI RHACM en utilisant vos identifiants OpenShift Container Platform.
Créez un espace de noms dans lequel vous créerez des politiques.
# oc create ns lvms-policy-ns
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 YAMLLVMCluster
. - 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.
ImportantCette correspondance de filtre de nœud
nodeSelector
n'est pas la même que la correspondance d'étiquette de pod.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 objetPlacementRule
et un objetPlacementBinding
dans l'espace de nomslvms-policy-ns
. La politique crée une ressourceNamespace
,OperatorGroup
,Subscription
, etLVMCluster
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 CRLVMCluster
. Si aucun disque n'est spécifié, l'opérateur utilise tous les disques inutilisés sur le nœud unique OpenShift.ImportantUne 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 :
- Supprimez toutes les réclamations de volumes persistants (PVC) et les instantanés de volumes fournis par LVM Storage.
-
Supprimez les ressources
LVMCluster
pour nettoyer les ressources du Logical Volume Manager créées sur les disques. - 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
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.
Pour créer une politique de suppression de la ressource
LVMCluster
, enregistrez le fichier YAML suivant dans un fichier portant un nom tel quelvms-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
-
Définissez la valeur du champ
PlacementRule.spec.clusterSelector
pour sélectionner les clusters à partir desquels désinstaller le stockage LVM. Créez la politique en exécutant la commande suivante :
# oc create -f lvms-remove-policy.yaml -n lvms-policy-ns
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 quecheck-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
Créez la politique en exécutant la commande suivante :
# oc create -f check-lvms-remove-policy.yaml -n lvms-policy-ns
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
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
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.
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
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
.- Cliquez sur LVM Storage, puis sur Create LVMCluster sous LVMCluster.
- Dans la page Create LVMCluster, sélectionnez Form view ou YAML view.
- Entrez un nom pour le cluster.
- Cliquez sur Create.
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
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
- Cliquez sur Storage → Storage Classes dans le volet gauche de la console Web OpenShift Container Platform.
-
Vérifiez que la classe de stockage
lvms-<device-class-name>
est créée avec la création deLVMCluster
. Par défaut,vg1
est la classe de stockagedevice-class-name
.
Ressources supplémentaires
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éé.
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
Identifiez le site
StorageClass
qui est créé lorsque le stockage LVM est déployé.Le nom
StorageClass
est au formatlvms-<device-class-name>
.device-class-name
est le nom de la classe d'appareil que vous avez fourni dansLVMCluster
dePolicy
YAML. Par exemple, si le sitedeviceClass
s'appellevg1
, le nomstorageClass
estlvms-vg1
.Le site
volumeBindingMode
de la classe de stockage est défini surWaitForFirstConsumer
.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
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 listeallow
:topolvm_thinpool_data_percent topolvm_thinpool_metadata_percent topolvm_thinpool_size_bytes
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
Alerte | Description |
---|---|
| 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. |
|
Cette alerte est déclenchée lorsque l'utilisation du groupe de volumes et du thin pool dépasse 85 % sur les nœuds. |
| 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. |
| 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. |
| 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. |
| 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. |
Ressources supplémentaires
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.
Ressources supplémentaires
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
- Connectez-vous à la console OpenShift Container Platform du cluster OpenShift à nœud unique.
-
À partir de la page Operators → Installed Operators, cliquez sur LVM Storage Operator dans l'espace de noms
openshift-storage
. -
Cliquez sur l'onglet LVMCluster pour afficher la liste des
LVMCluster
CR créés sur le cluster. - Sélectionnez Edit LVMCluster dans le menu déroulant Actions.
- Cliquez sur l'onglet YAML.
Modifiez le fichier YAML de
LVMCluster
CR pour ajouter le nouveau chemin d'accès au périphérique dans la sectiondeviceSelector
:NoteSi le champ
deviceSelector
n'est pas inclus lors de la création deLVMCluster
, il n'est pas possible d'ajouter la sectiondeviceSelector
au CR. Vous devez supprimer le champLVMCluster
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
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
- Connectez-vous au CLI RHACM en utilisant vos identifiants OpenShift Container Platform.
- 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.
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
.NoteSi le champ
deviceSelector
n'est pas inclus lors de la création deLVMCluster
, il n'est pas possible d'ajouter la sectiondeviceSelector
au CR. Vous devez supprimer la sectionLVMCluster
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
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 valeurallowVolumeExpansion
et pour valeurtrue
.
Procédure
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" }}}}'
-
Surveillez le champ
status.conditions
du PVC pour voir si le redimensionnement est terminé. OpenShift Container Platform ajoute la conditionResizing
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.
Les données ne seront pas conservées pendant ce processus.
Procédure
- Sauvegardez toutes les données que vous souhaitez conserver sur les réclamations de volumes persistants (PVC).
- Supprimer tous les PVC provisionnés par l'opérateur du gestionnaire de volume logique d'OpenShift Data Foundation et leurs pods.
- Réinstaller le stockage LVM sur OpenShift Container Platform 4.12.
- Recréer les charges de travail.
- 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.
ImportantLes 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
-
Connectez-vous à l'OpenShift à nœud unique pour lequel vous devez exécuter la commande
oc
. 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
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é.
ImportantUn 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
- Identifiez le nom de la classe de stockage du PVC source et le nom de l'instantané du volume.
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
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
Supprimez la ressource de cliché de volume en exécutant la commande suivante :
# oc delete volumesnapshot <volume_snapshot_name> -n <namespace>
NoteLorsque vous supprimez une revendication de volume persistant (PVC), les instantanés du PVC ne sont pas supprimés.
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.
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
- Identifier la classe de stockage du PVC source.
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
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>
Ressources supplémentaires
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.
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.

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
etVolumeSnapshotContent
et est responsable de la création et de la suppression de l'objetVolumeSnapshotContent
. -
Le conteneur resizer est un conteneur sidecar qui surveille les mises à jour de
PersistentVolumeClaim
et déclenche des opérationsControllerExpandVolume
contre un point de terminaison CSI si vous demandez plus d'espace de stockage sur l'objetPersistentVolumeClaim
. -
Un conteneur d'attachement CSI externe traduit les appels
attach
etdetach
d'OpenShift Container Platform en appelsControllerPublish
etControllerUnpublish
respectifs au pilote CSI. -
Un conteneur externe de provisionneur CSI qui traduit les appels
provision
etdelete
d'OpenShift Container Platform en appelsCreateVolume
etDeleteVolume
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.
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.
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 processusopenshift-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.
Pilote CSI | Instantanés de volumes CSI | Clonage CSI | Redimensionnement 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.
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
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.
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.
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.
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
-
Créez la définition de l'objet
Pod
et enregistrez-la dans un fichier. 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.
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.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 CRDVolumeSnapshotContent
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 CRDVolumeSnapshot
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 CRDVolumeSnapshot
avec un CRDVolumeSnapshotContent
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 sidecarcsi-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é.
NoteNe 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 :
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 champProvisioner
de la classe de stockage responsable du PVC qui fait l'objet d'un instantané.
NoteSelon 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.Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :
$ oc create -f volumesnapshotclass.yaml
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é.
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é :
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.
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.
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 surfalse
, 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.
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 objetVolumeSnapshotContent
existe et l'instantané a été créé.-
Pour vérifier que l'instantané est prêt, confirmez que l'objet
VolumeSnapshot
estreadyToUse: 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
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'objetVolumeSnapshotContent
. Si la valeurRetain
est définie, l'instantané sous-jacent et l'objetVolumeSnapshotContent
sont conservés.
Si la valeurRetain
est définie et que l'objetVolumeSnapshot
est supprimé sans supprimer l'objetVolumeSnapshotContent
correspondant, le contenu est conservé. L'instantané lui-même est également conservé dans le back-end de stockage.
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
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>
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 :ImportantNe 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
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
Créez un PVC en entrant la commande suivante :
$ oc create -f pvc-restore.yaml
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 champspec
.
- 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 :
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.
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éé.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 deBound
.Vous êtes maintenant prêt à utiliser le nouveau PVC cloné pour configurer un pod.
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 PVCdataSource
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 :
Conducteurs In-tree/CSI | Niveau de soutien | La migration automatique du CSI est-elle activée automatiquement ? |
---|---|---|
|
Généralement disponible (GA) |
Yes. For more information, see "Automatic migration of in-tree volumes to CSI". |
|
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
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.
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).
ImportantAprè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 pourfeaturegates
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.
Ressources supplémentaires
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.
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.
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.
Ressources supplémentaires
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.
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
- Installez le pilote AWS EFS CSI Driver Operator.
- 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 :
- Connectez-vous à la console web.
Installez l'opérateur AWS EFS CSI :
- Cliquez sur Operators → OperatorHub.
- Localisez l'opérateur AWS EFS CSI en tapant AWS EFS CSI dans la boîte de filtre.
Cliquez sur le bouton AWS EFS CSI Driver Operator.
ImportantVeillez à 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.
- Sur la page AWS EFS CSI Driver Operator, cliquez sur Install.
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.
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.
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 :
-
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". Créez et enregistrez un fichier YAML EFS
CredentialsRequest
, comme dans l'exemple suivant, et placez-le dans le répertoirecredrequests
: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
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-
-
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
- Cliquez sur Administration → CustomResourceDefinitions → ClusterCSIDriver.
- Dans l'onglet Instances, cliquez sur Create ClusterCSIDriver.
Utilisez le fichier YAML suivant :
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: efs.csi.aws.com spec: managementState: Managed
- Cliquez sur Create.
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
- Dans la console OpenShift Container Platform, cliquez sur Storage → StorageClasses.
- Sur la page StorageClasses, cliquez sur Create StorageClass.
Sur la page StorageClass, procédez comme suit :
- Entrez un nom pour référencer la classe de stockage.
- En option : Saisissez la description.
- Sélectionnez la politique de récupération.
-
Sélectionnez
efs.csi.aws.com
dans la liste déroulante Provisioner. - Optionnel : Définir les paramètres de configuration du provisionneur sélectionné.
- 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 êtreefs-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
etgidRangeEnd
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.
NoteUn 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 :
- Dans la console AWS, ouvrez https://console.aws.amazon.com/efs.
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.
Attendez que le volume et les cibles de montage soient entièrement créés :
- Allez sur https://console.aws.amazon.com/efs#/file-systems.
- Cliquez sur votre volume et, dans l'onglet Network, attendez que toutes les cibles de montage soient disponibles (~1-2 minutes).
- Dans l'onglet Network, copiez l'identifiant du groupe de sécurité (vous en aurez besoin à l'étape suivante).
- Allez sur https://console.aws.amazon.com/ec2/v2/home#SecurityGroups, et trouvez le groupe de sécurité utilisé par le volume EFS.
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.
- 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.
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.
Ressources supplémentaires
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 :
- Connectez-vous à la console web.
- Arrêtez toutes les applications qui utilisent les PV AWS EFS.
Supprimer tous les PV AWS EFS :
- Cliquez sur Storage → PersistentVolumeClaims.
- 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.
Désinstallez le pilote AWS EFS CSI :
NoteAvant de pouvoir désinstaller l'Opérateur, vous devez d'abord supprimer le pilote CSI.
- Cliquez sur Administration → CustomResourceDefinitions → ClusterCSIDriver.
- Dans l'onglet Instances, pour efs.csi.aws.com, à l'extrême gauche, cliquez sur le menu déroulant, puis sur Delete ClusterCSIDriver.
- Lorsque vous y êtes invité, cliquez sur Delete.
Désinstallez l'opérateur AWS EFS CSI :
- Cliquez sur Operators → Installed Operators.
- 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.
- En haut à droite de la page Installed Operators > Operator details, cliquez sur Actions → Uninstall Operator.
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.
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.
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.
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
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.
Ressources supplémentaires
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
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>
où
<machine-set-name>
est l'ensemble de machines que vous voulez provisionner avec des ultra-disques.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
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
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, utilisezkubernetes.io/azure-disk
. - 5
- Facultatif : Ce paramètre permet d'attendre la création du module qui utilisera le disque.
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
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
Vérification
Validez la création des machines en exécutant la commande suivante :
$ oc get machines
Les machines doivent être dans l'état
Running
.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éechroot /host
permet d'accéder aux binaires du système d'exploitation hôte sous-jacent, etlsblk
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.
Ressources supplémentaires
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.
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.
Paramètres | Valeurs | Défaut | Description |
---|---|---|---|
|
|
| Permet de choisir entre des PV standard et des PV à semi-conducteurs. |
|
|
| Permet de choisir entre des PV zonales ou régionales. |
| 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 :
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.
NoteVous 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 êtrepd.csi.storage.gke.io
.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
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
NoteSi vous avez marqué la nouvelle classe de stockage comme étant par défaut, vous pouvez omettre le champ
storageClassName
.Appliquez le PVC à votre cluster :
$ oc apply -f pvc.yaml
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
NoteSi le champ
volumeBindingMode
de votre classe de stockage est défini surWaitForFirstConsumer
, 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.
Ressources supplémentaires
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.
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 :
- Connectez-vous à la console web.
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.
Installer l'opérateur CSI du dépôt de fichiers GCP :
- Cliquez sur Operators → OperatorHub.
- Localisez le GCP Filestore CSI Operator en tapant GCP Filestore dans la boîte de filtre.
- Cliquez sur le bouton GCP Filestore CSI Driver Operator.
- Sur la page GCP Filestore CSI Driver Operator, cliquez sur Install.
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.
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.
Installez le pilote CSI du dépôt de fichiers GCP :
- Cliquez sur administration → CustomResourceDefinitions → ClusterCSIDriver.
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
- Cliquez sur Create.
Attendre que les conditions suivantes passent à l'état "vrai" :
- GCPFilestoreDriverCredentialsRequestControllerAvailable (disponible)
- GCPFilestoreDriverNodeServiceControllerAvailable (disponible)
- GCPFilestoreDriverControllerServiceControllerAvailable (disponible)
Ressources supplémentaires
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 :
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.
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 :
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")
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
etibmc-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.
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.
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
Modifiez la valeur de l'annotation
storageclass.kubernetes.io/is-default-class
enfalse
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"}}}'
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"}}}'
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
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.
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.
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.
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 :
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
Définissez les options requises sur la page résultante.
- Sélectionnez la classe de stockage appropriée.
- Saisissez un nom unique pour la créance de stockage.
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.
ImportantUtilisez RWX si vous souhaitez que le volume persistant (PV) qui remplit ce PVC soit monté sur plusieurs pods sur plusieurs nœuds du cluster.
- Définir la taille de la demande de stockage.
- 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) :
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-
.
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éé.
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 deBound
.
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.
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 esttrue
, la classe de stockage par défaut existante doit être modifiée et définie surfalse
. - 3
true
permet une expansion dynamique du volume, tandis quefalse
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'estVolumeBindingImmediate
qui est utilisé. Ce champ ne s'applique qu'aux serveurs qui activent la fonctionVolumeScheduling
. - 6
- Le nom du domaine de stockage RHV à utiliser.
- 7
- Si
true
, le disque est en mode "thin provisioned". Sifalse
, 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) ouxfs
.
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 :
- Dans la console OpenShift Container Platform, cliquez sur Storage → Persistent Volume Claims.
- Dans l'aperçu des réclamations relatives aux volumes persistants, cliquez sur Create Persistent Volume Claim.
- Définissez les options requises sur la page résultante.
-
Sélectionnez l'objet
StorageClass
approprié, qui estovirt-csi-sc
par défaut. - Saisissez un nom unique pour la créance de stockage.
- Sélectionnez le mode d'accès. Actuellement, RWO (ReadWriteOnce) est le seul mode d'accès pris en charge.
- Définir la taille de la demande de stockage.
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-
Cliquez sur Create pour créer l'objet
PersistentVolumeClaim
et générer un objetPersistentVolume
.
Si vous utilisez l'interface de ligne de commande (CLI) pour créer dynamiquement un volume RHV CSI :
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
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
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.
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.
Ressources supplémentaires
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.
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.
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.
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 :
- Supprimez les objets tiers vSphere CSI Driver (VMware vSphere Container Storage Plugin) Deployment et Daemonset.
- Supprimer les objets configmap et secret qui ont été installés précédemment avec le pilote vSphere CSI.
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.
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
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
etopenshift-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 calcul Domaine de défaillance Description 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.
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
, sectiondriverConfig
:-
Spécifiez les catégories
openshift-zone
etopenshift-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
-
Spécifiez les catégories
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
etopenshift-region
.
NoteCSINode
peuvent mettre un certain temps à recevoir les informations topologiques mises à jour. Après la mise à jour du pilote, les objetsCSINode
devraient contenir des clés de topologie.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.
-
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 queStoragePod
,Datastore
etFolder
sont sélectionnés en tant qu'entités associables pour la catégorie créée. -
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
. 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.NoteVous 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.
-
Dans vCenter, créez une catégorie pour baliser les datastores. Par exemple,
Créer une stratégie de stockage qui cible les datastores basés sur les balises dans chaque domaine de défaillance :
- Dans vCenter, dans le menu principal, cliquez sur Policies and Profiles.
- Sur la page Policies and Profiles, dans le volet de navigation, cliquez sur VM Storage Policies.
- Cliquez sur CREATE.
- Saisissez un nom pour la stratégie de stockage.
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.
Créez une nouvelle classe de stockage qui utilise la nouvelle politique de stockage zoné :
- Cliquez sur Storage > StorageClasses.
- Sur la page StorageClasses, cliquez sur Create StorageClass.
- Saisissez un nom pour la nouvelle classe de stockage à l'adresse Name.
- Sous Provisioner, sélectionnez csi.vsphere.vmware.com.
- 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.
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
NoteVous 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 ...
Ressources supplémentaires
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.
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.
Ressources supplémentaires
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.
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
-
Créez la définition de l'objet
pod
et enregistrez-la dans un fichier. 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'attributallowVolumeExpansion
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 valeurallowVolumeExpansion
et pour valeurtrue
. Pour plus d'informations, voir "Activation de la prise en charge de l'extension de volume"
Procédure
-
Pour la revendication de volume persistant (PVC), définissez
.spec.resources.requests.storage
à la nouvelle taille souhaitée. -
Surveillez le champ
status.conditions
du PVC pour voir si le redimensionnement est terminé. OpenShift Container Platform ajoute la conditionResizing
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
pourtrue
. - Le provisionnement dynamique est utilisé.
-
L'objet contrôlant
StorageClass
a pour valeurallowVolumeExpansion
et pour valeurtrue
.
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. Sifalse
, il appelle la méthodeExpandFS
pour terminer le redimensionnement du système de fichiers. ExpandFS
-
Si
true
, il appelleExpandFS
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.
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
- Étendre les dispositifs sous-jacents. Veillez à ce que la capacité appropriée soit disponible sur ces appareils.
-
Mettez à jour les objets PV correspondants pour qu'ils correspondent aux nouvelles tailles des appareils en modifiant le champ
.spec.capacity
du PV. -
Pour la classe de stockage utilisée pour lier le PVC à PVet, définir
allowVolumeExpansion:true
. -
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 avoirallowVolumeExpansion
fixé àtrue
.
Procédure
Editez le PVC et demandez une nouvelle taille en éditant
spec.resources.requests
. Par exemple, ce qui suit étend le PVCebs
à 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.
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>
-
Lorsque le redimensionnement de l'objet fournisseur de cloud est terminé, l'objet
PersistentVolume
reflète la nouvelle taille demandée dansPersistentVolume.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 conditionFileSystemResizePending
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
-
Marquez le volume persistant (PV) lié au PVC avec la politique de récupération
Retain
. Pour ce faire, modifiez le PV et remplacezpersistentVolumeReclaimPolicy
parRetain
. - Supprimer le PVC.
-
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 étantAvailable
. - Recréer le PVC dans une taille plus petite, ou une taille qui peut être allouée par le fournisseur de stockage sous-jacent.
-
Définir le champ
volumeName
du PVC au nom du PV. Cela lie le PVC au PV provisionné uniquement. - Rétablir la politique de récupération sur le PV.
Ressources supplémentaires
-
L'objet contrôlant
StorageClass
aallowVolumeExpansion
défini surtrue
(voir Activation de la prise en charge de l'extension de volume).
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 stockage | Nom du plugin Provisioner | Notes |
---|---|---|
Red Hat OpenStack Platform (RHOSP) Cinder |
| |
Interface de stockage de conteneurs (CSI) de RHOSP Manille |
| 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) |
|
Pour le provisionnement dynamique lors de l'utilisation de plusieurs clusters dans différentes zones, marquez chaque nœud avec |
Disque Azure |
| |
Fichier Azure |
|
Le compte de service |
Disque persistant de la CME (gcePD) |
| 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. |
|
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
.
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.
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 estext4
.
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 estgp3
. 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
oufalse
. - 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 surtrue
, 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 estext4
.
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
etDedicated
.ImportantRed Hat ne prend en charge que l'utilisation de
kind: Managed
dans la classe de stockage.Avec
Shared
etDedicated
, 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 avecShared
ouDedicated
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
etPremium_LRS
, les VM Standard ne peuvent attacher que les disquesStandard_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.-
Si
kind
est défini surShared
, 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. -
Si
kind
est défini surManaged
, Azure crée de nouveaux disques gérés. Si
kind
est défini surDedicated
et qu'unstorageAccount
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.
-
Si
kind
est défini surDedicated
et questorageAccount
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.
-
Si
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
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.
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
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'UGSStandard_LRS
. - 4
- Nom du compte de stockage Azure. Si un compte de stockage est fourni, les adresses
skuName
etlocation
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éfiniesskuName
etlocation
.
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
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
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
eteagerzeroedthick
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 estthin
.
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
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.
Changer la valeur de l'annotation
storageclass.kubernetes.io/is-default-class
enfalse
pour la classe de stockage par défaut :$ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
Faites d'une autre classe de stockage la classe par défaut en définissant l'annotation
storageclass.kubernetes.io/is-default-class
surtrue
:$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
Vérifiez les modifications :
$ oc get storageclass
Exemple de sortie
NAME TYPE gp3 kubernetes.io/aws-ebs standard (default) kubernetes.io/aws-ebs
Legal Notice
Copyright © 2024 Red Hat, Inc.
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman 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 Software Collections 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.