Milvus in Kubernetes mit Milvus Operator starten

Diese Seite zeigt, wie man eine Milvus-Instanz in Kubernetes mit Milvus Operator startet.

Überblick

Milvus Operator ist eine Lösung, mit der Sie einen vollständigen Milvus-Service-Stack in Kubernetes (K8s)-Clustern bereitstellen und verwalten können. Der Stack umfasst alle Milvus-Komponenten und relevante Abhängigkeiten wie etcd, Pulsar und MinIO.

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.

  • Es wird empfohlen, vor der Installation von Milvus das Milvus Sizing Tool zu verwenden, um die Hardwareanforderungen auf der Grundlage Ihrer Datengröße abzuschätzen. Dies hilft, eine optimale Leistung und Ressourcenzuweisung für Ihre Milvus-Installation zu gewährleisten.

Sollten Sie beim Ziehen des Images auf Probleme stoßen, wenden Sie sich bitte an community@zilliz.com und schildern Sie das Problem, damit wir Ihnen den nötigen Support bieten können.

Milvus Operator installieren

Milvus Operator definiert die benutzerdefinierten Ressourcen eines Milvus-Clusters zusätzlich zu den benutzerdefinierten Ressourcen von Kubernetes. Wenn benutzerdefinierte Ressourcen definiert sind, können Sie K8s-APIs auf deklarative Weise verwenden und den Milvus-Deployment-Stack verwalten, um dessen Skalierbarkeit und Hochverfügbarkeit sicherzustellen.

Führen Sie den folgenden Befehl aus, um 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.0/milvus-operator-1.3.0.tgz

Nach Beendigung des Installationsvorgangs wird eine Ausgabe ähnlich der folgenden angezeigt.

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

Wenn Sie Milvus Operator bereits installiert haben, aktualisieren Sie es mit dem folgenden Befehl:

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

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

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

Nach Beendigung des Installationsvorgangs sehen Sie eine Ausgabe ähnlich der folgenden.

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 ausgeführt wird:

$ kubectl get pods -n milvus-operator

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

Milvus bereitstellen

1. Einrichten eines Milvus-Clusters

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

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

Mit dem obigen Befehl wird ein Milvus-Cluster mit Woodpecker als Nachrichtenwarteschlange (empfohlen für v2.6.15) und allen neuen Architekturkomponenten einschließlich des Streaming Node bereitgestellt.

Highlights der Architektur in diesem Einsatz:

  • Nachrichten-Warteschlange: Verwendung von Woodpecker (reduziert die Wartung der Infrastruktur)
  • Streaming-Knoten: Aktiviert für erweiterte Datenverarbeitung
  • Mix-Koordinator: Konsolidierte Koordinator-Komponenten 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 Datengröße anzupassen und dann die entsprechende YAML-Datei herunterzuladen. Weitere Informationen zu den Konfigurationsparametern finden Sie in der Milvus System Configurations Checklist.

  • Der Versionsname sollte nur Buchstaben, Zahlen und Bindestriche enthalten. Punkte sind im Versionsnamen nicht erlaubt.
  • Sie können eine Milvus-Instanz auch im Standalone-Modus bereitstellen, bei dem alle Komponenten in einem einzigen Pod enthalten sind. Dazu ändern Sie die URL der Konfigurationsdatei im obigen Befehl in https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. Überprüfen des Milvus-Cluster-Status

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 ähnlich wie die folgende aussehen. Wenn das Feld status.status Unhealthy bleibt, befindet sich Ihr Milvus-Cluster noch in der Erstellung.

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: Pulsar is ready
    reason: PulsarReady
    status: "True"
    type: PulsarReady
  - 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

Milvus Operator erstellt Milvus-Abhängigkeiten, wie z. B. etcd, Pulsar und MinIO, und dann Milvus-Komponenten, wie z. B. Proxy, Coordinators und Nodes.

Sobald Ihr Milvus-Cluster bereit ist, sollte der Status aller Pods im Milvus-Cluster ähnlich wie im Folgenden dargestellt sein.

$ 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. Weiterleitung eines lokalen Ports an Milvus

Führen Sie den folgenden Befehl aus, um den Port abzufragen, an dem Ihr Milvus-Cluster arbeitet.

$ 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 über den Standard-Port 19530 arbeitet.

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

Führen Sie dann den folgenden Befehl aus, um einen lokalen Port an den Port weiterzuleiten, an dem Milvus arbeitet.

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

Optional können Sie :19530 anstelle von 27017:19530 im obigen Befehl verwenden, um kubectl einen lokalen Port für Sie zuweisen zu lassen, so dass Sie sich nicht um Portkonflikte kümmern müssen.

Standardmäßig lauscht die Port-Weiterleitung von kubectl nur auf localhost. Verwenden Sie das address Flag, wenn Sie möchten, dass Milvus die ausgewählten oder alle IP-Adressen abhört. Der folgende Befehl sorgt dafür, dass port-forward 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

Jetzt können Sie sich mit Milvus über den weitergeleiteten Port verbinden.

(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 möglichen Konfigurationen zu erhalten.

    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 zutreffenden Konfigurationselementen finden Sie unter Systemkonfiguration.

  2. Aktualisieren Sie die Konfigurationen.

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

Zugriff auf Milvus WebUI

Milvus wird mit einem integrierten GUI-Tool namens Milvus WebUI ausgeliefert, auf das Sie über Ihren Browser zugreifen können. Milvus Web UI verbessert die Beobachtbarkeit des Systems durch eine einfache und intuitive Schnittstelle. Sie können Milvus Web UI verwenden, um die Statistiken und Metriken der Komponenten und Abhängigkeiten von Milvus zu beobachten, Datenbank- und Sammlungsdetails zu überprüfen und detaillierte Milvus-Konfigurationen aufzulisten. Für Details über Milvus Web UI, siehe Milvus WebUI

Um den Zugriff auf die Milvus Web UI zu ermöglichen, müssen Sie den Proxy-Pod auf einen lokalen Port weiterleiten.

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

Jetzt können Sie auf Milvus Web UI unter http://localhost:27018 zugreifen.

Deinstallation von Milvus

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

$ kubectl delete milvus my-release
  • Wenn Sie den Milvus-Cluster unter Verwendung der Standardkonfiguration löschen, werden Abhängigkeiten wie etcd, Pulsar und MinIO nicht gelöscht. Wenn Sie also das nächste Mal dieselbe Milvus-Cluster-Instanz installieren, werden diese Abhängigkeiten wieder verwendet.
  • Um die Abhängigkeiten und persistenten Volumenansprüche (PVCs) zusammen mit dem Milvus-Cluster zu löschen, siehe Konfigurationsdatei.

Deinstallation von Milvus Operator

Es gibt auch zwei Möglichkeiten, 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.0/deploy/manifests/deployment.yaml

Wie geht es weiter?

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