Executar o Milvus no Kubernetes com o Helm

Esta página ilustra como iniciar uma instância do Milvus no Kubernetes utilizando os gráficos Helm do Milvus.

Visão geral

O Helm utiliza um formato de empacotamento denominado «charts». Um chart é um conjunto de ficheiros que descreve um conjunto relacionado de recursos do Kubernetes. O Milvus fornece um conjunto de charts para o ajudar a implementar as dependências e os componentes do Milvus.

Pré-requisitos

  • Instale a CLI do Helm.

  • Crie um cluster K8s.

  • Instale uma StorageClass. Pode verificar a StorageClass instalada da seguinte forma.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Verifique os requisitos de hardware e software antes da instalação.

  • Antes de instalar o Milvus, recomenda-se utilizar a Ferramenta de Dimensionamento do Milvus para estimar os requisitos de hardware com base no tamanho dos seus dados. Isto ajuda a garantir um desempenho ideal e uma alocação de recursos adequada para a sua instalação do Milvus.

Se tiver alguma dificuldade ao descarregar a imagem, contacte-nos através do endereço community@zilliz.com com detalhes sobre o problema e iremos prestar-lhe o apoio necessário.

Instalar o Helm Chart do Milvus

Antes de instalar os Helm Charts do Milvus, é necessário adicionar o repositório Helm do Milvus.

helm repo add zilliztech https://zilliztech.github.io/milvus-helm/

O repositório de Helm Charts do Milvus em https://github.com/milvus-io/milvus-helm foi arquivado. Agora utilizamos o novo repositório em https://github.com/zilliztech/milvus-helm. O repositório arquivado continua disponível para charts até à versão 4.0.31, mas utilize o novo repositório para versões posteriores.

Em seguida, obtenha os gráficos Milvus a partir do repositório da seguinte forma:

$ helm repo update

Pode executar este comando a qualquer momento para obter os gráficos Helm mais recentes do Milvus.

Instalação online

1. Implemente um cluster Milvus

Depois de instalar o gráfico Helm, pode iniciar o Milvus no Kubernetes. Esta secção orienta-o na implementação de um cluster Milvus.

Precisa, em vez disso, de uma implantação autónoma?

Se preferir implementar o Milvus no modo autónomo (um único nó) para desenvolvimento ou testes, utilize este comando:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.3 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

Nota: O modo autónomo utiliza o Woodpecker como fila de mensagens predefinida e ativa o componente Streaming Node. As implementações autónomas executam o Woodpecker incorporado no pod do Milvus; o serviço dedicado do Woodpecker (pods separados) é utilizado apenas para implementações distribuídas/em cluster. Para mais detalhes, consulte a Visão Geral da Arquitetura e o Woodpecker.

Implementar o cluster do Milvus:

Para o modo de serviço do Woodpecker, recomendamos a utilização do Milvus 3.0.3 ou posterior com o Woodpecker v0.1.46 ou posterior.

O comando seguinte implementa um cluster Milvus com definições otimizadas para a v3.0.3, utilizando o Woodpecker como fila de mensagens recomendada:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.3 \
  --set woodpecker.enabled=true \
  --set woodpecker.image.tag=v0.1.46 \
  --set streaming.enabled=true \
  --set streaming.woodpecker.embedded=false \
  --set indexNode.enabled=false

O que este comando faz:

  • Utiliza o Woodpecker como fila de mensagens (recomendado para reduzir a manutenção)
  • Executa o Woodpecker como um serviço dedicado (um StatefulSet separado), não incorporado no nó de streaming
  • Ativa o novo componente «Streaming Node » para melhorar o desempenho
  • Desativa o Nodo de Índice antigo (a funcionalidade é agora gerida pelo Nodo de Dados)

Alterações na arquitetura do Milvus 2.6.x:

  • Fila de mensagens: o Woodpecker é agora recomendado (reduz a manutenção da infraestrutura em comparação com o Pulsar)
  • Novo componente: o Nodo de Streaming é introduzido e ativado por predefinição
  • Componentes fundidos: o Nodo de Índice e o Nodo de Dados são combinados num único Nodo de Dados

Para obter detalhes completos sobre a arquitetura, consulte a Visão Geral da Arquitetura.

