Provisionnez le stockage d'objets avec COSI
Utilisez l'interface COSI (Container Object Storage Interface) pour provisionner des compartiments S3 pour les workloads Kubernetes via des ressources Kubernetes gérées par Trident.
Présentation
COSI connecte les fournisseurs de stockage objet aux workloads Kubernetes. Trident fournit les ressources suivantes :
-
TridentObjectStore: Connecte Trident à un système de stockage objet et à ses identifiants. Créez cette ressource dans le namespace Trident. -
BucketClass: Définit la politique de sélection du magasin d'objets et de suppression des compartiments. -
BucketClaim: Demande un compartiment. -
BucketAccessClass: Définit la manière dont l'accès aux buckets est provisionné. -
BucketAccess: Demande les identifiants d’un ou de plusieurs buckets.
Trident prend en charge COSI avec les pilotes de stockage d'objets suivants :
-
StorageGRID : généralement disponible.
-
ONTAP S3: aperçu technique.
Trident prend en charge le protocole S3. Dans la version initiale, seul l'adressage S3 de type chemin est pris en charge.
Exigences et limitations
-
Activez à la fois
enableConcurrencyetenableCOSIdans laTridentOrchestratorressource personnalisée (TORC). COSI n'est pas activé par défaut. -
Avant d’activer la concurrence des contrôleurs, vérifiez que tous les backends Trident configurés utilisent des pilotes pris en charge. Un pilote de backend non pris en charge empêche Trident de démarrer ; consultez "Avant d'activer la mise à l'échelle du contrôleur".
-
N’exécutez pas Trident COSI en même temps que le contrôleur COSI communautaire.
-
La version initiale utilise l' `objectstorage.k8s.io/v1alpha2`API COSI.
-
StorageGRID
TridentObjectStoreressources utilisent des identifiants racine de locataire à longue durée de vie. ChaqueTridentObjectStoreressource se connecte à un locataire StorageGRID ; plusieurs ressources peuvent se connecter au même locataire. Stockez les identifiants dans un Kubernetes Secret dans le namespace Trident et protégez-les conformément à vos exigences de sécurité. -
Un StorageGRID
BucketAccessprend en charge jusqu'à huit compartiments.
Pour des informations générales sur les opérations simultanées des contrôleurs, voir "Évolutivité du contrôleur".
Activer COSI
Définissez les deux options dans la TridentOrchestrator spécification:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
name: trident
spec:
namespace: trident
enableConcurrency: true
enableCOSI: true
Appliquez le TORC ou mettez à jour votre ressource existante en utilisant votre workflow opérateur habituel. Pour plus d'informations sur la configuration du TORC, consultez "Personnalisez l'installation de l'opérateur Trident".
Configurer un magasin d'objets StorageGRID
Créez un Secret Kubernetes avec les identifiants du locataire StorageGRID dans le namespace Trident:
apiVersion: v1
kind: Secret
metadata:
name: tenant3
namespace: trident
type: Opaque
stringData:
username: <tenant-root-username>
password: <tenant-root-password>
Créez une `TridentObjectStore`instance qui référence le Secret. Remplacez les points de terminaison et l'ID de compte d'exemple par des valeurs correspondant à votre environnement StorageGRID :
apiVersion: trident.netapp.io/v1
kind: TridentObjectStore
metadata:
name: trident-tenant3
namespace: trident
spec:
accountId: "<account-id>"
credentials:
secretName: tenant3
labels:
tenantInstance: three
managementEndpoint: https://<storagegrid-management-endpoint>
objectStoreDriver: storage-grid
s3Endpoint: https://<storagegrid-s3-endpoint>
Appliquez les deux ressources:
kubectl apply -f tenant-secret.yaml
kubectl apply -f trident-object-store.yaml
Configurer un magasin d'objets ONTAP S3
|
|
La prise en charge de ONTAP S3 via COSI est une Tech Preview dans Trident 26.10 et n'est pas prise en charge pour une utilisation en production. Les champs de configuration et le comportement peuvent changer avant la disponibilité générale. |
Créez un secret Kubernetes avec les identifiants utilisateur ONTAP S3 dans le namespace Trident, puis créez un `TridentObjectStore`qui référence le Secret. Remplacez les espaces réservés par les valeurs de votre environnement ONTAP S3 :
apiVersion: v1
kind: Secret
metadata:
name: ontap-s3-credentials
namespace: trident
type: Opaque
stringData:
username: "<user>"
password: "<password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentObjectStore
metadata:
name: ontap-s3
namespace: trident
spec:
objectStoreDriver: ontap-s3
objectStoreName: ontap-object-store
managementEndpoint: "<management-endpoint>"
svmName: "<svm-name>"
storagePrefix: trident
credentials:
secretName: ontap-s3-credentials
L’option storagePrefix est facultative et, lorsqu’elle est omise, sa valeur par défaut est trident. Appliquez le Secret et TridentObjectStore:
kubectl apply -f ontap-s3-object-store.yaml
Créez une BucketClass et demandez un bucket
L'utilisateur BucketClass peut sélectionner un magasin d'objets à l'aide d'un sélecteur d'étiquettes, d'un type de magasin d'objets ou des deux. Sans paramètres de sélection, Trident peut choisir parmi tous les magasins d'objets configurés.
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketClass
metadata:
name: sg-delete
spec:
driverName: cosi.trident.netapp.io
deletionPolicy: Delete
parameters:
selector: tenantInstance=three
objectStoreType: storage-grid
Créez un `BucketClaim`objet qui utilise la classe :
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketClaim
metadata:
name: claim-a1
namespace: default
spec:
bucketClassName: sg-delete
protocols:
- S3
Lorsque Trident traite une demande, il sélectionne un magasin d'objets correspondant. Si plusieurs magasins correspondent, Trident en choisit un au hasard pour répartir les buckets entre les magasins correspondants.
Accorder à un workload l'accès à un compartiment
Créer un BucketAccessClass pour définir le provisionnement de l’accès :
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketAccessClass
metadata:
name: sg-access
spec:
authenticationType: Key
driverName: cosi.trident.netapp.io
multiBucketAccess: MultipleBuckets
Créez un BucketAccess qui fait référence au bucket claim :
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketAccess
metadata:
name: sg-claim-a1
namespace: default
spec:
bucketAccessClassName: sg-access
bucketClaims:
- accessMode: ReadWrite
accessSecretName: sg-claim-a1
bucketClaimName: claim-a1
protocol: S3
Trident crée un Secret Kubernetes contenant les informations d'accès pour le compartiment. Un workload peut utiliser ce Secret à l'aide des mécanismes standard de Secret Kubernetes. Le Secret généré inclut les détails de connexion S3, tels que l'identifiant du compartiment, le point de terminaison, la région et les clés d'accès. N'exposez pas le Secret généré à des utilisateurs ou workloads non autorisés.
Le secret généré comprend des clés telles que COSI_S3_ACCESS_KEY_ID, COSI_S3_ACCESS_SECRET_KEY, COSI_S3_ADDRESSING_STYLE, COSI_S3_BUCKET_ID, COSI_S3_ENDPOINT, et COSI_S3_REGION.