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 aiuta a distribuire e gestire uno stack di servizi Milvus completo su cluster Kubernetes (K8s). Lo stack include tutti i componenti Milvus e le relative dipendenze, come etcd, Pulsar e MinIO.
Prerequisiti
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 falseVerificare i requisiti hardware e software prima dell'installazione.
Prima di installare Milvus, si consiglia di utilizzare Milvus Sizing Tool per stimare i requisiti hardware in base alle dimensioni dei dati. Questo aiuta a garantire prestazioni e allocazione delle risorse ottimali per l'installazione di Milvus.
Se si riscontrano problemi nell'estrazione dell'immagine, contattateci all'indirizzo community@zilliz.com con i dettagli del problema e vi forniremo il supporto necessario.
Installare Milvus Operator
Milvus Operator definisce le risorse personalizzate di un cluster Milvus sopra le 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 Milvus per garantirne la scalabilità e l'alta disponibilità .
Eseguite 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.0/milvus-operator-1.3.0.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 avete già installato Milvus Operator, aggiornatelo con il seguente comando:
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
Eseguire il seguente comando 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 risultato 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 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
Distribuire Milvus
1. Distribuire un cluster Milvus
Una volta che il pod 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 precedente distribuisce un cluster Milvus con Woodpecker come coda di messaggi (consigliato per la versione 2.6.15) e tutti i nuovi componenti architettonici, compreso lo Streaming Node.
I punti salienti dell'architettura in questa distribuzione:
- Coda dei messaggi: Utilizza Woodpecker (riduce la manutenzione dell'infrastruttura).
- Nodo di streaming: Abilitato per una migliore elaborazione dei dati
- Coordinatore misto: Componenti del coordinatore 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 saperne di più sui parametri di configurazione, consultare la lista di controllo delle configurazioni del sistema Milvus.
- Il nome della release deve contenere solo lettere, numeri e trattini. I punti non sono ammessi nel nome della release.
- È anche possibile distribuire un'istanza Milvus in modalità standalone, dove tutti i suoi componenti sono contenuti in un singolo pod. Per farlo, cambiare l'URL del file di configurazione nel comando precedente in
https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml
2. Controllare lo stato del cluster Milvus
Eseguite 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 precedente 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: 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 crea le dipendenze di Milvus, come etcd, Pulsar e MinIO, e poi i componenti di Milvus, come proxy, coordinatori e nodi.
Una volta che il cluster Milvus è pronto, lo stato di tutti i pod nel cluster Milvus dovrebbe essere simile al seguente.
$ 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. Inoltrare una porta locale a Milvus
Eseguire il seguente comando per ottenere la porta su cui il cluster Milvus opera.
$ 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 serve sulla porta predefinita 19530.
Se avete distribuito Milvus in modalità standalone, cambiate il nome del pod da my-release-milvus-proxy-xxxxxxxxxx-xxxxx a my-release-milvus-xxxxxxxxxx-xxxxx.
Quindi, eseguite il seguente comando per inoltrare una porta locale alla porta su cui Milvus serve.
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
Facoltativamente, si può usare :19530 invece di 27017:19530 nel comando precedente per lasciare che kubectl assegni una porta locale al posto dell'utente, in modo da non dover gestire conflitti di porte.
Per impostazione predefinita, il port-forwarding di kubectl ascolta solo su localhost. Usate il flag address se volete che Milvus ascolti su uno o tutti gli indirizzi IP selezionati. Il comando seguente fa sì che il port-forward sia in ascolto su tutti gli indirizzi IP del computer 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) Aggiornare le configurazioni di Milvus
È possibile visualizzare e aggiornare le configurazioni del cluster Milvus richiamando il comando patch come segue:
Eseguire il seguente comando per visualizzare l'anteprima delle configurazioni.
Il seguente comando indica che si desidera aggiornare il parametro
spec.components.disableMetricafalsems.$ kubectl patch milvus my-release --type='merge'\ -p '{"spec":{"components":{"disableMetric":false}}}' \ --dry-run=client -o yamlPer le voci di configurazione applicabili, fare riferimento a Configurazione del sistema.
Aggiornare le configurazioni.
$ kubectl patch milvus my-release --type='merge'\ -p '{"spec":{"components":{"disableMetric":false}}}'
Accesso alla WebUI di Milvus
Milvus viene fornito con uno strumento GUI integrato chiamato Milvus WebUI, a cui si può accedere tramite browser. Milvus WebUI migliora l'osservabilità del sistema con un'interfaccia semplice e intuitiva. Con Milvus Web UI si possono osservare le statistiche e le metriche dei componenti e delle dipendenze di Milvus, controllare i dettagli del database e della raccolta ed elencare le configurazioni dettagliate di Milvus. Per maggiori informazioni su Milvus Web UI, vedere Milvus WebUI.
Per abilitare l'accesso all'interfaccia web di Milvus, è necessario effettuare il port-forward 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 all'interfaccia web di Milvus all'indirizzo http://localhost:27018.
Disinstallare Milvus
Eseguire il seguente comando per disinstallare il cluster Milvus.
$ kubectl delete milvus my-release
- Quando si elimina il cluster Milvus usando la configurazione predefinita, le dipendenze come etcd, Pulsar e MinIO non vengono eliminate. Pertanto, la prossima volta che si installerà la stessa istanza del cluster Milvus, queste dipendenze verranno utilizzate di nuovo.
- Per eliminare le dipendenze e le richieste di volume persistente (PVC) insieme al cluster Milvus, vedere il file di configurazione.
Disinstallare Milvus Operator
Esistono anche due modi per disinstallare Milvus Operator.
Disinstallare con Helm
$ helm -n milvus-operator uninstall milvus-operator
Disinstallare con kubectl
$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.0/deploy/manifests/deployment.yaml
Cosa succede dopo
Dopo aver installato Milvus in Docker, è possibile:
Controllare Hello Milvus per vedere cosa può fare Milvus.
Imparare le operazioni di base di Milvus:
Distribuire il cluster Milvus su cloud:
Esplorate Milvus WebUI, un'interfaccia web intuitiva per l'osservabilità e la gestione di Milvus.
Esplorate Milvus Backup, uno strumento open-source per il backup dei dati Milvus.
Esplorate Birdwatcher, uno strumento open-source per il debug di Milvus e gli aggiornamenti dinamici della configurazione.
Esplorate Attu, uno strumento open-source per la gestione intuitiva di Milvus.