Обновление 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.
cat
,grep
,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