milvus-logo
LFAI
Home
  • Leitfaden für die Verwaltung
    • Verwalten von Abhängigkeiten

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.

Weitere Informationen finden Sie unter Bereitstellen von Milvus Operator.

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 ist Delete und die alternative Option ist Retain.

    • 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 setzen spec.config.minio.useIAM auf true, 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 in storage.googleapis.com:443 ändern und spec.config.minio.cloudProvider in gcp 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 Sie spec.config.minio.useIAM wie folgt auf true 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:

Übersetzt vonDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?