Pulsarのアップグレード
この記事では、既にPulsar V2を使ったMilvusデプロイメントが動作している場合に、PulsarコンポーネントをV2からV3にアップグレードする手順を説明します。
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と併用するをご参照ください。
アップグレード作業には短時間のサービス停止が必要です(データ量にもよりますが、通常数分から10分以上かかります)。
アップグレード作業前に、Milvusへのデータ書き込みを停止する必要があります。さもないと、書き込まれたデータが失われる可能性があります。
本記事では、Milvusが名前空間
default
、名前my-release
にインストールされていることを前提としています。このページからコピーしたコマンドを実行する際には、パラメータをご自身の名前空間とリリース名に変更してください。作業環境がKubernetesクラスタの上記の名前空間配下にパーミッションがあり、以下のコマンドがインストールされていることを確認してください。
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
b.awk
>= 1.20 b.grep
>= 3.14.0 c. , , 文字列操作用d. milvus管理APIと対話するための
curl
またはAttu v2.4+
ロードマップ
アップグレードプロセスには以下のステップが含まれます:
手順
このセクションでは、MilvusでPulsarをV2からV3にアップグレードする詳細手順を説明します。
Pulsarで消費されなかったデータの永続化
この手順では、Pulsar内の既存データがオブジェクト・ストレージ・サービスに永続化されていることを確認する必要があります。 2つのアプローチがあり、ニーズに合わせて選択することができます。
アプローチ1:Attuを使う
Milvusデプロイメントのコレクション数が少なく、セグメント数もそれほど多くない場合は、Attuを使用してデータをオブジェクト・ストレージ・サービスに永続化することができます。
全てのデータベースで全てのコレクションを選択し、
Segments
パネルに入り、Flush
ボタンをクリックします。コレクションのセグメントパネル
ポップアップが表示されたら、
Flush
を再度クリックします。Attuのデータフラッシュプロンプト
すべてのコレクションのPersistent Segment Stateが
Flushed
になるまで待ちます。Attuでデータフラッシュステータスを表示する
アプローチ 2: 管理 API を使用する
Milvusプロキシのポート9091をローカルホストにプロキシする。
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ストレージに永続化するアクションをトリガーする。
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 ] }
全てのセグメントがフラッシュされたことを確認する。
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ポッドを停止し、Pulsar V2デプロイメントを削除する必要があります。 利用可能なセクションは2つに分かれています:
Milvus Helmユーザの方へ
Milvus Helmチャートを使ってMilvusをインストールした場合は、「Helmを使ってPulsar v2を削除する」に進んでください。
Milvus Operatorをお使いの方
Milvus Operatorを使ってMilvusをインストールした場合は、Milvus Operatorを使ってPulsar v2を削除するをご覧ください。
Helmを使ってPulsar V2を削除する
Milvus Helmチャートを使用してMilvusをインストールした場合は、以下の手順に従ってMilvusポッドを停止し、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
リスト・パルサーPVC & PV(持続ボリューム・クレーム & 持続ボリューム)をクリアする必要があります。
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
pulsar-pvcs.txt
、PVCリストがすべて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
Milvus Operatorを使ったPulsar V2の削除
Milvus Operatorを使ってMilvusをインストールした場合は、以下の手順でMilvusポッドを停止し、Pulsar V2デプロイメントを削除してください。
後で使用するため、現在のMilvus Manifestを
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
Fileを作成します。# 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
milvusを削除する間、
kubectl patch
、etcdとストレージ・データを保持し、パルサー・データを削除する。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ポッドを起動する必要があります。 利用可能なセクションは2つに分かれています:
Helmユーザの場合
Milvus Helmチャートを使ってMilvusをインストールした場合は、"Helm User"へ進んでください。
Milvus Operator ユーザ向け
Milvus Operatorを使ってMilvusをインストールした場合は、For Milvus Operator Userへ進んでください。
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!⎈
編集した
values.yaml
を使用して、最新のhelmチャート・バージョンでmilvusリリースをインストールします。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 with 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