Distribuzione di un cluster Milvus su GKE
Milvus è un database vettoriale cloud-native e può essere distribuito su vari ambienti cloud. Questa guida illustra tutti i dettagli della configurazione di Milvus su Google Cloud Platform (GCP).
Distribuzione di un cluster Milvus su GCP
Prima di iniziare
Per distribuire Milvus su GCP, assicuratevi che
Esista già un progetto nel vostro account GCP.
Per creare un progetto, fate riferimento a Creazione e gestione dei progetti. Il nome del progetto utilizzato in questa guida è milvus-testing-nonprod.
Avete installato localmente gcloud CLI, kubectl e Helm o avete deciso di utilizzare la Cloud Shell basata su browser.
Avete inizializzato la gcloud CLI con le credenziali del vostro account GCP.
Configurazione della rete
Per garantire la sicurezza di Milvus, è necessario creare una rete virtuale logicamente isolata nel progetto GCP. Il comando seguente crea una VPC.
gcloud compute networks create milvus-network \
--project=milvus-testing-nonprod \
--subnet-mode=auto \
--mtu=1460 \
--bgp-routing-mode=regional
Per facilitare il lavoro, è necessario impostare diverse regole di firewall per consentire il traffico esterno su ICMP, RDP e SSH e il traffico all'interno della VPC.
gcloud compute firewall-rules create milvus-network-allow-icmp \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows ICMP connections from any source to any instance on the network." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=icmp
gcloud compute firewall-rules create milvus-network-allow-internal \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows connections from any source in the network IP range to any instance on the network using all protocols." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=10.128.0.0/9 \
--action=ALLOW --rules=all
gcloud compute firewall-rules create milvus-network-allow-rdp \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows RDP connections from any source to any instance on the network using port 3389." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=tcp:3389
gcloud compute firewall-rules create milvus-network-allow-ssh \
--project=milvus-testing-nonprod \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--description="Allows TCP connections from any source to any instance on the network using port 22." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=tcp:22
Infine, è necessario consentire il traffico in entrata all'istanza Milvus che creeremo in seguito sulla porta 19530.
gcloud compute firewall-rules create allow-milvus-in \
--project=milvus-testing-nonprod \
--description="Allow ingress traffic for Milvus on port 19530" \
--direction=INGRESS \
--priority=1000 \
--network=projects/milvus-testing-nonprod/global/networks/milvus-network \
--action=ALLOW \
--rules=tcp:19530 \
--source-ranges=0.0.0.0/0
Provisionare un cluster Kubernetes
In questa guida, utilizzeremo il servizio Google Kubernetes Engine (GKE) per effettuare il provisioning di un cluster Kubernetes con due nodi nella zona us-west1-a. Ogni nodo è una macchina virtuale e2-standard-4 Compute Engine che esegue l'immagine COS_CONTAINERD.
Si consiglia di utilizzare macchine con una memoria minima di 16 GB per garantire la stabilità del servizio.
gcloud container clusters create "milvus-cluster-1" \
--project "milvus-testing-nonprod" \
--zone "us-west1-a" \
--workload-pool "milvus-testing-nonprod.svc.id.goog" \
--no-enable-basic-auth \
--cluster-version "1.28.10-gke.1075001" \
--release-channel "regular" \
--machine-type "c2-standard-4" \
--image-type "COS_CONTAINERD" \
--disk-type "pd-standard" \
--disk-size "100" \
--max-pods-per-node "110" \
--num-nodes "3" \
--enable-ip-alias \
--network "projects/milvus-testing-nonprod/global/networks/milvus-network" \
--subnetwork "projects/milvus-testing-nonprod/regions/us-west1/subnetworks/milvus-network"
L'avvio del cluster Kubernetes richiede un paio di minuti. Una volta che il cluster è pronto, utilizzare il seguente comando per ottenere le sue credenziali in modo da poter eseguire i comandi kubectl
nel terminale per comunicare con il cluster da remoto.
gcloud container clusters get-credentials milvus-cluster-1 --zone "us-west1-a"
Usare Google Cloud Storage (GCS) come archivio oggetti esterno
- Creare il bucket.
gcloud storage buckets create gs://milvus-testing-nonprod --project=milvus-testing-nonprod --default-storage-class=STANDARD --location=us-west1 --uniform-bucket-level-access
- Generare la chiave d'accesso utente e la chiave segreta, andando alla pagina di archiviazione del progetto. Nella barra laterale sinistra della dashboard, fare clic su Google Cloud Storage e poi su Impostazioni. Selezionare la scheda INTEROPERABILITÀ. Se non è già stata attivata, fare clic su Accesso interoperabile. Fare quindi clic sul pulsante CREA UNA CHIAVE per creare.
Chiavi di accesso GCP per l'account utente
- Aggiungere values.yaml
cluster:
enabled: true
service:
type: LoadBalancer
minio:
enabled: false
externalS3:
enabled: true
host: storage.googleapis.com
port: 443
rootPath: milvus/my-release
bucketName: milvus-testing-nonprod
cloudProvider: gcp
useSSL: true
accessKey: "<access-key>"
secretKey: "<secret-key>"
Distribuire Milvus
Ora il cluster Kubernetes è pronto. Distribuiamo subito Milvus.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install -f values.yaml my-release milvus/milvus
Nei comandi precedenti, aggiungiamo il repo dei grafici di Milvus Helm in locale e aggiorniamo il repo per recuperare i grafici più recenti. Poi installiamo un'istanza di Milvus e la chiamiamo my-release.
Si noti il valore service.type
, che indica che vogliamo esporre l'istanza Milvus attraverso un bilanciatore di carico Layer-4.
Se volete esporre la vostra istanza Milvus attraverso un bilanciatore di carico Layer-7, leggete qui.
Verificare la distribuzione
Una volta che tutti i pod sono in esecuzione, eseguire il seguente comando per ottenere l'indirizzo IP esterno.
kubectl get services|grep my-release-milvus|grep LoadBalancer|awk '{print $4}'
Ciao Milvus
Fare riferimento a Hello Milvus, modificare il valore host con l'indirizzo IP esterno ed eseguire il codice.
Cosa fare dopo
Se volete imparare a distribuire Milvus su altri cloud: