Konfigurieren Sie den Objektspeicher mit Milvus Operator
Milvus verwendet MinIO oder S3 als Objektspeicher, um große Dateien, wie Indexdateien und binäre Protokolle, zu speichern. In diesem Thema wird beschrieben, wie Sie Objektspeicher-Abhängigkeiten konfigurieren, wenn Sie Milvus mit Milvus Operator installieren. Weitere Details finden Sie unter Konfigurieren von Objektspeicher mit Milvus Operator im Milvus Operator-Repository.
Dieses Thema setzt voraus, dass Sie Milvus Operator installiert haben.
Sie müssen eine Konfigurationsdatei für die Verwendung von Milvus Operator angeben, um einen Milvus-Cluster zu starten.
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
Sie müssen nur die Codevorlage in milvus_cluster_default.yaml
bearbeiten, um die Abhängigkeiten von Dritten zu konfigurieren. In den folgenden Abschnitten wird beschrieben, wie Sie Objektspeicher, etcd und Pulsar konfigurieren.
Konfigurieren von Objektspeicher
Ein Milvus-Cluster verwendet MinIO oder S3 als Objektspeicher, um große Dateien wie Indexdateien und binäre Protokolle aufzubewahren. Fügen Sie die erforderlichen Felder unter spec.dependencies.storage
hinzu, um den Objektspeicher zu konfigurieren. Mögliche Optionen sind external
und inCluster
.
Interner Objektspeicher
Standardmäßig setzt Milvus Operator eine clusterinterne MinIO für Milvus ein. Im Folgenden wird anhand einer Beispielkonfiguration gezeigt, wie diese MinIO als interner Objektspeicher verwendet werden kann.
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
Nach der obigen Konfiguration läuft die In-Cluster-MinIO im Standalone-Modus mit einer Speicherbegrenzung von bis zu 100Mi. Beachten Sie Folgendes
Das Feld
deletionPolicy
gibt die Löschrichtlinie für die clusterinterne MinIO an. Der Standardwert istDelete
und die alternative Option istRetain
.Delete
gibt an, dass der In-Cluster-Objektspeicher gelöscht wird, wenn Sie Ihre Milvus-Instanz stoppen.Retain
gibt an, dass der In-Cluster-Objektspeicher als Abhängigkeitsdienst für spätere Starts Ihrer Milvus-Instanz beibehalten wird.
Das Feld
pvcDeletion
gibt an, ob der PVC (Persistent Volume Claim) gelöscht werden soll, wenn der clusterinterne MinIO gelöscht wird.
Die Felder unter inCluster.values
sind die gleichen wie die in Milvus Helm Chart, und Sie finden sie hier.
Externer Objektspeicher
Die Verwendung von external
in der Vorlage YAML-Datei weist auf die Verwendung eines externen Objektspeicherdienstes hin. Um einen externen Objektspeicher zu verwenden, müssen Sie die Felder unter spec.dependencies.storage
und spec.config.minio
in der Milvus CRD richtig einstellen.
Verwenden Sie Amazon Web Service (AWS) S3 als externen Objektspeicher
Konfigurieren Sie den AWS S3-Zugriff durch AK/SK
Auf einen S3-Bucket kann in der Regel mit einem Paar aus einem Zugriffsschlüssel und einem Zugriffsgeheimnisschlüssel zugegriffen werden. Sie können ein
Secret
Objekt erstellen, um sie in Ihrer Kubernetes wie folgt zu speichern:# # 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>
Anschließend können Sie einen AWS S3-Bucket als externen Objektspeicher konfigurieren:
# # 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"
AWS S3-Zugriff durch AssumeRole konfigurieren
Alternativ können Sie Milvus mit AssumeRole auf Ihr AWS S3-Bucket zugreifen lassen, so dass nur temporäre Anmeldeinformationen anstelle Ihrer tatsächlichen AK/SK beteiligt sind.
Wenn Sie dies bevorzugen, müssen Sie eine Rolle in Ihrer AWS-Konsole vorbereiten und ihren ARN erhalten, der normalerweise die Form
arn:aws:iam::<your account id>:role/<role-name>
hat.Erstellen Sie dann wie folgt ein
ServiceAccount
Objekt, um es in Ihrer Kubernetes zu speichern:apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: eks.amazonaws.com/role-arn: <my-role-arn>
Sobald alles eingerichtet ist, verweisen Sie in der YAML-Vorlagendatei auf das obige
ServiceAccount
und setzenspec.config.minio.useIAM
auftrue
, um AssumeRole zu aktivieren.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
Google Cloud Storage (GCS) als externen Objektspeicher verwenden
AWS S3 Objektspeicher ist nicht die einzige Wahl. Sie können auch den Objektspeicherdienst von anderen öffentlichen Cloud-Anbietern, wie Google Cloud, verwenden.
Konfigurieren des GCS-Zugriffs durch AK/SK
Die Konfiguration ist größtenteils ähnlich wie bei der Verwendung von AWS S3. Sie müssen immer noch ein
Secret
Objekt erstellen, um Ihre Anmeldeinformationen in Ihrer Kubernetes zu speichern.# # 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>
Dann müssen Sie nur
endpoint
instorage.googleapis.com:443
ändern undspec.config.minio.cloudProvider
ingcp
umwandeln:# # 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:443
Konfigurieren des GCS-Zugriffs durch AssumeRole
Ähnlich wie bei AWS S3 können Sie auch Workload Identity verwenden, um mit temporären Anmeldeinformationen auf GCS zuzugreifen, wenn Sie GKE als Ihren Kubernetes-Cluster verwenden.
Die Beschriftung von
ServiceAccount
unterscheidet sich von der von AWS EKS. Sie müssen den Namen des GCP-Service-Kontos anstelle des ARN der Rolle angeben.apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: iam.gke.io/gcp-service-account: <my-gcp-service-account-name>
Anschließend können Sie Ihre Milvus-Instanz so konfigurieren, dass sie die oben genannte
ServiceAccount
verwendet und AssumeRole aktiviert, indem Siespec.config.minio.useIAM
wie folgt auftrue
setzen: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 ...
Wie geht es weiter?
Erfahren Sie, wie Sie andere Milvus-Abhängigkeiten mit Milvus Operator konfigurieren können: