Eseguire Milvus in Kubernetes con Milvus Operator

Questa pagina illustra come avviare un'istanza di Milvus in Kubernetes utilizzando Milvus Operator.

Panoramica

Milvus Operator è una soluzione che consente di distribuire e gestire uno stack completo di servizi Milvus su cluster Kubernetes (K8s). Lo stack include tutti i componenti di Milvus e le dipendenze correlate, come etcd e MinIO, con Woodpecker come coda di messaggi integrata.

Prerequisiti

  • Creare un cluster K8s.

  • Installare una StorageClass. È possibile verificare la StorageClass installata come segue.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Verifica i requisiti hardware e software prima dell’installazione.

  • Prima di installare Milvus, si consiglia di utilizzare lo strumento di dimensionamento Milvus per stimare i requisiti hardware in base alla dimensione dei dati. Ciò contribuisce a garantire prestazioni ottimali e un'allocazione ottimale delle risorse per l'installazione di Milvus.

Se si riscontrano problemi durante il download dell’immagine, contattarci all’indirizzo community@zilliz.com fornendo i dettagli del problema e forniremo l’assistenza necessaria.

Installare Milvus Operator

Milvus Operator definisce le risorse personalizzate del cluster Milvus basate sulle risorse personalizzate di Kubernetes. Una volta definite le risorse personalizzate, è possibile utilizzare le API di K8s in modo dichiarativo e gestire lo stack di distribuzione di Milvus per garantirne la scalabilità e l’alta disponibilità.

Esegui il seguente comando per installare Milvus Operator con Helm.

$ 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

Al termine del processo di installazione, verrà visualizzato un output simile al seguente.

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

Se Milvus Operator è già stato installato in precedenza, aggiornarlo utilizzando il comando seguente:

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

Eseguire il comando seguente per installare Milvus Operator con kubectl.

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

Al termine del processo di installazione, verrà visualizzato un output simile al seguente.

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

È possibile verificare se il pod di Milvus Operator è in esecuzione come segue:

$ kubectl get pods -n milvus-operator

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

Distribuzione di Milvus

1. Distribuire un cluster Milvus

Una volta che il pod di Milvus Operator è in esecuzione, è possibile distribuire un cluster Milvus come segue.

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

Il comando sopra riportato distribuisce un cluster Milvus con Woodpecker come coda di messaggi (consigliato per la versione 3.0.3) e tutti i nuovi componenti architetturali, incluso lo Streaming Node.

Caratteristiche principali dell’architettura in questa distribuzione:

  • Coda dei messaggi: utilizza Woodpecker (riduce la manutenzione dell’infrastruttura)
  • Nodo di streaming: abilitato per un'elaborazione dei dati potenziata
  • Mix Coordinator: componenti di coordinamento consolidati per una maggiore efficienza

Per personalizzare queste impostazioni, si consiglia di utilizzare lo strumento di dimensionamento di Milvus per regolare le configurazioni in base alle dimensioni effettive dei dati e quindi scaricare il file YAML corrispondente. Per ulteriori informazioni sui parametri di configurazione, consultare la Lista di controllo delle configurazioni di sistema di Milvus.

  • Il nome della versione deve contenere solo lettere, numeri e trattini. I punti non sono consentiti nel nome della versione.
  • È inoltre possibile distribuire un'istanza di Milvus in modalità standalone, in cui tutti i suoi componenti sono contenuti in un unico pod. Per farlo, modificare l’URL del file di configurazione nel comando sopra riportato in https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. Verifica dello stato del cluster Milvus

Esegui il seguente comando per verificare lo stato del cluster Milvus

$ kubectl get milvus my-release -o yaml

Una volta che il cluster Milvus è pronto, l’output del comando sopra riportato dovrebbe essere simile al seguente. Se il campo « status.status » rimane « Unhealthy », il cluster Milvus è ancora in fase di creazione.

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

Milvus Operator crea le dipendenze di Milvus, come etcd e MinIO, e successivamente i componenti di Milvus, quali proxy, coordinatori e nodi.

Una volta che il cluster Milvus è pronto, lo stato di tutti i pod nel cluster Milvus dovrebbe essere simile a quello riportato di seguito.

$ 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. Reindirizza una porta locale a Milvus

Esegui il seguente comando per ottenere la porta su cui è in esecuzione il tuo cluster Milvus.

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

L'output mostra che l'istanza di Milvus è raggiungibile sulla porta predefinita 19530.

Se hai distribuito Milvus in modalità standalone, modifica il nome del pod da my-release-milvus-proxy-xxxxxxxxxx-xxxxx a my-release-milvus-xxxxxxxxxx-xxxxx.

Quindi, esegui il seguente comando per inoltrare una porta locale alla porta su cui è in esecuzione Milvus.

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

Facoltativamente, è possibile utilizzare :19530 al posto di 27017:19530 nel comando sopra riportato per consentire a kubectl di allocare automaticamente una porta locale, evitando così di dover gestire eventuali conflitti tra le porte.

Per impostazione predefinita, il reindirizzamento delle porte di kubectl ascolta solo su localhost. Utilizza il flag address se desideri che Milvus ascolti sull'indirizzo IP selezionato o su tutti gli indirizzi IP. Il comando seguente imposta il reindirizzamento delle porte in modo che ascolti su tutti gli indirizzi IP della macchina host.

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

Ora è possibile connettersi a Milvus utilizzando la porta inoltrata.

(Facoltativo) Aggiornamento delle configurazioni di Milvus

È possibile visualizzare e aggiornare le configurazioni del proprio cluster Milvus eseguendo il comando ` patch ` come segue:

  1. Eseguire il comando seguente per visualizzare in anteprima le configurazioni previste.

    Quanto segue presuppone che si desideri aggiornare il parametro ` spec.components.disableMetric ` a ` false ` ms.

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

    Per le voci di configurazione applicabili, consultare Configurazione di sistema.

  2. Aggiornare le configurazioni.

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

Accedere all'interfaccia utente web di Milvus

Milvus include uno strumento GUI integrato denominato Milvus WebUI, accessibile tramite browser. Milvus WebUI migliora l’osservabilità del sistema grazie a un’interfaccia semplice e intuitiva. È possibile utilizzare Milvus WebUI per monitorare le statistiche e le metriche dei componenti e delle dipendenze di Milvus, verificare i dettagli relativi al database e alle raccolte ed elencare le configurazioni dettagliate di Milvus. Per ulteriori dettagli su Milvus WebUI, consultare Milvus WebUI

Per abilitare l’accesso a Milvus WebUI, è necessario effettuare il port forwarding del pod proxy su una porta locale.

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

Ora è possibile accedere a Milvus Web UI all’indirizzo http://localhost:27018.

Disinstallazione di Milvus

Eseguire il seguente comando per disinstallare il cluster Milvus.

$ kubectl delete milvus my-release
  • Quando si elimina il cluster Milvus utilizzando la configurazione predefinita, le dipendenze come etcd e MinIO non vengono eliminate. Pertanto, la prossima volta che si installerà la stessa istanza del cluster Milvus, queste dipendenze verranno riutilizzate.
  • Per eliminare le dipendenze e i persistent volume claim (PVC) insieme al cluster Milvus, consultare il file di configurazione.

Disinstallazione di Milvus Operator

Esistono inoltre due modi per disinstallare Milvus Operator.

Disinstallazione con Helm

$ helm -n milvus-operator uninstall milvus-operator

Disinstallazione con kubectl

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

Dipendenze opzionali

Questa distribuzione utilizza Woodpecker come coda di messaggi, etcd per i metadati e MinIO per l'archiviazione degli oggetti, tutti forniti da Milvus Operator. Per utilizzare un backend diverso con l'Operator, consultare:

Storage V3 è disabilitato per impostazione predefinita. Abilitalo prima di utilizzare le funzionalità che dipendono da esso. Per i requisiti e le considerazioni sulla compatibilità, consulta Storage V3.

Prossimi passi

Dopo aver installato Milvus in Docker, è possibile: