Esegui il provisioning dello storage a oggetti con COSI
Utilizza l'interfaccia COSI (Container Object Storage Interface) per effettuare il provisioning dei bucket S3 per i carichi di lavoro Kubernetes tramite le risorse Kubernetes gestite da Trident.
Panoramica
COSI collega i provider di storage a oggetti ai carichi di lavoro Kubernetes. Trident offre le seguenti risorse:
-
TridentObjectStore: Collega Trident a un sistema di storage a oggetti e alle relative credenziali. Crea questa risorsa nel namespace Trident. -
BucketClass: Definisce la selezione dell'archivio di oggetti e la policy di eliminazione dei bucket. -
BucketClaim: Richiede un bucket. -
BucketAccessClass: Definisce come viene eseguito il provisioning dell'accesso ai bucket. -
BucketAccess: Richiede le credenziali per uno o più bucket.
Trident supporta COSI con i seguenti driver di storage a oggetti:
-
StorageGRID: generalmente disponibile.
-
ONTAP S3: Anteprima tecnica.
Trident supporta il protocollo S3. Nella release iniziale, Trident supporta solo l'indirizzamento S3 in stile path.
Requisiti e limitazioni
-
Abilita entrambi
enableConcurrencyeenableCOSInellaTridentOrchestratorrisorsa personalizzata (TORC). COSI non è abilitato per impostazione predefinita. -
Prima di abilitare la concorrenza del controller, verifica che tutti i backend Trident configurati usino driver supportati. Un driver backend non supportato impedisce l'avvio di Trident; vedi "Prima di abilitare la scalabilità del controller".
-
Non eseguire Trident COSI insieme al controller COSI della community.
-
La versione iniziale utilizza l' `objectstorage.k8s.io/v1alpha2`API COSI.
-
Le risorse di StorageGRID
TridentObjectStoreutilizzano credenziali root del tenant a lunga durata. CiascunaTridentObjectStoresi connette a un tenant StorageGRID; più risorse possono connettersi allo stesso tenant. Archivia le credenziali in un Secret di Kubernetes nel namespace Trident e proteggile in base ai tuoi requisiti di sicurezza. -
Un StorageGRID
BucketAccesssupporta fino a otto bucket.
Per informazioni generali sulle operazioni simultanee del controller, vedi "Scalabilità del controller".
Abilita COSI
Imposta entrambe le opzioni nella TridentOrchestrator spec:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
name: trident
spec:
namespace: trident
enableConcurrency: true
enableCOSI: true
Applica il TORC o aggiorna la risorsa esistente utilizzando il normale flusso di lavoro dell'operatore. Per ulteriori informazioni sulla configurazione del TORC, consulta "Personalizzare l'installazione dell'operatore Trident".
Configurare un archivio di oggetti StorageGRID
Crea un Secret di Kubernetes con le credenziali del tenant StorageGRID nel namespace Trident:
apiVersion: v1
kind: Secret
metadata:
name: tenant3
namespace: trident
type: Opaque
stringData:
username: <tenant-root-username>
password: <tenant-root-password>
Crea un TridentObjectStore che fa riferimento al Secret. Sostituisci gli endpoint di esempio e l'ID dell'account con i valori del tuo ambiente 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>
Applica entrambe le risorse:
kubectl apply -f tenant-secret.yaml
kubectl apply -f trident-object-store.yaml
Configura un archivio di oggetti ONTAP
|
|
Il supporto di ONTAP S3 tramite COSI è una Tech Preview in Trident 26.10 e non è supportato per l'uso in produzione. I campi di configurazione e il comportamento possono cambiare prima della disponibilità generale. |
Crea un Secret di Kubernetes con le credenziali utente ONTAP S3 nel namespace Trident, quindi crea un `TridentObjectStore`che faccia riferimento al Secret. Sostituisci i segnaposto con i valori per il tuo ambiente 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
Il storagePrefix è facoltativo e, se omesso, il valore predefinito è trident. Applica il Secret e TridentObjectStore:
kubectl apply -f ontap-s3-object-store.yaml
Crea una BucketClass e richiedi un bucket
Un BucketClass può selezionare un archivio di oggetti utilizzando un selettore di etichette, un tipo di archivio di oggetti o entrambi. Senza parametri di selezione, Trident può selezionare tra tutti gli archivi di oggetti configurati.
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
Crea un BucketClaim oggetto che utilizzi la classe:
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketClaim
metadata:
name: claim-a1
namespace: default
spec:
bucketClassName: sg-delete
protocols:
- S3
Quando Trident elabora una richiesta, seleziona un archivio di oggetti corrispondente. Se più archivi corrispondono, Trident ne sceglie uno a caso per distribuire i bucket tra gli archivi corrispondenti.
Concedi a un workload l'accesso a un bucket
Crea un BucketAccessClass per definire il provisioning degli accessi:
apiVersion: objectstorage.k8s.io/v1alpha2
kind: BucketAccessClass
metadata:
name: sg-access
spec:
authenticationType: Key
driverName: cosi.trident.netapp.io
multiBucketAccess: MultipleBuckets
Crea un BucketAccess che fa riferimento al 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 crea un Secret di Kubernetes contenente le informazioni di accesso al bucket. Un workload può utilizzare questo Secret tramite i meccanismi standard dei Secret di Kubernetes. Il Secret generato include i dettagli di connessione a S3, come l'identificativo del bucket, l'endpoint, la regione e le chiavi di accesso. Non esporre il Secret generato a utenti o workload non autorizzati.
Il Secret generato include chiavi come COSI_S3_ACCESS_KEY_ID, COSI_S3_ACCESS_SECRET_KEY, COSI_S3_ADDRESSING_STYLE, COSI_S3_BUCKET_ID, COSI_S3_ENDPOINT e COSI_S3_REGION.