Filas de mensagens alternativas: para implementar com o Pulsar, o Kafka ou o RocksMQ em vez do Woodpecker, consulte Dependências opcionais.

Próximos passos: O comando acima implementa o Milvus com as configurações recomendadas. Para utilização em produção:

Notas importantes:

  • Nomeação da versão: utilize apenas letras, números e traços (não são permitidos pontos)

Para mais informações, consulte o gráfico Helm do Milvus e a documentação do Helm.

2. Verifique o estado do cluster do Milvus

Verifique se a sua implementação foi bem-sucedida, verificando o estado dos pods:

kubectl get pods

Aguarde até que todos os pods apresentem o estado «Running». Com a configuração v3.0.3, deverá ver pods semelhantes a:

NAME                                             READY  STATUS   RESTARTS  AGE
my-release-etcd-0                                1/1    Running   0        3m23s
my-release-etcd-1                                1/1    Running   0        3m23s
my-release-etcd-2                                1/1    Running   0        3m23s
my-release-milvus-datanode-68cb87dcbd-4khpm      1/1    Running   0        3m23s
my-release-milvus-mixcoord-7fb9488465-dmbbj      1/1    Running   0        3m23s
my-release-milvus-proxy-6bd7f5587-ds2xv          1/1    Running   0        3m24s
my-release-milvus-querynode-5cd8fff495-k6gtg     1/1    Running   0        3m24s
my-release-milvus-streamingnode-7b8cfc769c-mqmsm  1/1    Running   0        3m24s
my-release-milvus-woodpecker-0                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-1                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-2                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-3                   1/1    Running   0        3m24s
my-release-minio-0                               1/1    Running   0        3m23s
my-release-minio-1                               1/1    Running   0        3m23s
my-release-minio-2                               1/1    Running   0        3m23s
my-release-minio-3                               1/1    Running   0        3m23s

Componentes-chave a verificar:

  • Componentes do Milvus: mixcoord, datanode, querynode, proxy, streamingnode
  • Dependências: etcd (metadados), minio (armazenamento de objetos), woodpecker (fila de mensagens)

Com streaming.woodpecker.embedded=false, o Woodpecker funciona como um StatefulSet dedicado (my-release-milvus-woodpecker, 4 réplicas por predefinição — um quórum de 3 nós mais um de reserva para tolerância a falhas; não defina woodpecker.replicaCount abaixo de 3) liderado por um serviço sem interface gráfica, utilizando o MinIO como backend de armazenamento — pelo que o cluster possui um conjunto separado de pods woodpecker, distinto do nó de streaming.

Também pode aceder à interface Web do Milvus em http://127.0.0.1:9091/webui/ assim que o reencaminhamento de portas estiver configurado (ver o passo seguinte). Para mais detalhes, consulte a interface Web do Milvus.

3. Ligar-se ao Milvus

Para se ligar ao seu cluster Milvus a partir do exterior do Kubernetes, é necessário configurar o reencaminhamento de portas.

Configurar o reencaminhamento de portas:

kubectl port-forward service/my-release-milvus 27017:19530

Este comando redireciona a sua porta local 27017 para a porta do Milvus 19530. Deverá ver:

Forwarding from 127.0.0.1:27017 -> 19530

Detalhes da ligação:

  • Ligação local: localhost:27017
  • Porta predefinida do Milvus: 19530

Opções para o reencaminhamento de portas:

  • Atribuir porta local automaticamente: Utilize :19530 em vez de 27017:19530 para permitir que o kubectl escolha uma porta disponível
  • Escutar em todas as interfaces: Adicione --address 0.0.0.0 para permitir ligações a partir de outras máquinas:
    kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
    
  • Implementação autónoma: Se estiver a utilizar o modo autónomo, o nome do serviço permanece o mesmo

Mantenha este terminal aberto enquanto utiliza o Milvus. Agora pode ligar-se ao Milvus utilizando qualquer SDK do Milvus em localhost:27017.

(Opcional) Atualizar as configurações do Milvus

