Déployer un cluster Milvus sur GKE
Milvus est une base de données vectorielle native pour le cloud et peut être déployée dans divers environnements cloud. Ce guide vous présente tous les détails de la configuration de Milvus sur Google Cloud Platform (GCP).
Déployer un cluster Milvus sur GCP
Avant de commencer
Pour déployer Milvus sur GCP, assurez-vous que
Un projet existe déjà dans votre compte GCP.
Pour créer un projet, voir Création et gestion de projets. Le nom du projet utilisé dans ce guide est milvus-testing-nonprod.
Vous avez installé localement gcloud CLI, kubectl et Helm, ou vous avez décidé d'utiliser le Cloud Shell basé sur le navigateur à la place.
Vous avez initialisé le CLI gcloud avec les informations d'identification de votre compte GCP.
Configurer le réseau
Pour garantir la sécurité de Milvus, vous devez créer un réseau virtuel logiquement isolé dans votre projet GCP. La commande suivante crée un VPC.
gcloud compute networks create milvus-network \
--project=milvus-testing-nonprod \
--subnet-mode=auto \
--mtu=1460 \
--bgp-routing-mode=regional
Pour faciliter votre travail, vous devez également configurer plusieurs règles de pare-feu afin d'autoriser le trafic externe via ICMP, RDP et SSH ainsi que le trafic à l'intérieur du 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
Enfin, vous devez autoriser le trafic entrant vers l'instance Milvus que nous créerons plus tard au port 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
Provisionner un cluster Kubernetes
Dans ce guide, nous utiliserons le service Google Kubernetes Engine (GKE) pour provisionner un cluster Kubernetes avec deux nœuds dans la zone us-west1-a. Chaque nœud est une machine virtuelle e2-standard-4 Compute Engine exécutant l'image COS_CONTAINERD.
Il est conseillé d'utiliser les types de machines qui offrent une mémoire minimale de 16 Go pour assurer la stabilité du service.
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"
Il faudra quelques minutes pour que le cluster Kubernetes se mette en place. Une fois que le cluster est prêt, utilisez la commande suivante pour récupérer ses identifiants afin de pouvoir exécuter des commandes kubectl
dans votre terminal pour communiquer avec le cluster à distance.
gcloud container clusters get-credentials milvus-cluster-1 --zone "us-west1-a"
Utiliser Google Cloud Storage (GCS) comme stockage d'objets externe
- Créez un seau.
gcloud storage buckets create gs://milvus-testing-nonprod --project=milvus-testing-nonprod --default-storage-class=STANDARD --location=us-west1 --uniform-bucket-level-access
- Générez la clé d'accès de l'utilisateur et la clé secrète, vous devez aller sur la page de stockage de votre projet. Dans la barre latérale gauche du tableau de bord, cliquez sur Google Cloud Storage puis sur Paramètres. Sélectionnez l'onglet INTEROPÉRABILITÉ. Si vous ne l'avez pas encore activé, cliquez sur Accès interopérable. Cliquez ensuite sur le bouton CRÉER UNE CLÉ pour créer des clés d'accès GCP pour votre compte utilisateur.
Clés d'accès GCP pour votre compte utilisateur
- Ajouter 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>"
Déployer Milvus
Le cluster Kubernetes est maintenant prêt. Déployons Milvus dès maintenant.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install -f values.yaml my-release milvus/milvus
Dans les commandes précédentes, nous ajoutons le repo des cartes Milvus Helm localement et mettons à jour le repo pour récupérer les dernières cartes. Ensuite, nous installons une instance Milvus et la nommons my-release.
Remarquez la valeur de config service.type
, qui indique que nous souhaitons exposer l'instance Milvus via un équilibreur de charge Layer-4.
Si vous souhaitez exposer votre instance Milvus via un équilibreur de charge de couche 7, lisez ceci.
Vérifier le déploiement
Une fois que tous les pods fonctionnent, exécutez la commande suivante pour obtenir l'adresse IP externe.
kubectl get services|grep my-release-milvus|grep LoadBalancer|awk '{print $4}'
Bonjour Milvus
Veuillez vous référer à Hello Milvus, changez la valeur host en adresse IP externe, puis exécutez le code.
Prochaines étapes
Si vous souhaitez apprendre à déployer Milvus sur d'autres clouds :