Aggiornamento di Pulsar
Questo articolo descrive la procedura per aggiornare il componente Pulsar da V2 a V3 se si dispone già di una distribuzione Milvus funzionante con Pulsar V2. Da Milvus v2.5, milvus-helm e milvus-operator utilizzeranno Pulsar V3 per impostazione predefinita per correggere alcuni bug e vulnerabilità di sicurezza. Mentre Milvus 2.5 è compatibile con Pulsar 2.x, l'aggiornamento a Pulsar V3 è opzionale. Per migliorare la stabilità e le prestazioni, si consiglia l'aggiornamento a Pulsar V3.
Il processo di aggiornamento richiede una breve interruzione del servizio (di solito dura da pochi minuti a più di dieci minuti, a seconda della quantità di dati).
Prima dell'operazione, è necessario interrompere la scrittura dei dati su Milvus da parte di tutti i client in esecuzione. In caso contrario, i dati scritti potrebbero andare persi.
Questo articolo presuppone che Milvus sia installato nello spazio dei nomi
default
e si chiamimy-release
. Si prega di modificare i parametri con il proprio spazio dei nomi e il nome della release durante l'esecuzione dei comandi copiati da questa pagina.Assicuratevi che il vostro ambiente di lavoro abbia i permessi sotto il suddetto spazio dei nomi nel cluster Kubernetes e che i seguenti comandi siano installati.
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
per le operazioni di manipolazione delle stringhed.
curl
o Attu v2.4+ per interagire con l'API di gestione milvus.
Tabella di marcia
Il processo di aggiornamento prevede le seguenti fasi:
Procedure
Questa sezione fornisce le procedure dettagliate per l'aggiornamento di Pulsar da V2 a V3 in Milvus.
Persistere i dati non consumati in Pulsar
In questa fase è necessario assicurarsi che i dati esistenti in Pulsar siano stati persistiti nel servizio di archiviazione degli oggetti. Sono disponibili due approcci e si può scegliere quello più adatto alle proprie esigenze.
Approccio 1: utilizzo di Attu
Se nella vostra implementazione Milvus funzionante avete solo un piccolo numero di collezioni con pochi segmenti, potete usare Attu per persistere i dati nel servizio di archiviazione degli oggetti.
Selezionate ogni raccolta in tutti i database, accedete al pannello
Segments
e fate clic sul pulsanteFlush
.Pannello dei segmenti di una raccolta
Quindi, alla comparsa del popup, fare nuovamente clic su
Flush
.Richiesta di lavaggio dei dati in Attu
Attendere quindi che gli stati di segmento persistenti di tutte le raccolte siano
Flushed
.Visualizzazione dello stato di lavaggio dei dati in Attu
Approccio 2: Utilizzo dell'API di gestione
Proxy della porta 9091 del proxy Milvus all'host locale per le operazioni successive.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
Uscita.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091
Salvare il Pid per una successiva pulizia.
pid=8116
Attivare l'azione di persistenza di tutti i dati inseriti da Pulsar a 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
Uscita.
{ "segmentIDs": [ 454097953998181000, 454097953999383600, 454097953998180800 ] }
Controllare Tutti i segmenti trasferiti.
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin
Al termine, si dovrebbe vedere il seguente output
{"status":{},"flushed":true}
Interrompere il processo di backendground
kubectl port-forward
kill $pid
Output.
[1] + 8116 terminated kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091
Arresto di Milvus e cancellazione di Pulsar V2
In questo passaggio, è necessario arrestare il pod Milvus ed eliminare il deployment di Pulsar V2. Sono disponibili due sezioni separate:
Per gli utenti di Milvus Helm
Se avete installato Milvus usando la tabella Milvus Helm, andate a Per gli utenti Helm.
Per gli utenti Milvus Operator
Se avete installato Milvus utilizzando Milvus Operator, andate a Per gli utenti di Milvus Operator.
Cancellare Pulsar V2 con Helm
Se avete installato Milvus usando il diagramma Milvus Helm, seguite i passaggi seguenti per arrestare il pod Milvus ed eliminare la distribuzione di Pulsar V2.
Salvare i valori attuali della release di Milvus in
values.yaml
per recuperarli in seguito.helm -n default get values my-release -o yaml > values.yaml cat values.yaml
Utilizzare il comando per arrestare Milvus e tutte le dipendenze. Non preoccupatevi dei volumi di dati, saranno mantenuti per impostazione predefinita.
helm -n default uninstall my-release
Uscita
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalled
L'elenco dei PVC e dei PV di pulsar (Persistent Volume Claims e Persistent Volume) deve essere cancellato.
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
Uscita
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
Controllare se l'elenco dei PVC di
pulsar-pvcs.txt
è tutto per Pulsar. Una volta confermato che non ci sono errori, eliminare i PVC.cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Uscita.
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
(Opzionale) A seconda della classe di archiviazione che fornisce il PVC, potrebbe essere necessario rimuovere manualmente il PV.
cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Non c'è problema se produce l'errore NotFound. È già stato eliminato dai controller di 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
Eliminare Pulsar V2 utilizzando Milvus Operator
Se avete installato Milvus usando Milvus Operator, seguite i passi seguenti per fermare il pod Milvus ed eliminare il deployment di Pulsar V2.
Salvare il manifesto Milvus corrente in
milvus.yaml
per un uso successivo.kubectl -n default get milvus my-release -o yaml > milvus.yaml head milvus.yaml -n 20
Output.
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:
Creare un file
patch.yaml
con il seguente contenuto.# 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
Usare
kubectl patch
per conservare i dati di etcd e storage e cancellare i dati di pulsar mentre si cancella milvus.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
Output.
milvus.milvus.io/my-release patched
Fermare Milvus e cancellare pulsar V2. Non preoccupatevi dei volumi di dati di etcd e object storage, saranno mantenuti per impostazione predefinita.
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
Uscita: Si noti che potrebbero essere necessari alcuni minuti perché milvus si arresti con grazia e perché l'operatore cancelli i volumi di pulsar.
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deleted
Attendere il termine del comando.
Verificare nuovamente che la risorsa Milvus sia stata eliminata.
kubectl -n default get milvus my-release
L'output dovrebbe essere simile a.
No resources found in default namespace.
Avviare Pulsar V3 e Milvus
In questo passaggio è necessario avviare i pod Pulsar V3 e Milvus. Sono disponibili due sezioni separate:
Per l'utente Helm
Se avete installato Milvus utilizzando la tabella Milvus Helm, andate a Per l'utente Helm.
Per gli utenti Milvus Operator
Se avete installato Milvus utilizzando Milvus Operator, andate a Per l'utente di Milvus Operator.
Avviare Pulsar V3 e utilizzare Helm
Modificare il sito
values.yaml
salvato nel passo precedente.# 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
Aggiornare il repo locale di helm
helm repo add zilliztech https://zilliztech.github.io/milvus-helm helm repo update zilliztech
Uscita
"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!⎈
Installare la release di Milvus con la versione più recente di helm chart utilizzando il file
values.yaml
modificato.helm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
Uscita
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
Controllare i pod per vedere se tutti sono stati pianificati e avviati con
kubectl -n default get pods
.Potrebbero essere necessari alcuni minuti perché tutti i pod vengano avviati.
L'output è simile a.
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
Avviare Pulsar V3 e utilizzare Milvus Operator
Modificare il file
milvus.yaml
salvato nel passo precedente.# 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
Assicurarsi che Milvus Operator sia aggiornato alla versione v1.1.2 o successiva.
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
Utilizzare il comando per avviare milvus con pulsar v3
kubectl create -f milvus.yaml
Uscita
milvus.milvus.io/my-release created
Controllare i pod per vedere se tutti sono stati programmati ed eseguiti con
kubectl -n default get pods
.Potrebbero essere necessari alcuni minuti perché tutti i pod vengano avviati.
L'output è simile a.
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