Milvus in Kubernetes mit dem Milvus Operator ausführen

Auf dieser Seite wird erläutert, wie Sie mithilfe des Milvus Operators eine Milvus-Instanz in Kubernetes starten.

Übersicht

Der Milvus Operator ist eine Lösung, die Ihnen dabei hilft, einen vollständigen Milvus-Service-Stack auf Kubernetes-Clustern (K8s) bereitzustellen und zu verwalten. Der Stack umfasst alle Milvus-Komponenten und relevante Abhängigkeiten wie etcd und MinIO, wobei Woodpecker als integrierte Nachrichtenwarteschlange dient.

Voraussetzungen

  • Erstellen Sie einen K8s-Cluster.

  • Installieren Sie eine StorageClass. Sie können die installierte StorageClass wie folgt überprüfen.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Überprüfen Sie vor der Installation die Hardware- und Softwareanforderungen.

  • Vor der Installation von Milvus wird empfohlen, das Milvus Sizing Tool zu verwenden, um die Hardwareanforderungen basierend auf Ihrer Datenmenge abzuschätzen. Dies trägt dazu bei, eine optimale Leistung und Ressourcenzuweisung für Ihre Milvus-Installation sicherzustellen.

Sollten beim Herunterladen des Images Probleme auftreten, kontaktieren Sie uns bitte unter community@zilliz.com mit Details zum Problem, und wir werden Ihnen die erforderliche Unterstützung zukommen lassen.

Installieren Sie den Milvus Operator

Der Milvus Operator definiert benutzerdefinierte Ressourcen für einen Milvus-Cluster auf Basis der Kubernetes Custom Resources. Wenn benutzerdefinierte Ressourcen definiert sind, können Sie die K8s-APIs deklarativ nutzen und den Milvus-Deployment-Stack verwalten, um dessen Skalierbarkeit und Hochverfügbarkeit sicherzustellen.

Führen Sie den folgenden Befehl aus, um den Milvus Operator mit Helm zu installieren.

$ helm install milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz

Nach Abschluss des Installationsvorgangs wird eine Ausgabe angezeigt, die der folgenden ähnelt.

NAME: milvus-operator
LAST DEPLOYED: Thu Jul  7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD

Falls Sie den Milvus Operator bereits installiert haben, führen Sie mit dem folgenden Befehl ein Upgrade durch:

helm upgrade milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.7/milvus-operator-1.3.7.tgz

Führen Sie den folgenden Befehl aus, um den Milvus Operator mit „ kubectl “ zu installieren.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml

Nach Abschluss des Installationsvorgangs wird eine Ausgabe angezeigt, die in etwa wie folgt aussieht.

namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created

Sie können wie folgt überprüfen, ob der Milvus Operator-Pod läuft:

$ kubectl get pods -n milvus-operator

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-5fd77b87dc-msrk4   1/1     Running   0          46s

Milvus bereitstellen

1. Einen Milvus-Cluster bereitstellen

Sobald der Milvus-Operator-Pod läuft, können Sie wie folgt einen Milvus-Cluster bereitstellen.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

Der obige Befehl stellt einen Milvus-Cluster bereit, der Woodpecker als Nachrichtenwarteschlange (empfohlen für v3.0.2) sowie alle neuen Architekturkomponenten einschließlich des Streaming-Knotens verwendet.

Architektur-Highlights dieser Bereitstellung:

  • Nachrichtenwarteschlange: Verwendet Woodpecker (reduziert den Wartungsaufwand für die Infrastruktur)
  • Streaming-Knoten: Aktiviert für eine verbesserte Datenverarbeitung
  • Mix-Koordinator: Konsolidierte Koordinatorkomponenten für verbesserte Effizienz

Um diese Einstellungen anzupassen, empfehlen wir Ihnen, das Milvus Sizing Tool zu verwenden, um die Konfigurationen basierend auf Ihrer tatsächlichen Datenmenge anzupassen und anschließend die entsprechende YAML-Datei herunterzuladen. Weitere Informationen zu den Konfigurationsparametern finden Sie in der Milvus-Checkliste für Systemkonfigurationen.

  • Der Release-Name darf nur Buchstaben, Zahlen und Bindestriche enthalten. Punkte sind im Release-Namen nicht zulässig.
  • Sie können eine Milvus-Instanz auch im Standalone-Modus bereitstellen, bei dem alle Komponenten in einem einzigen Pod enthalten sind. Ändern Sie dazu die URL der Konfigurationsdatei im obigen Befehl wie folgt: https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. Überprüfen Sie den Status des Milvus-Clusters

Führen Sie den folgenden Befehl aus, um den Status des Milvus-Clusters zu überprüfen

$ kubectl get milvus my-release -o yaml

Sobald Ihr Milvus-Cluster bereit ist, sollte die Ausgabe des obigen Befehls in etwa wie folgt aussehen. Wenn das Feld „ status.status “ weiterhin den Wert „ Unhealthy “ anzeigt, befindet sich Ihr Milvus-Cluster noch im Aufbau.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
  conditions:
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    reason: StorageReady
    status: "True"
    type: StorageReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Etcd endpoints is healthy
    reason: EtcdReady
    status: "True"
    type: EtcdReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: All Milvus components are healthy
    reason: MilvusClusterHealthy
    status: "True"
    type: MilvusReady
  endpoint: my-release-milvus.default:19530
  status: Healthy

Der Milvus-Operator erstellt zunächst die Milvus-Abhängigkeiten wie etcd und MinIO und anschließend die Milvus-Komponenten wie Proxy, Koordinatoren und Knoten.

