Exécuter Milvus dans Kubernetes avec Helm

Cette page explique comment démarrer une instance Milvus dans Kubernetes à l'aide des cartes Milvus Helm.

Vue d'ensemble

Helm utilise un format d'emballage appelé diagrammes. Un diagramme est une collection de fichiers qui décrivent un ensemble connexe de ressources Kubernetes. Milvus fournit un ensemble de diagrammes pour vous aider à déployer les dépendances et les composants Milvus.

Conditions préalables

  • Installer Helm CLI.

  • Créer un cluster K8s.

  • Installer une StorageClass. Vous pouvez vérifier la StorageClass installée comme suit.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Vérifier la configuration matérielle et logicielle requise avant l'installation.

  • Avant d'installer Milvus, il est recommandé d'utiliser l'outil de dimensionnement Milvus pour estimer la configuration matérielle requise en fonction de la taille de vos données. Cela permet de garantir des performances et une allocation de ressources optimales pour l'installation de Milvus.

Si vous rencontrez des problèmes en tirant l'image, contactez-nous à l'adresse community@zilliz.com en détaillant le problème, et nous vous fournirons l'assistance nécessaire.

Installation de Milvus Helm Chart

Avant d'installer Milvus Helm Charts, vous devez ajouter le référentiel Milvus Helm.

helm repo add zilliztech https://zilliztech.github.io/milvus-helm/

Le dépôt Milvus Helm Charts à l'adresse https://github.com/milvus-io/milvus-helm a été archivé. Nous utilisons maintenant le nouveau dépôt à l'adresse https://github.com/zilliztech/milvus-helm. Le dépôt archivé est toujours disponible pour les cartes jusqu'à la version 4.0.31, mais utilisez le nouveau dépôt pour les versions ultérieures.

Récupérez ensuite les cartes Milvus à partir du dépôt comme suit :

$ helm repo update

Vous pouvez toujours exécuter cette commande pour récupérer les dernières cartes Milvus Helm.

Installation en ligne

1. Déployer un cluster Milvus

Une fois la carte Helm installée, vous pouvez démarrer Milvus sur Kubernetes. Cette section vous guide dans le déploiement d'un cluster Milvus.

Besoin d'un déploiement autonome ?

Si vous préférez déployer Milvus en mode autonome (nœud unique) pour le développement ou les tests, utilisez cette commande :

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.16 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

Remarque: Le mode autonome utilise Woodpecker comme file d'attente de messages par défaut et active le composant Streaming Node. Pour plus d'informations, reportez-vous aux sections Présentation de l'architecture et Utiliser Woodpecker.

Déployer un cluster Milvus :

La commande suivante déploie un cluster Milvus avec des paramètres optimisés pour la version 2.6.16, en utilisant Woodpecker comme file d'attente de messages recommandée :

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.16 \
  --set pulsarv3.enabled=false \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

Ce que fait cette commande :

  • Utilise Woodpecker comme file d'attente de messages (recommandé pour réduire la maintenance).
  • Active le nouveau composant Streaming Node pour améliorer les performances.
  • Désactive l'ancien nœud d'index (la fonctionnalité est désormais gérée par le nœud de données).
  • Désactive Pulsar pour utiliser Woodpecker à la place.

Modifications de l'architecture dans Milvus 2.6.x :

  • File d'attente des messages: Woodpecker est désormais recommandé (réduit la maintenance de l'infrastructure par rapport à Pulsar).
  • Nouveau composant: Le nœud de streaming est introduit et activé par défaut.
  • Composants fusionnés: Le nœud d'index et le nœud de données sont combinés en un seul nœud de données.

Pour plus de détails sur l'architecture, voir l'aperçu de l'architecture.

Autres options de file d'attente de messages :

Si vous préférez utiliser Pulsar (choix traditionnel) au lieu de Woodpecker :

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.16 \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

Etapes suivantes :La commande ci-dessus déploie Milvus avec les configurations recommandées. Pour une utilisation en production :

