Mise à jour de Pulsar
Cet article décrit la procédure à suivre pour mettre à jour votre composant Pulsar de V2 à V3 si vous avez déjà un déploiement Milvus fonctionnel avec Pulsar V2.
Depuis Milvus v2.5, milvus-helm et milvus-operator utilisent par défaut Pulsar V3 pour corriger certains bogues et vulnérabilités de sécurité. Bien que Milvus 2.5 soit compatible avec Pulsar 2.x, la mise à niveau vers Pulsar V3 est facultative. Pour une stabilité et des performances accrues, nous recommandons la mise à niveau vers Pulsar V3.
Si vous préférez utiliser Pulsar V2 avec Milvus v2.5.x, lisez Utiliser Pulsar V2 avec Milvus v2.5.x.
Le processus de mise à niveau nécessite une brève interruption de service (cela prend généralement de quelques minutes à plus de dix minutes, en fonction de la quantité de données).
Avant l'opération, vous devez empêcher tous les clients en cours d'exécution d'écrire des données dans Milvus. Sinon, les données écrites risquent d'être perdues.
Cet article suppose que Milvus est installé dans l'espace de noms
default
et nommémy-release
. Veuillez modifier les paramètres en fonction de votre propre espace de noms et nom de version lors de l'exécution des commandes copiées à partir de cette page.Assurez-vous que votre environnement de travail dispose d'autorisations sous l'espace de noms susmentionné dans le cluster Kubernetes et que les commandes suivantes sont installées.
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
pour les opérations de manipulation de chaînes de caractèresd.
curl
ou Attu v2.4+ pour interagir avec l'API de gestion milvus
Feuille de route
Le processus de mise à niveau comprend les étapes suivantes :
Procédures
Cette section présente les procédures détaillées de mise à niveau de Pulsar de V2 à V3 dans Milvus.
Persistance des données non consommées dans Pulsar
Dans cette étape, vous devez vous assurer que les données existantes dans Pulsar ont été persistées dans le service de stockage d'objets. Deux approches sont disponibles et vous pouvez choisir celle qui convient à vos besoins.
Approche 1 : Utilisation d'Attu
Si vous n'avez qu'un petit nombre de collections dans votre déploiement Milvus fonctionnel avec peu de segments, vous pouvez utiliser Attu pour persister les données vers le service de stockage d'objets.
Sélectionnez chaque collection dans toutes vos bases de données, accédez au panneau
Segments
et cliquez sur le boutonFlush
.Panneau de segment d'une collection
Puis, dans la fenêtre contextuelle, cliquez à nouveau sur
Flush
.Invite de vidange des données dans Attu
Attendez ensuite que les états de segmentation persistants de toutes les collections soient
Flushed
.Voir l'état de vidange des données dans Attu
Approche 2 : Utilisation de l'API de gestion
Proxy du port 9091 du proxy Milvus vers l'hôte local pour les opérations suivantes.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
Résultat.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091
Sauvegarder le Pid pour un nettoyage ultérieur.
pid=8116
Déclencher l'action de persistance de toutes les données insérées de Pulsar vers Ojbect Storage.
curl 127.0.0.1:9091/api/v1/collections \ |curl 127.0.0.1:9091/api/v1/persist -d @/dev/stdin\ |jq '.flush_coll_segIDs'| jq '[.[] | .data[]]' | jq '{segmentIDs: (.)}' \ > flushing_segments.json cat flushing_segments.json
Résultat.
{ "segmentIDs": [ 454097953998181000, 454097953999383600, 454097953998180800 ] }
Check All segments flushed.
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin
Lorsque l'action est terminée, vous devriez voir la sortie suivante
{"status":{},"flushed":true}
Arrêter le processus backendground
kubectl port-forward
kill $pid
Sortie.
[1] + 8116 terminated kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091
Arrêter Milvus et supprimer Pulsar V2
Dans cette étape, vous devez arrêter le pod Milvus et supprimer le déploiement de Pulsar V2. Deux sections distinctes sont disponibles :
Pour les utilisateurs de Milvus Helm
Si vous avez installé Milvus à l'aide de la carte Milvus Helm, allez à Supprimer Pulsar v2 à l'aide de Helm.
Pour les utilisateurs de Milvus Operator
Si vous avez installé Milvus à l'aide de Milvus Operator, allez à Supprimer Pulsar v2 à l'aide de Milvus Operator.
Supprimer Pulsar V2 à l'aide de Helm
Si vous avez installé Milvus à l'aide de la carte Milvus Helm, suivez les étapes ci-dessous pour arrêter le pod Milvus et supprimer le déploiement de Pulsar V2.
Enregistrez les valeurs de version actuelles de Milvus à l'adresse
values.yaml
en vue d'une récupération ultérieure.helm -n default get values my-release -o yaml > values.yaml cat values.yaml
Utilisez la commande pour arrêter Milvus et toutes les dépendances. Ne vous inquiétez pas pour les volumes de données, ils seront conservés par défaut.
helm -n default uninstall my-release
Sortie
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalled
List pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) needs to be cleared (La liste des PVCs et PVs de pulsar doit être effacée)
kubectl -n default get pvc -lapp=pulsar,release=my-release |grep -v NAME |awk '{print $1}' > pulsar-pvcs.txt kubectl -n default get pvc -lapp=pulsar,release=my-release -o custom-columns=VOL:.spec.volumeName|grep -v VOL > pulsar-pvs.txt echo "Volume Claims:" cat pulsar-pvcs.txt echo "Volumes:" cat pulsar-pvs.txt
Sortie
Volume Claims: my-release-pulsar-bookie-journal-my-release-pulsar-bookie-0 my-release-pulsar-bookie-journal-my-release-pulsar-bookie-1 my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-0 my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-1 my-release-pulsar-zookeeper-data-my-release-pulsar-zookeeper-0 Volumes: pvc-f590a4de-df31-4ca8-a424-007eac3c619a pvc-17b0e215-3e14-4d14-901e-1a1dda9ff5a3 pvc-72f83c25-6ea1-45ee-9559-0b783f2c530b pvc-60dcb6e4-760d-46c7-af1a-d1fc153b0caf pvc-2da33f64-c053-42b9-bb72-c5d50779aa0a
Vérifiez que la liste des PVC de
pulsar-pvcs.txt
est bien celle de Pulsar. Une fois que vous avez confirmé qu'il n'y a pas d'erreur, supprimez les PVC.cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Sortie.
persistentvolumeclaim "my-release-pulsar-bookie-journal-my-release-pulsar-bookie-0" deleted persistentvolumeclaim "my-release-pulsar-bookie-journal-my-release-pulsar-bookie-1" deleted persistentvolumeclaim "my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-0" deleted persistentvolumeclaim "my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-1" deleted persistentvolumeclaim "my-release-pulsar-zookeeper-data-my-release-pulsar-zookeeper-0" deleted
(Facultatif) En fonction de la classe de stockage qui fournit le PVC, il se peut que vous deviez également supprimer manuellement le PV.
cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Ce n'est pas grave s'il produit des erreurs NotFound. Il est déjà supprimé par les contrôleurs kubernetes.
Error from server (NotFound): persistentvolumeclaims "pvc-f590a4de-df31-4ca8-a424-007eac3c619a" not found Error from server (NotFound): persistentvolumeclaims "pvc-17b0e215-3e14-4d14-901e-1a1dda9ff5a3" not found Error from server (NotFound): persistentvolumeclaims "pvc-72f83c25-6ea1-45ee-9559-0b783f2c530b" not found Error from server (NotFound): persistentvolumeclaims "pvc-60dcb6e4-760d-46c7-af1a-d1fc153b0caf" not found Error from server (NotFound): persistentvolumeclaims "pvc-2da33f64-c053-42b9-bb72-c5d50779aa0a" not found
Supprimer Pulsar V2 à l'aide de Milvus Operator
Si vous avez installé Milvus à l'aide de Milvus Operator, suivez les étapes ci-dessous pour arrêter le pod Milvus et supprimer le déploiement de Pulsar V2.
Enregistrez le manifeste Milvus actuel sur
milvus.yaml
pour une utilisation ultérieure.kubectl -n default get milvus my-release -o yaml > milvus.yaml head milvus.yaml -n 20
Résultat.
apiVersion: milvus.io/v1beta1 kind: Milvus metadata: annotations: milvus.io/dependency-values-merged: "true" milvus.io/pod-service-label-added: "true" milvus.io/querynode-current-group-id: "0" creationTimestamp: "2024-11-22T08:06:59Z" finalizers: - milvus.milvus.io/finalizer generation: 3 labels: app: milvus milvus.io/operator-version: 1.1.2 name: my-release namespace: default resourceVersion: "692217324" uid: 7a469ed0-9df1-494e-bd9a-340fac4305b5 spec: components:
Créer un fichier
patch.yaml
avec le contenu suivant.# a patch to retain etcd & storage data and delete pulsar data while delete milvus spec: dependencies: etcd: inCluster: deletionPolicy: Retain pvcDeletion: false storage: inCluster: deletionPolicy: Retain pvcDeletion: false pulsar: inCluster: deletionPolicy: Delete pvcDeletion: true
Utiliser
kubectl patch
pour conserver les données etcd et de stockage et supprimer les données pulsar lors de la suppression de Milvus.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
Résultat.
milvus.milvus.io/my-release patched
Arrêter Milvus et supprimer pulsar V2. Ne vous préoccupez pas des volumes de données etcd et de stockage d'objets, ils seront conservés par défaut.
kubectl -n default delete milvus my-release --wait=false kubectl -n default get milvus my-release kubectl -n default delete milvus my-release --wait=true
Résultat : Notez que cela peut prendre quelques minutes pour que Milvus s'arrête de manière gracieuse et que l'opérateur supprime les volumes de pulsar.
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deleted
Attendez que la commande soit terminée.
Vérifier à nouveau que la ressource Milvus a disparu.
kubectl -n default get milvus my-release
Le résultat devrait être le suivant.
No resources found in default namespace.
Démarrer Pulsar V3 et Milvus
Dans cette étape, vous devez démarrer les pods Pulsar V3 et Milvus. Deux sections distinctes sont disponibles :
Pour l'utilisateur Helm
Si vous avez installé Milvus à l'aide de la carte Milvus Helm, passez à For Helm User.
Pour les utilisateurs de Milvus Operator
Si vous avez installé Milvus à l'aide de Milvus Operator, allez à Pour l'utilisateur de Milvus Operator.
Démarrer Pulsar V3 et utiliser Helm
Modifier le site
values.yaml
enregistré à l'étape précédente.# change the following: pulsar: enabled: false # set to false # you may also clean up rest fields under pulsar field # it's ok to keep them though. pulsarv3: enabled: true # append other values for pulsar v3 chart if needs
Mettez à jour votre répertoire helm local.
helm repo add zilliztech https://zilliztech.github.io/milvus-helm helm repo update zilliztech
Sortie
"zilliztech" already exists with the same configuration, skipping Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "zilliztech" chart repository Update Complete. ⎈Happy Helming!⎈
Installez votre version de Milvus avec la dernière version de helm chart en utilisant la version éditée de
values.yaml
.helm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
Sortie
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
Vérifiez les pods pour voir s'ils sont tous planifiés et en cours d'exécution avec
kubectl -n default get pods
.Cela peut prendre quelques minutes pour que tous les pods démarrent.
Le résultat est le suivant.
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 4m3s my-release-milvus-datanode-56487bc4bc-s6mbd 1/1 Running 0 4m5s my-release-milvus-indexnode-6476894d6-rv85d 1/1 Running 0 4m5s my-release-milvus-mixcoord-6d8875cb9c-67fcq 1/1 Running 0 4m4s my-release-milvus-proxy-7bc45d57c5-2qf8m 1/1 Running 0 4m4s my-release-milvus-querynode-77465747b-kt7f4 1/1 Running 0 4m4s my-release-minio-684ff4f5df-pnc97 1/1 Running 0 4m5s my-release-pulsarv3-bookie-0 1/1 Running 0 4m3s my-release-pulsarv3-bookie-1 1/1 Running 0 4m3s my-release-pulsarv3-bookie-2 1/1 Running 0 4m3s my-release-pulsarv3-bookie-init-6z4tk 0/1 Completed 0 4m1s my-release-pulsarv3-broker-0 1/1 Running 0 4m2s my-release-pulsarv3-broker-1 1/1 Running 0 4m2s my-release-pulsarv3-proxy-0 1/1 Running 0 4m2s my-release-pulsarv3-proxy-1 1/1 Running 0 4m2s my-release-pulsarv3-pulsar-init-wvqpc 0/1 Completed 0 4m1s my-release-pulsarv3-recovery-0 1/1 Running 0 4m3s my-release-pulsarv3-zookeeper-0 1/1 Running 0 4m2s my-release-pulsarv3-zookeeper-1 1/1 Running 0 4m2s my-release-pulsarv3-zookeeper-2 1/1 Running 0 4m2s
Démarrer Pulsar V3 et utiliser Milvus Operator
Modifiez le site
milvus.yaml
enregistré à l'étape précédente.# change the followings fields: apiVersion: milvus.io/v1beta1 kind: Milvus metadata: annotations: null # this field should be removed or set to null resourceVersion: null # this field should be removed or set to null uid: null # this field should be removed or set to null spec: dependencies: pulsar: inCluster: chartVersion: pulsar-v3 # delete all previous values for pulsar v2 and set it to null. # you may add additional values here for pulsar v3 if you're sure about it. values: null
Assurez-vous que votre Milvus Operator est mis à niveau vers la version v1.1.2 ou une version ultérieure.
helm repo add milvus-operator https://zilliztech.github.io/milvus-operator helm repo update milvus-operator helm -n milvus-operator upgrade milvus-operator milvus-operator/milvus-operator
Utiliser la commande pour démarrer milvus avec pulsar v3
kubectl create -f milvus.yaml
Sortie
milvus.milvus.io/my-release created
Vérifiez les pods pour voir si tous sont planifiés et en cours d'exécution avec
kubectl -n default get pods
.Cela peut prendre quelques minutes pour que tous les pods démarrent.
Le résultat est le suivant.
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 65m my-release-milvus-datanode-57fd59ff58-5mdrk 1/1 Running 0 93s my-release-milvus-indexnode-67867c6b9b-4wsbw 1/1 Running 0 93s my-release-milvus-mixcoord-797849f9bb-sf8z5 1/1 Running 0 93s my-release-milvus-proxy-5d5bf98445-c55m6 1/1 Running 0 93s my-release-milvus-querynode-0-64797f5c9-lw4rh 1/1 Running 0 92s my-release-minio-79476ccb49-zvt2h 1/1 Running 0 65m my-release-pulsar-bookie-0 1/1 Running 0 5m10s my-release-pulsar-bookie-1 1/1 Running 0 5m10s my-release-pulsar-bookie-2 1/1 Running 0 5m10s my-release-pulsar-bookie-init-v8fdj 0/1 Completed 0 5m11s my-release-pulsar-broker-0 1/1 Running 0 5m11s my-release-pulsar-broker-1 1/1 Running 0 5m10s my-release-pulsar-proxy-0 1/1 Running 0 5m11s my-release-pulsar-proxy-1 1/1 Running 0 5m10s my-release-pulsar-pulsar-init-5lhx7 0/1 Completed 0 5m11s my-release-pulsar-recovery-0 1/1 Running 0 5m11s my-release-pulsar-zookeeper-0 1/1 Running 0 5m11s my-release-pulsar-zookeeper-1 1/1 Running 0 5m10s my-release-pulsar-zookeeper-2 1/1 Running 0 5m10s