Pode atualizar as configurações do seu cluster Milvus editando o ficheiro values.yaml e aplicando-as novamente.

  1. Crie um ficheiro values.yaml com as configurações pretendidas.

    O que se segue pressupõe que pretende ativar o proxy.http.

    extraConfigFiles:
      user.yaml: |+
        proxy:
          http:
            enabled: true
    

    Para os itens de configuração aplicáveis, consulte «Configuração do sistema».

  2. Aplique o ficheiro ` values.yaml `.

helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
  1. Verifique as configurações atualizadas.

    helm get values my-release
    

    A saída deverá apresentar as configurações atualizadas.

Aceder à Milvus WebUI

O Milvus inclui uma ferramenta GUI integrada chamada Milvus WebUI, à qual pode aceder através do seu navegador. A Milvus WebUI melhora a observabilidade do sistema com uma interface simples e intuitiva. Pode utilizar a Milvus WebUI para observar as estatísticas e métricas dos componentes e dependências do Milvus, verificar detalhes da base de dados e da recolha de dados e listar configurações detalhadas do Milvus. Para mais detalhes sobre a Milvus WebUI, consulte Milvus WebUI

Para ativar o acesso à Milvus WebUI, é necessário redirecionar as portas do pod proxy para uma porta local.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

Agora, pode aceder à interface web do Milvus em http://localhost:27018.

Instalação offline

Se se encontrar num ambiente com restrições de rede, siga o procedimento descrito nesta secção para iniciar um cluster do Milvus.

1. Obter o manifesto do Milvus

Execute o comando seguinte para obter o manifesto do Milvus.

$ helm template my-release zilliztech/milvus > milvus_manifest.yaml

O comando acima gera modelos de gráficos para um cluster do Milvus e guarda o resultado num ficheiro de manifesto denominado « milvus_manifest.yaml ». Utilizando este manifesto, pode instalar um cluster do Milvus com os seus componentes e dependências em pods separados.

  • Para instalar uma instância do Milvus no modo autónomo, em que todos os componentes do Milvus estão contidos num único pod, deve executar helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false --set standalone.messageQueue=woodpecker --set woodpecker.enabled=true --set streaming.enabled=true zilliztech/milvus > milvus_manifest.yaml para gerar modelos de gráfico para uma instância do Milvus no modo autónomo.
  • Para alterar as configurações do Milvus, descarregue o value.yaml modelo, insira as definições pretendidas e utilize helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml para gerar o manifesto em conformidade.

2. Descarregar o script de obtenção de imagens

O script de obtenção de imagens foi desenvolvido em Python. Deve descarregar o script juntamente com as suas dependências no ficheiro requirement.txt.

$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/requirements.txt
$ wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/offline/save_image.py

3. Obter e guardar imagens

Execute o comando seguinte para descarregar e guardar as imagens necessárias.

$ pip3 install -r requirements.txt
$ python3 save_image.py --manifest milvus_manifest.yaml

As imagens são descarregadas para uma subpasta chamada « images » no diretório atual.

4. Carregar imagens

Pode agora carregar as imagens nos anfitriões no ambiente com restrições de rede da seguinte forma:

$ for image in $(find . -type f -name "*.tar.gz") ; do gunzip -c $image | docker load; done

5. Implementar o Milvus

$ kubectl apply -f milvus_manifest.yaml

Até ao momento, pode seguir os passos 2 e 3 da instalação online para verificar o estado do cluster e redirecionar uma porta local para o Milvus.

Atualizar o cluster Milvus em execução

Execute o seguinte comando para atualizar o seu cluster Milvus em execução para a versão mais recente:

$ helm repo update
$ helm upgrade my-release zilliztech/milvus --reset-then-reuse-values

Desinstalar o Milvus

Execute o comando seguinte para desinstalar o Milvus.

$ helm uninstall my-release

Dependências opcionais

Esta implementação utiliza o Woodpecker como fila de mensagens, o etcd para metadados e o MinIO para armazenamento de objetos. Para utilizar uma fila de mensagens diferente ou ligar armazenamento de objetos/metadados externos, consulte:

O Storage V3 está desativado por predefinição. Ative-o antes de utilizar funcionalidades que dependam dele. Para conhecer os requisitos e as considerações de compatibilidade, consulte Storage V3.

Próximos passos

Depois de instalar o Milvus no Docker, pode: