Aufrüstung von Pulsar
Dieser Artikel beschreibt, wie Sie Ihre Pulsar-Komponente von V2 auf V3 aktualisieren können, wenn Sie bereits einen funktionierenden Milvus-Einsatz mit Pulsar V2 haben. milvus-helm und milvus-operator verwenden seit Milvus v2.5 standardmäßig Pulsar V3, um einige Fehler und Sicherheitslücken zu beheben.
Der Upgrade-Vorgang erfordert eine kurze Unterbrechung des Dienstes (je nach Datenmenge dauert er zwischen einigen Minuten und mehr als zehn Minuten).
Vor dem Vorgang müssen Sie alle laufenden Clients davon abhalten, Daten in Milvus zu schreiben. Andernfalls können die geschriebenen Daten verloren gehen.
Dieser Artikel geht davon aus, dass Milvus im Namensraum
default
installiert ist und den Namenmy-release
trägt. Bitte ändern Sie die Parameter auf Ihren eigenen Namespace und Freigabenamen, während Sie die von dieser Seite kopierten Befehle ausführen.Stellen Sie sicher, dass Ihre Arbeitsumgebung unter dem oben genannten Namespace im Kubernetes-Cluster über Berechtigungen verfügt und die folgenden Befehle installiert sind.
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
für String-Manipulationsoperationend.
curl
oder Attu v2.4+ für die Interaktion mit der milvus management API
Fahrplan
Der Upgrade-Prozess umfasst die folgenden Schritte:
Prozeduren
Dieser Abschnitt enthält die detaillierten Verfahren für das Upgrade von Pulsar von V2 auf V3 in Milvus.
Persistieren von nicht verbrauchten Daten in Pulsar
In diesem Schritt müssen Sie sicherstellen, dass die in Pulsar vorhandenen Daten in den Objektspeicherdienst persistiert wurden. Es gibt zwei Ansätze, von denen Sie den Ihren Bedürfnissen entsprechenden wählen können.
Ansatz 1: Verwendung von Attu
Wenn Sie nur eine kleine Anzahl von Sammlungen in Ihrer Milvus-Bereitstellung mit nicht vielen Segmenten haben, können Sie Attu verwenden, um die Daten im Objektspeicherdienst zu persistieren.
Wählen Sie jede Sammlung in all Ihren Datenbanken aus, gehen Sie in das Panel
Segments
und klicken Sie auf die SchaltflächeFlush
Segment-Panel einer Sammlung
Klicken Sie dann im Popup-Fenster erneut auf
Flush
.Aufforderung zur Datenflutung in Attu
Warten Sie dann, bis die Persistent Segment States aller Sammlungen
Flushed
sind.Anzeigen des Datenflush-Status in Attu
Ansatz 2: Verwendung der Verwaltungs-API
Proxy-Port 9091 des Milvus-Proxys auf dem lokalen Host für nachfolgende Operationen.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
Ausgabe.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091
Pid für spätere Bereinigung speichern.
pid=8116
Auslösen der Aktion zum Persistieren aller eingefügten Daten von Pulsar zu 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
Ausgabe.
{ "segmentIDs": [ 454097953998181000, 454097953999383600, 454097953998180800 ] }
Prüfen Sie Alle Segmente geleert.
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin
Wenn der Vorgang abgeschlossen ist, sollten Sie die folgende Ausgabe sehen
{"status":{},"flushed":true}
Stoppen Sie den
kubectl port-forward
Prozess im Hintergrund.kill $pid
Ausgabe.
[1] + 8116 terminated kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091
Milvus stoppen und Pulsar V2 löschen
In diesem Schritt müssen Sie den Milvus-Pod stoppen und die Pulsar-V2-Bereitstellung löschen. Es sind zwei separate Abschnitte verfügbar:
Für Milvus Helm-Benutzer
Wenn Sie Milvus mit Hilfe des Milvus Helm-Diagramms installiert haben, gehen Sie zu Für Helm-Benutzer.
Für Milvus Operator-Benutzer
Wenn Sie Milvus mit dem Milvus Operator installiert haben, gehen Sie zu Für Milvus Operator-Benutzer.
Pulsar V2 mit Helm löschen
Wenn Sie Milvus mit Hilfe des Milvus Helm-Diagramms installiert haben, befolgen Sie die nachstehenden Schritte, um den Milvus-Pod zu stoppen und die Pulsar-V2-Bereitstellung zu löschen.
Speichern Sie die aktuellen Milvus-Freigabewerte auf
values.yaml
für eine spätere Wiederherstellung.helm -n default get values my-release -o yaml > values.yaml cat values.yaml
Verwenden Sie den Befehl, um Milvus und alle Abhängigkeiten zu stoppen. Machen Sie sich keine Sorgen um die Datenvolumina, sie werden standardmäßig beibehalten.
helm -n default uninstall my-release
Ausgabe
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalled
Liste pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) muss gelöscht werden
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
Ausgabe
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
Prüfen Sie, ob die PVC-Liste von
pulsar-pvcs.txt
alle für Pulsar ist. Sobald Sie bestätigt haben, dass kein Fehler vorliegt, löschen Sie die PVCs.cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Ausgabe.
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
(Optional) Je nach der Speicherklasse, die das PVC bereitstellt, müssen Sie das PV eventuell auch manuell entfernen.
cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Es ist in Ordnung, wenn sie NotFound-Fehler ausgibt. Sie ist bereits von den Kubernetes-Controllern gelöscht worden.
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 mit Milvus Operator löschen
Wenn Sie Milvus mit dem Milvus Operator installiert haben, befolgen Sie die folgenden Schritte, um den Milvus-Pod zu stoppen und die Pulsar-V2-Bereitstellung zu löschen.
Speichern Sie das aktuelle Milvus-Manifest unter
milvus.yaml
zur späteren Verwendung.kubectl -n default get milvus my-release -o yaml > milvus.yaml head milvus.yaml -n 20
Ausgabe.
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:
Erstellen Sie eine
patch.yaml
Datei mit folgendem Inhalt.# 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
Verwenden Sie
kubectl patch
, um etcd- und Speicherdaten beizubehalten und Pulsar-Daten zu löschen, während Sie Milvus löschen.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
Ausgabe.
milvus.milvus.io/my-release patched
Stoppen Sie Milvus und löschen Sie pulsar V2. Kümmern Sie sich nicht um die etcd- und Objektspeicherdaten, diese werden standardmäßig beibehalten.
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
Ausgabe: Beachten Sie, dass es ein paar Minuten dauern kann, bis milvus ordnungsgemäß beendet ist und der Operator die pulsar-Volumes gelöscht hat.
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deleted
Warten Sie, bis der Befehl beendet ist.
Prüfen Sie erneut, ob die Milvus-Ressource verschwunden ist.
kubectl -n default get milvus my-release
Die Ausgabe sollte wie folgt aussehen.
No resources found in default namespace.
Pulsar V3 und Milvus starten
In diesem Schritt müssen Sie die Pulsar V3- und Milvus-Pods starten. Es sind zwei separate Abschnitte verfügbar:
Für Helm-Benutzer
Wenn Sie Milvus mit Hilfe des Milvus Helm Diagramms installiert haben, gehen Sie zu Für Helm Benutzer.
Für Milvus Operator Benutzer
Wenn Sie Milvus mit dem Milvus Operator installiert haben, gehen Sie zu Für Milvus Operator Benutzer.
Starten Sie Pulsar V3 und verwenden Sie Helm
Bearbeiten Sie die im vorherigen Schritt gespeicherte
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
Aktualisieren Sie Ihr lokales Helm-Repositorium
helm repo add zilliztech https://zilliztech.github.io/milvus-helm helm repo update zilliztech
Ausgabe
"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!⎈
Installieren Sie Ihre Milvus-Version mit der neuesten Helm-Chart-Version unter Verwendung der editierten
values.yaml
helm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
Ausgabe
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
Überprüfen Sie die Pods, um zu sehen, ob alle mit
kubectl -n default get pods
geplant und ausgeführt werden.Es kann ein paar Minuten dauern, bis alle Pods gestartet sind.
Die Ausgabe ist wie folgt.
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 starten und Milvus Operator verwenden
Bearbeiten Sie die im vorherigen Schritt gespeicherte
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
Stellen Sie sicher, dass Ihr Milvus Operator auf v1.1.2 oder eine neuere Version aktualisiert wurde.
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
Verwenden Sie den Befehl zum Starten von Milvus mit Pulsar V3
kubectl create -f milvus.yaml
Ausgabe
milvus.milvus.io/my-release created
Überprüfen Sie die Pods, um zu sehen, ob sie alle mit
kubectl -n default get pods
geplant und ausgeführt werden.Es kann ein paar Minuten dauern, bis alle Pods gestartet sind.
Die Ausgabe ist wie folgt.
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