Atualizando o Pulsar
Este artigo descreve o procedimento para atualizar seu componente Pulsar de V2 para V3 se você já tem uma implantação Milvus funcionando com Pulsar V2. Desde Milvus v2.5, milvus-helm e milvus-operator usarão Pulsar V3 por padrão para corrigir alguns bugs e vulnerabilidades de segurança. Enquanto Milvus 2.5 é compatível com Pulsar 2.x, a atualização para Pulsar V3 é opcional. Para maior estabilidade e desempenho, recomendamos a atualização para a Pulsar V3.
O processo de atualização requer uma breve interrupção de serviço (geralmente leva de alguns minutos a mais de dez minutos, dependendo da quantidade de dados).
Antes da operação, é necessário impedir que todos os clientes em execução escrevam dados no Milvus. Caso contrário, os dados escritos podem perder-se.
Este artigo pressupõe que o Milvus está instalado no espaço de nomes
default
e tem o nomemy-release
. Por favor, altere os parâmetros para o seu próprio espaço de nomes e nome de lançamento enquanto executa os comandos copiados desta página.Certifique-se de que o seu ambiente de trabalho tem permissões no namespace acima mencionado no cluster Kubernetes e que os seguintes comandos estão instalados.
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
para operações de manipulação de cadeia de caracteresd.
curl
ou Attu v2.4+ para interagir com a API de gestão milvus
Roteiro
O processo de atualização inclui os seguintes passos:
Procedimentos
Esta secção fornece os procedimentos detalhados para atualizar a Pulsar de V2 para V3 no Milvus.
Persistir os dados não consumidos no Pulsar
Neste passo, é necessário garantir que os dados existentes no Pulsar foram persistidos no serviço de armazenamento de objetos. Existem duas abordagens disponíveis, e você pode escolher a que melhor se adapta às suas necessidades.
Abordagem 1: usando o Attu
Se você tiver apenas um pequeno número de coleções em sua implantação Milvus em funcionamento com poucos segmentos, você pode usar o Attu para persistir os dados no serviço de armazenamento de objetos.
Selecione todas as colecções em todas as suas bases de dados, aceda ao painel
Segments
, clique no botãoFlush
Painel de segmentos de uma coleção
Em seguida, na janela pop-up, clique novamente em
Flush
.Aviso de descarga de dados no Attu
Em seguida, aguarde até que todos os estados de segmento persistente das colecções sejam
Flushed
.Exibir o status da descarga de dados no Attu
Abordagem 2: Utilizar a API de gestão
Porta proxy 9091 do proxy Milvus para o host local para operações subsequentes.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
Saída.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091
Guardar o Pid para limpeza posterior.
pid=8116
Acionar a ação de persistir todos os dados inseridos do Pulsar para o 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
Saída.
{ "segmentIDs": [ 454097953998181000, 454097953999383600, 454097953998180800 ] }
Verifique Todos os segmentos liberados.
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin
Quando estiver concluído, você deve ver a seguinte saída
{"status":{},"flushed":true}
Interrompa o processo de backendground
kubectl port-forward
kill $pid
Saída.
[1] + 8116 terminated kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091
Parar o Milvus e excluir o Pulsar V2
Nesta etapa, você precisa parar o pod do Milvus e excluir a implantação do Pulsar V2. Há duas seções separadas disponíveis:
Para utilizadores do Milvus Helm
Se instalou o Milvus utilizando o gráfico do Milvus Helm, vá para Para o utilizador do Helm.
Para utilizadores do Milvus Operator
Se instalou o Milvus utilizando o Milvus Operator, vá para Para o utilizador do Milvus Operator.
Eliminar o Pulsar V2 utilizando o Helm
Se você instalou o Milvus usando o gráfico Milvus Helm, siga as etapas abaixo para interromper o pod do Milvus e excluir a implantação do Pulsar V2.
Salve os valores atuais da versão do Milvus em
values.yaml
para recuperação posterior.helm -n default get values my-release -o yaml > values.yaml cat values.yaml
Use o comando para parar o Milvus e todas as dependências. Não se preocupe com os volumes de dados, eles serão mantidos por padrão.
helm -n default uninstall my-release
Saída
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalled
Lista pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) precisa ser limpa
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
Saída
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
Verifique se a lista de PVCs de
pulsar-pvcs.txt
é toda para a Pulsar. Depois de confirmar que não há erro, exclua os PVCs.cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Saída.
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
(Opcional) Dependendo da classe de armazenamento que fornece o PVC, também pode ser necessário remover manualmente o PV.
cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
Não há problema se ele emitir erros NotFound. Ele já foi excluído pelos controladores do 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
Excluir o Pulsar V2 usando o Milvus Operator
Se você instalou o Milvus usando o Milvus Operator, siga as etapas abaixo para interromper o pod do Milvus e excluir a implantação do Pulsar V2.
Salve o Manifesto do Milvus atual em
milvus.yaml
para uso posterior.kubectl -n default get milvus my-release -o yaml > milvus.yaml head milvus.yaml -n 20
Saída.
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:
Crie um arquivo
patch.yaml
com o seguinte conteúdo.# 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
Utilize
kubectl patch
para manter os dados do etcd e do armazenamento e eliminar os dados do pulsar enquanto elimina o milvus.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
Saída.
milvus.milvus.io/my-release patched
Pare o Milvus e apague o pulsar V2. Não se preocupe com os volumes de dados do etcd e do armazenamento de objetos, eles serão mantidos por padrão.
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
Saída: Observe que pode levar alguns minutos para o milvus parar graciosamente e para o operador excluir os volumes do pulsar.
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deleted
Espere até que o comando termine.
Verifique novamente para ver se o recurso Milvus desapareceu
kubectl -n default get milvus my-release
A saída deve ser como.
No resources found in default namespace.
Iniciar o Pulsar V3 e o Milvus
Nesta etapa, você precisa iniciar os pods Pulsar V3 e Milvus. Há duas seções separadas disponíveis:
Para o utilizador do Helm
Se instalou o Milvus usando o gráfico do Milvus Helm, vá para For Helm User.
Para utilizadores do Milvus Operator
Se instalou o Milvus usando a carta Milvus Operator, vá para Para o utilizador do Milvus Operator.
Inicie o Pulsar V3 e use o Helm
Edite o
values.yaml
salvo no Passo anterior.# 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
Atualize seu repositório helm local
helm repo add zilliztech https://zilliztech.github.io/milvus-helm helm repo update zilliztech
Saída
"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!⎈
Instale sua versão do milvus com a mais nova versão do helm chart usando o
values.yaml
editadohelm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
Saída
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
Verifique os pods para ver se todos eles são agendados e executados com
kubectl -n default get pods
.Pode levar alguns minutos para que todos os pods sejam iniciados
O resultado é semelhante.
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
Iniciar o Pulsar V3 e usar o Milvus Operator
Editar o
milvus.yaml
guardado no passo anterior.# 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
Certifique-se de que o seu Milvus Operator está atualizado para a versão v1.1.2 ou posterior
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
Use o comando para iniciar o milvus com o pulsar v3
kubectl create -f milvus.yaml
Saída
milvus.milvus.io/my-release created
Verifique os pods para ver se todos eles são agendados e executados com
kubectl -n default get pods
.Pode demorar alguns minutos para que todos os pods sejam iniciados.
A saída é semelhante.
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