Remarques importantes :

  • Dénomination des versions: Utilisez uniquement des lettres, des chiffres et des tirets (aucun point n'est autorisé).
  • Kubernetes v1.25+: si vous rencontrez des problèmes PodDisruptionBudget, utilisez cette solution de contournement :
    helm install my-release zilliztech/milvus \
      --set pulsar.bookkeeper.pdb.usePolicy=false \
      --set pulsar.broker.pdb.usePolicy=false \
      --set pulsar.proxy.pdb.usePolicy=false \
      --set pulsar.zookeeper.pdb.usePolicy=false
    

Pour plus d'informations, voir Milvus Helm Chart et la documentation Helm.

2. Vérifier l'état du cluster Milvus

Vérifiez que votre déploiement est réussi en contrôlant l'état des pods :

kubectl get pods

Attendez que tous les pods affichent l'état "Running". Avec la configuration v2.6.16, vous devriez voir des pods similaires à :

NAME                                             READY  STATUS   RESTARTS  AGE
my-release-etcd-0                                1/1    Running   0        3m23s
my-release-etcd-1                                1/1    Running   0        3m23s
my-release-etcd-2                                1/1    Running   0        3m23s
my-release-milvus-datanode-68cb87dcbd-4khpm      1/1    Running   0        3m23s
my-release-milvus-mixcoord-7fb9488465-dmbbj      1/1    Running   0        3m23s
my-release-milvus-proxy-6bd7f5587-ds2xv          1/1    Running   0        3m24s
my-release-milvus-querynode-5cd8fff495-k6gtg     1/1    Running   0        3m24s
my-release-milvus-streaming-node-xxxxxxxxx       1/1    Running   0        3m24s
my-release-minio-0                               1/1    Running   0        3m23s
my-release-minio-1                               1/1    Running   0        3m23s
my-release-minio-2                               1/1    Running   0        3m23s
my-release-minio-3                               1/1    Running   0        3m23s
my-release-pulsar-autorecovery-86f5dbdf77-lchpc  1/1    Running   0        3m24s
my-release-pulsar-bookkeeper-0                   1/1    Running   0        3m23s
my-release-pulsar-bookkeeper-1                   1/1    Running   0        98s
my-release-pulsar-broker-556ff89d4c-2m29m        1/1    Running   0        3m23s
my-release-pulsar-proxy-6fbd75db75-nhg4v         1/1    Running   0        3m23s
my-release-pulsar-zookeeper-0                    1/1    Running   0        3m23s
my-release-pulsar-zookeeper-metadata-98zbr       0/1   Completed  0        3m24s

Composants clés à vérifier :

  • Composants Milvus: mixcoord, datanode, querynode, proxy, streaming-node
  • Dépendances: etcd (métadonnées), minio (stockage d'objets), pulsar (file d'attente de messages)

Vous pouvez également accéder à l'interface Web Milvus à l'adresse http://127.0.0.1:9091/webui/ une fois que le transfert de port est configuré (voir l'étape suivante). Pour plus de détails, voir Milvus WebUI.

3. Connexion à Milvus

Pour vous connecter à votre cluster Milvus depuis l'extérieur de Kubernetes, vous devez configurer la redirection de port.

Configurer la redirection de port :

kubectl port-forward service/my-release-milvus 27017:19530

Cette commande transfère votre port local 27017 vers le port Milvus 19530. Vous devriez voir :

Forwarding from 127.0.0.1:27017 -> 19530

Détails de la connexion :

  • Connexion locale: localhost:27017
  • Port par défaut de Milvus: 19530

Options de transfert de port :

  • Auto-assign local port: Utilisez :19530 au lieu de 27017:19530 pour permettre à kubectl de choisir un port disponible.
  • Écouter sur toutes les interfaces: Ajouter --address 0.0.0.0 pour autoriser les connexions à partir d'autres machines :
    kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
    
  • Déploiement autonome: Si vous utilisez le mode autonome, le nom du service reste le même.

Gardez ce terminal ouvert pendant l'utilisation de Milvus. Vous pouvez maintenant vous connecter à Milvus à l'aide de n'importe quel SDK Milvus à l'adresse localhost:27017.

(Facultatif) Mise à jour des configurations Milvus

Vous pouvez mettre à jour les configurations de votre cluster Milvus en modifiant le fichier values.yaml et en l'appliquant à nouveau.

  1. Créer un fichier values.yaml avec les configurations souhaitées.

    Ce qui suit suppose que vous souhaitez activer proxy.http.

    extraConfigFiles:
      user.yaml: |+
        proxy:
          http:
            enabled: true
    

    Pour les éléments de configuration applicables, voir Configuration du système.

  2. Appliquez le fichier values.yaml.

helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
  1. Vérifiez les configurations mises à jour.

    helm get values my-release
    

    La sortie doit montrer les configurations mises à jour.

Accès à l'interface Web de Milvus

Milvus est livré avec un outil GUI intégré appelé Milvus WebUI auquel vous pouvez accéder via votre navigateur. Milvus WebUI améliore l'observabilité du système grâce à une interface simple et intuitive. Vous pouvez utiliser l'interface Web Milvus pour observer les statistiques et les métriques des composants et des dépendances de Milvus, vérifier les détails de la base de données et de la collection, et répertorier les configurations détaillées de Milvus. Pour plus de détails sur l'interface Web de Milvus, voir l'interface Web de Milvus.

Pour permettre l'accès à l'interface Web Milvus, vous devez rediriger le port du pod proxy vers un port local.

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

Vous pouvez désormais accéder à l'interface Web de Milvus à l'adresse http://localhost:27018.

Installation hors ligne

Si vous vous trouvez dans un environnement où le réseau est restreint, suivez la procédure de cette section pour démarrer un cluster Milvus.

1. Obtenir le manifeste Milvus

Exécutez la commande suivante pour obtenir le manifeste Milvus.

$ helm template my-release zilliztech/milvus > milvus_manifest.yaml

La commande ci-dessus rend les modèles de graphiques pour un cluster Milvus et enregistre la sortie dans un fichier de manifeste nommé milvus_manifest.yaml. À l'aide de ce manifeste, vous pouvez installer un cluster Milvus avec ses composants et dépendances dans des pods distincts.

  • Pour installer une instance Milvus en mode autonome, où tous les composants Milvus sont contenus dans un seul pod, vous devez plutôt exécuter helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false zilliztech/milvus > milvus_manifest.yaml pour rendre les modèles de graphiques pour une instance Milvus en mode autonome.
  • Pour modifier les configurations de Milvus, téléchargez le modèle value.yaml placez-y les paramètres souhaités et utilisez helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml pour rendre le manifeste en conséquence.

2. Télécharger le script d'extraction d'images

Le script d'extraction d'images est développé en Python. Vous devez télécharger le script ainsi que ses dépendances dans le fichier requirement.txt.

$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/requirements.txt
$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/save_image.py

3. Extraire et enregistrer les images

Exécutez la commande suivante pour extraire et enregistrer les images requises.

$ pip3 install -r requirements.txt
$ python3 save_image.py --manifest milvus_manifest.yaml

Les images sont placées dans un sous-dossier nommé images dans le répertoire actuel.

4. Charger les images

Vous pouvez maintenant charger les images sur les hôtes dans l'environnement limité par le réseau en procédant comme suit :

$ for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done

5. Déployer Milvus

$ kubectl apply -f milvus_manifest.yaml

Jusqu'à présent, vous pouvez suivre les étapes 2 et 3 de l'installation en ligne pour vérifier l'état du cluster et transmettre un port local à Milvus.

Mise à niveau du cluster Milvus en cours d'exécution

Exécutez la commande suivante pour mettre à niveau votre cluster Milvus en cours d'exécution vers la dernière version :

$ helm repo update
$ helm upgrade my-release zilliztech/milvus --reset-then-reuse-values

Désinstaller Milvus

Exécutez la commande suivante pour désinstaller Milvus.

$ helm uninstall my-release

Prochaines étapes

Après avoir installé Milvus dans Docker, vous pouvez :