Sobald Ihr Milvus-Cluster bereit ist, sollte der Status aller Pods im Milvus-Cluster in etwa wie folgt aussehen.

$ kubectl get pods

NAME                                             READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                1/1     Running   0          2m36s
my-release-etcd-1                                1/1     Running   0          2m36s
my-release-etcd-2                                1/1     Running   0          2m36s
my-release-milvus-datanode-58955c65b9-j4j7s      1/1     Running   0          92s
my-release-milvus-mixcoord-686f84968f-jcv5d      1/1     Running   0          92s
my-release-milvus-proxy-646f48fc7c-4lctb         1/1     Running   0          92s
my-release-milvus-querynode-0-d89d7677b-x7j7q    1/1     Running   0          91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1     Running   0          92s
my-release-minio-0                               1/1     Running   0          2m36s
my-release-minio-1                               1/1     Running   0          2m36s
my-release-minio-2                               1/1     Running   0          2m35s
my-release-minio-3                               1/1     Running   0          2m35s

3. Leiten Sie einen lokalen Port an Milvus weiter

Führen Sie den folgenden Befehl aus, um den Port zu ermitteln, unter dem Ihr Milvus-Cluster erreichbar ist.

$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

Die Ausgabe zeigt, dass die Milvus-Instanz am Standardport 19530 erreichbar ist.

Wenn Sie Milvus im Standalone-Modus bereitgestellt haben, ändern Sie den Pod-Namen von „ my-release-milvus-proxy-xxxxxxxxxx-xxxxx “ in „ my-release-milvus-xxxxxxxxxx-xxxxx “.

Führen Sie anschließend den folgenden Befehl aus, um einen lokalen Port auf den Port weiterzuleiten, unter dem Milvus erreichbar ist.

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

Optional können Sie im obigen Befehl „ :19530 “ anstelle von „ 27017:19530 “ verwenden, damit „ kubectl “ einen lokalen Port für Sie zuweist und Sie sich nicht um Portkonflikte kümmern müssen.

Standardmäßig lauscht die Portweiterleitung von `kubectl` nur auf localhost. Verwenden Sie das Flag address, wenn Milvus auf die ausgewählte oder alle IP-Adressen lauschen soll. Der folgende Befehl sorgt dafür, dass die Portweiterleitung auf allen IP-Adressen des Host-Rechners lauscht.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

Nun können Sie über den weitergeleiteten Port eine Verbindung zu Milvus herstellen.

(Optional) Milvus-Konfigurationen aktualisieren

Sie können die Konfigurationen Ihres Milvus-Clusters anzeigen und aktualisieren, indem Sie den Befehl „ patch “ wie folgt aufrufen:

  1. Führen Sie den folgenden Befehl aus, um eine Vorschau der geplanten Konfigurationen anzuzeigen.

    Im Folgenden wird davon ausgegangen, dass Sie den Parameter „ spec.components.disableMetric “ auf „ false “ ms aktualisieren möchten.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' \
      --dry-run=client -o yaml
    

    Informationen zu den entsprechenden Konfigurationselementen finden Sie unter „Systemkonfiguration“.

  2. Aktualisieren Sie die Konfigurationen.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' 
    

Auf die Milvus-WebUI zugreifen

Milvus wird mit einem integrierten GUI-Tool namens „Milvus WebUI“ ausgeliefert, auf das Sie über Ihren Browser zugreifen können. Die Milvus WebUI verbessert die Systemüberwachung durch eine einfache und intuitive Benutzeroberfläche. Mit der Milvus WebUI können Sie die Statistiken und Metriken der Komponenten und Abhängigkeiten von Milvus überwachen, Datenbank- und Erfassungsdetails überprüfen sowie detaillierte Milvus-Konfigurationen auflisten. Weitere Informationen zur Milvus-Web-UI finden Sie unter „Milvus-Web-UI“

Um den Zugriff auf die Milvus-WebUI zu ermöglichen, müssen Sie eine Portweiterleitung vom Proxy-Pod auf einen lokalen Port einrichten.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

Nun können Sie über http://localhost:27018 auf die Milvus-Web-UI zugreifen.

Milvus deinstallieren

Führen Sie den folgenden Befehl aus, um den Milvus-Cluster zu deinstallieren.

$ kubectl delete milvus my-release
  • Wenn Sie den Milvus-Cluster mit der Standardkonfiguration löschen, werden Abhängigkeiten wie etcd und MinIO nicht gelöscht. Daher werden diese Abhängigkeiten bei der nächsten Installation derselben Milvus-Cluster-Instanz erneut verwendet.
  • Informationen zum Löschen der Abhängigkeiten und der Persistent Volume Claims (PVCs) zusammen mit dem Milvus-Cluster finden Sie in der Konfigurationsdatei.

Milvus Operator deinstallieren

Es gibt zwei Möglichkeiten, den Milvus Operator zu deinstallieren.

Deinstallation mit Helm

$ helm -n milvus-operator uninstall milvus-operator

Deinstallation mit kubectl

$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.7/deploy/manifests/deployment.yaml

Optionale Abhängigkeiten

Dieser Deployment verwendet Woodpecker als Nachrichtenwarteschlange, etcd für Metadaten und MinIO für den Objektspeicher, die alle vom Milvus Operator bereitgestellt werden. Informationen zur Verwendung eines anderen Backends mit dem Operator finden Sie hier:

Storage V3 ist standardmäßig deaktiviert. Aktivieren Sie es, bevor Sie Funktionen nutzen, die davon abhängen. Informationen zu Anforderungen und Kompatibilitätsaspekten finden Sie unter Storage V3.

Was kommt als Nächstes

Nachdem Sie Milvus in Docker installiert haben, können Sie: