Обновление Pulsar
В этой статье описывается процедура обновления компонента Pulsar с V2 до V3, если у вас уже есть рабочее развертывание Milvus с Pulsar V2.
Начиная с Milvus v2.5, milvus-helm и milvus-operator будут использовать Pulsar V3 по умолчанию, чтобы исправить некоторые ошибки и уязвимости безопасности. Хотя Milvus 2.5 совместим с Pulsar 2.x, обновление до Pulsar V3 необязательно. Для повышения стабильности и производительности мы рекомендуем обновиться до Pulsar V3.
Если вы предпочитаете использовать Pulsar V2 с Milvus v2.5.x, читайте раздел Использование Pulsar V2 с Milvus v2.5.x.
Процесс обновления требует кратковременного отключения сервиса (обычно занимает от нескольких минут до более чем десяти минут, в зависимости от объема данных).
Перед операцией необходимо остановить запись данных в Milvus всеми запущенными клиентами. В противном случае записанные данные могут быть потеряны.
В этой статье предполагается, что Milvus установлен в пространстве имен
defaultи имеет имяmy-release. Пожалуйста, измените параметры на свои пространство имен и имя релиза при выполнении команд, скопированных с этой страницы.Убедитесь, что ваша рабочая среда имеет права на вышеупомянутое пространство имен в кластере Kubernetes и установлены следующие команды.
a.
kubectl>= 1.20b.
helm>= 3.14.0c.
catgrep,awkдля операций манипулирования строкамиd.
curlили Attu v2.4+ для взаимодействия с API управления milvus.
Дорожная карта
Процесс обновления включает следующие шаги:
Процедуры
В этом разделе подробно описаны процедуры обновления Pulsar с V2 до V3 в Milvus.
Сохранение данных, не использованных в Pulsar
На этом этапе необходимо убедиться, что существующие данные в Pulsar были сохранены в службе хранения объектов. Существует два подхода, и вы можете выбрать тот, который соответствует вашим потребностям.
Подход 1: использование Attu
Если в вашем рабочем развертывании Milvus имеется лишь небольшое количество коллекций с небольшим количеством сегментов, вы можете использовать Attu для сохранения данных в службе хранения объектов.
Выберите все коллекции во всех базах данных, перейдите на панель
Segments, нажмите кнопкуFlush.
Панель сегментов коллекции Затем во всплывающем окне снова нажмите кнопку
Flush.
Запрос на промывку данных в Attu Затем подождите, пока все состояния постоянных сегментов коллекций не станут
Flushed.
Просмотр состояния промывки данных в Attu
Подход 2: Использование API управления
Проксируйте порт 9091 прокси-сервера Milvus на локальный хост для последующих операций.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &Выход.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091Сохранить Pid для последующей очистки.
pid=8116Запустить действие по сохранению всех вставленных данных из Pulsar в 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Выход.
{ "segmentIDs": [ 454097953998181000, 454097953999383600, 454097953998180800 ] }Проверить все сегменты (All segments flushed).
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdinПо окончании вы должны увидеть следующее сообщение
{"status":{},"flushed":true}Остановите фоновый процесс
kubectl port-forward.kill $pidВыходные данные.
[1] + 8116 terminated kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091
Остановка Milvus и удаление Pulsar V2
На этом шаге вам нужно остановить Milvus pod и удалить развертывание Pulsar V2. Здесь есть два отдельных раздела:
Для пользователей Milvus Helm
Если вы установили Milvus с помощью схемы Milvus Helm, перейдите к разделу "Удаление Pulsar v2 с помощью Helm".
Для пользователей Milvus Operator
Если вы установили Milvus с помощью Milvus Operator, перейдите к разделу "Удалить Pulsar v2 с помощью Milvus Operator".
Удаление Pulsar V2 с помощью Helm
Если вы установили Milvus с помощью диаграммы Milvus Helm, выполните следующие действия, чтобы остановить Milvus pod и удалить развертывание Pulsar V2.
Сохраните текущие значения релиза Milvus на
values.yamlдля последующего восстановления.helm -n default get values my-release -o yaml > values.yaml cat values.yamlИспользуйте команду для остановки Milvus и всех зависимостей. Не беспокойтесь о томах данных, они будут сохранены по умолчанию.
helm -n default uninstall my-releaseВыход
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalledСписок pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) должен быть очищен
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Выход
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Проверьте, все ли PVC в списке
pulsar-pvcs.txtпредназначены для Pulsar. Убедившись, что ошибки нет, удалите PVC.cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=falseВыход.
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(Необязательно) В зависимости от класса хранилища, предоставляющего PVC, вам может потребоваться вручную удалить PV.
cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=falseНичего страшного, если он выдает ошибку NotFound. Он уже удален контроллерами 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
Удаление Pulsar V2 с помощью Milvus Operator
Если вы установили Milvus с помощью Milvus Operator, выполните следующие шаги, чтобы остановить Milvus pod и удалить развертывание Pulsar V2.
Сохраните текущий манифест Milvus на
milvus.yamlдля последующего использования.kubectl -n default get milvus my-release -o yaml > milvus.yaml head milvus.yaml -n 20Выход.
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:Создайте файл
patch.yamlсо следующим содержимым.# 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Используйте
kubectl patchдля сохранения данных etcd и хранилища и удаления данных pulsar при удалении milvus.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=mergeВыход.
milvus.milvus.io/my-release patchedОстановите Milvus и удалите данные пульсара V2. Не беспокойтесь о томах данных etcd и объектного хранилища, они будут сохранены по умолчанию.
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Выход: Обратите внимание, что на изящную остановку milvus и удаление оператором томов pulsar может уйти несколько минут.
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deletedДождитесь окончания выполнения команды.
Проверьте еще раз, чтобы убедиться, что ресурс Milvus исчез.
kubectl -n default get milvus my-releaseВывод должен быть таким.
No resources found in default namespace.
Запуск Pulsar V3 и Milvus
На этом шаге необходимо запустить капсулы Pulsar V3 и Milvus. Здесь есть два отдельных раздела:
Для пользователя Helm
Если вы установили Milvus с помощью схемы Milvus Helm, перейдите к разделу For Helm User.
Для пользователей Milvus Operator
Если вы установили Milvus с помощью Milvus Operator, перейдите к разделу Для пользователей Milvus Operator.
Запустите Pulsar V3 и используйте Helm
Отредактируйте
values.yaml, сохраненный на предыдущем шаге.# 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Обновите локальное репо Helm
helm repo add zilliztech https://zilliztech.github.io/milvus-helm helm repo update zilliztechВыведите .
"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!⎈Установите релиз milvus с новейшей версией карты helm, используя отредактированный
values.yaml.helm -n default install my-release zilliztech/milvus --reset-values -f values.yamlВыход
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: NoneПроверьте стручки, чтобы убедиться, что все они были запланированы и запущены с помощью
kubectl -n default get pods.Может потребоваться несколько минут, чтобы все капсулы запустились.
Выходные данные выглядят следующим образом.
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
Запуск Pulsar V3 и использование Milvus Operator
Отредактируйте
milvus.yaml, сохраненный на предыдущем шаге.# 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Убедитесь, что ваш Milvus Operator обновлен до версии v1.1.2 или более поздней.
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Используйте команду для запуска milvus с помощью pulsar v3
kubectl create -f milvus.yamlВыведите
milvus.milvus.io/my-release createdПроверьте, все ли капсулы были запланированы и запущены с помощью
kubectl -n default get pods.Запуск всех стручков может занять несколько минут.
Выходные данные выглядят следующим образом.
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