Configurazione dell'archiviazione a oggetti con Milvus Operator
Milvus utilizza MinIO o S3 come storage di oggetti per conservare file di grandi dimensioni, come i file di indice e i log binari. Questo argomento spiega come configurare le dipendenze dello storage a oggetti quando si installa Milvus con Milvus Operator. Per maggiori dettagli, consultate Configurazione dello storage a oggetti con Milvus Operator nel repository di Milvus Operator.
Questo argomento presuppone che abbiate installato Milvus Operator.
È necessario specificare un file di configurazione per utilizzare Milvus Operator per avviare un cluster Milvus.
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
È sufficiente modificare il modello di codice in milvus_cluster_default.yaml per configurare le dipendenze di terzi. Le sezioni seguenti illustrano come configurare rispettivamente object storage, etcd e Pulsar.
Configurare l'archiviazione degli oggetti
Un cluster Milvus utilizza MinIO o S3 come archiviazione a oggetti per conservare file di grandi dimensioni, come i file di indice e i log binari. Aggiungere i campi richiesti sotto spec.dependencies.storage per configurare l'archiviazione a oggetti; le opzioni possibili sono external e inCluster.
Archiviazione interna degli oggetti
Per impostazione predefinita, Milvus Operator distribuisce un MinIO interno al cluster per Milvus. Di seguito è riportato un esempio di configurazione per dimostrare come utilizzare questo MinIO come archivio oggetti interno.
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
# Omit other fields ...
dependencies:
# Omit other fields ...
storage:
inCluster:
values:
mode: standalone
resources:
requests:
memory: 100Mi
deletionPolicy: Delete # Delete | Retain, default: Retain
pvcDeletion: true # default: false
Dopo aver applicato la configurazione di cui sopra, il MinIO in-cluster funzionerà in modalità standalone con un limite di memoria di 100Mi. Si noti che
Il campo
deletionPolicyspecifica la politica di cancellazione del MinIO in-cluster. È predefinito suDeletee haRetaincome opzione alternativa.Deleteindica che il deposito di oggetti nel cluster viene cancellato quando si arresta l'istanza Milvus.Retainindica che il deposito di oggetti nel cluster viene mantenuto come servizio di dipendenza per gli avvii successivi dell'istanza Milvus.
Il campo
pvcDeletionspecifica se cancellare il PVC (Persistent Volume Claim) quando il MinIO in-cluster viene cancellato.
I campi di inCluster.values sono gli stessi di Milvus Helm Chart e si trovano qui.
Archiviazione esterna degli oggetti
L'uso di external nel file YAML del modello indica l'uso di un servizio di archiviazione di oggetti esterno. Per utilizzare un object storage esterno, è necessario impostare correttamente i campi spec.dependencies.storage e spec.config.minio nel CRD di Milvus.
Utilizzare Amazon Web Service (AWS) S3 come archivio oggetti esterno
Configurare l'accesso ad AWS S3 per AK/SK
Di solito si può accedere a un bucket S3 tramite una coppia di chiavi di accesso e una chiave segreta di accesso. È possibile creare un oggetto
Secretper memorizzarli in Kubernetes come segue:# # change the <parameters> to match your environment apiVersion: v1 kind: Secret metadata: name: my-release-s3-secret type: Opaque stringData: accesskey: <my-access-key> secretkey: <my-secret-key>Quindi è possibile configurare un bucket AWS S3 come storage esterno degli oggetti:
# # change the <parameters> to match your environment apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... config: minio: # your bucket name bucketName: <my-bucket> # Optional, config the prefix of the bucket milvus will use rootPath: milvus/my-release useSSL: true dependencies: storage: # enable external object storage external: true type: S3 # MinIO | S3 # the endpoint of AWS S3 endpoint: s3.amazonaws.com:443 # the secret storing the access key and secret key secretRef: "my-release-s3-secret"Configurare l'accesso AWS S3 da AssumeRole
In alternativa, si può fare in modo che Milvus acceda al bucket AWS S3 utilizzando AssumeRole, in modo da coinvolgere solo le credenziali temporanee invece del proprio AK/SK.
Se questo è ciò che si preferisce, è necessario preparare un ruolo sulla console AWS e ottenere il suo ARN, che di solito è sotto forma di
arn:aws:iam::<your account id>:role/<role-name>.Quindi creare un oggetto
ServiceAccountper memorizzarlo in Kubernetes come segue:apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: eks.amazonaws.com/role-arn: <my-role-arn>Una volta impostato il tutto, fare riferimento a
ServiceAccountnel file YAML del modello e impostarespec.config.minio.useIAMsutrueper abilitare AssumeRole.apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... components: # use the above ServiceAccount serviceAccountName: my-release-sa config: minio: # enable AssumeRole useIAM: true # Omit other fields ... dependencies: storage: # Omit other fields ... # Note: you must use regional endpoint here, otherwise the minio client that milvus uses will fail to connect endpoint: s3.<my-bucket-region>.amazonaws.com:443 secretRef: "" # we don't need to specify the secret here
Utilizzare Google Cloud Storage (GCS) come archivio oggetti esterno
Lo storage di oggetti AWS S3 non è l'unica scelta possibile. È possibile utilizzare anche il servizio di archiviazione degli oggetti di altri fornitori di cloud pubblici, come Google Cloud.
Configurazione dell'accesso a GCS da parte di AK/SK
La configurazione è per lo più simile a quella dell'utilizzo di AWS S3. È necessario creare un oggetto
Secretper memorizzare le credenziali in Kubernetes.# # change the <parameters> to match your environment apiVersion: v1 kind: Secret metadata: name: my-release-gcp-secret type: Opaque stringData: accesskey: <my-access-key> secretkey: <my-secret-key>Quindi, è sufficiente modificare
endpointinstorage.googleapis.com:443e impostarespec.config.minio.cloudProvideringcpcome segue:# # change the <parameters> to match your environment apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... config: minio: cloudProvider: gcp dependencies: storage: # Omit other fields ... endpoint: storage.googleapis.com:443Configurazione dell'accesso GCS per AssumeRole
Analogamente ad AWS S3, è possibile utilizzare Workload Identity per accedere a GCS con credenziali temporanee se si utilizza GKE come cluster Kubernetes.
L'annotazione di
ServiceAccountè diversa da quella di AWS EKS. È necessario specificare il nome dell'account del servizio GCP invece dell'ARN del ruolo.apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: iam.gke.io/gcp-service-account: <my-gcp-service-account-name>Quindi, è possibile configurare l'istanza Milvus per utilizzare il suddetto
ServiceAccounte abilitare AssumeRole impostandospec.config.minio.useIAMsutruecome segue:labels: app: milvus spec: # Omit other fields ... components: # use the above ServiceAccount serviceAccountName: my-release-sa config: minio: cloudProvider: gcp # enable AssumeRole useIAM: true # Omit other fields ...
Cosa fare dopo
Imparare a configurare le altre dipendenze di Milvus con Milvus Operator: