Executar o Milvus no Kubernetes com o Helm

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

Visão geral

O Helm usa um formato de empacotamento chamado gráficos. Um gráfico é uma coleção de arquivos que descrevem um conjunto relacionado de recursos do Kubernetes. O Milvus fornece um conjunto de gráficos para ajudá-lo a implantar dependências e componentes do Milvus.

Pré-requisitos

  • Instalar o Helm CLI.

  • Criar um cluster K8s.

  • Instalar 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, é recomendável usar a Milvus Sizing Tool para estimar os requisitos de hardware com base no tamanho dos seus dados. Isso ajuda a garantir o desempenho ideal e a alocação de recursos para a instalação do Milvus.

Se encontrar algum problema ao puxar a imagem, contacte-nos em community@zilliz.com com detalhes sobre o problema, e nós forneceremos o suporte necessário.

Instalar o Milvus Helm Chart

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

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

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

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

$ helm repo update

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

Instalação online

1. Implantar um cluster do Milvus

Depois de instalar o Helm chart, você pode iniciar o Milvus no Kubernetes. Esta secção orienta-o na implementação de um cluster do Milvus.

Precisa de uma implementação autónoma?

Se preferir implantar o Milvus no modo autônomo (nó único) para desenvolvimento ou teste, use este comando:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.15 \
  --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 usa o Woodpecker como a fila de mensagens padrão e ativa o componente Streaming Node. Para obter detalhes, consulte Visão geral da arquitetura e Usar o Woodpecker.

Implantar o cluster do Milvus:

O comando a seguir implanta um cluster do Milvus com configurações otimizadas para a versão 2.6.15, usando o Woodpecker como a fila de mensagens recomendada:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.15 \
  --set pulsarv3.enabled=false \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

O que este comando faz:

  • Usa o Woodpecker como a fila de mensagens (recomendado para manutenção reduzida)
  • Habilita o novo componente Streaming Node para melhorar o desempenho
  • Desabilita o antigo Nó de Índice (a funcionalidade agora é tratada pelo Nó de Dados)
  • Desabilita o Pulsar para usar o Woodpecker

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: Streaming Node é introduzido e ativado por defeito
  • Componentes mesclados: O nó de índice e o nó de dados são combinados em um único nó de dados

Para obter detalhes completos da arquitetura, consulte a Visão geral da arquitetura.

Opções alternativas de fila de mensagens:

Se preferir usar o Pulsar (escolha tradicional) em vez do Woodpecker:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.15 \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

Próximas etapas:O comando acima implanta o Milvus com as configurações recomendadas. Para uso em produção:

Notas importantes:

  • Nomeação de versões: Use apenas letras, números e traços (não são permitidos pontos)
  • Kubernetes v1.25+: se você encontrar problemas de PodDisruptionBudget, use esta solução alternativa:
    helm install my-release zilliztech/milvus \
      --set pulsar.bookkeeper.pdb.usePolicy=false \
      --set pulsar.broker.pdb.usePolicy=false \
      --set pulsar.proxy.pdb.usePolicy=false \
      --set pulsar.zookeeper.pdb.usePolicy=false
    

Para obter mais informações, consulte o Milvus Helm Chart e a documentação do Helm.

2. Verificar o status do cluster do Milvus

Verifique se a implantação foi bem-sucedida verificando o status do pod:

kubectl get pods

Aguarde até que todos os pods mostrem o status "Running". Com a configuração v2.6.15, 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-streaming-node-xxxxxxxxx       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
my-release-pulsar-autorecovery-86f5dbdf77-lchpc  1/1    Running   0        3m24s
my-release-pulsar-bookkeeper-0                   1/1    Running   0        3m23s
my-release-pulsar-bookkeeper-1                   1/1    Running   0        98s
my-release-pulsar-broker-556ff89d4c-2m29m        1/1    Running   0        3m23s
my-release-pulsar-proxy-6fbd75db75-nhg4v         1/1    Running   0        3m23s
my-release-pulsar-zookeeper-0                    1/1    Running   0        3m23s
my-release-pulsar-zookeeper-metadata-98zbr       0/1   Completed  0        3m24s

Principais componentes a verificar:

  • Componentes do Milvus: mixcoord, datanode, querynode, proxy, streaming-node
  • Dependências: etcd (metadados), minio (armazenamento de objectos), pulsar (fila de mensagens)

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

3. Conectar-se ao Milvus

Para se conectar ao seu cluster Milvus de fora do Kubernetes, é necessário configurar o encaminhamento de porta.

Configurar o encaminhamento de porta:

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

Este comando encaminha sua porta local 27017 para a porta do Milvus 19530. Você deve ver:

Forwarding from 127.0.0.1:27017 -> 19530

Detalhes da conexão:

  • Conexão local: localhost:27017
  • Porta padrão do Milvus: 19530

Opções para encaminhamento de porta:

  • Atribuir automaticamente a porta local: Usar :19530 em vez de 27017:19530 para deixar o kubectl escolher uma porta disponível
  • Escutar em todas as interfaces: Adicionar --address 0.0.0.0 para permitir conexões 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 estiver a utilizar o Milvus. Pode agora 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-o novamente.

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

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

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

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

  2. Aplique o arquivo 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 deve mostrar as configurações atualizadas.

Acesso à WebUI do Milvus

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

Para ativar o acesso à Milvus Web UI, é necessário reencaminhar a porta 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 à UI Web do Milvus em http://localhost:27018.

Instalação offline

Se estiver num ambiente com restrições de rede, siga o procedimento desta secção para iniciar um cluster do Milvus.

1. Obter o manifesto do Milvus

Execute o seguinte comando para obter o manifesto do Milvus.

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

O comando acima renderiza modelos de gráficos para um cluster Milvus e salva a saída em um arquivo de manifesto chamado milvus_manifest.yaml. Usando esse manifesto, você pode instalar um cluster do Milvus com 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 zilliztech/milvus > milvus_manifest.yaml para renderizar modelos de gráficos para uma instância do Milvus num modo autónomo.
  • Para alterar as configurações do Milvus, descarregue o modelo value.yaml coloque as configurações desejadas nele e use helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml para renderizar o manifesto de acordo.

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

O script de extração de imagens é 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. Extrair e guardar imagens

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

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

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

4. Carregar imagens

Pode agora carregar as imagens para os anfitriões no ambiente de rede restrita da seguinte forma:

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

5. Implantar o Milvus

$ kubectl apply -f milvus_manifest.yaml

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

Atualizar o cluster do 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 seguinte comando para desinstalar o Milvus.

$ helm uninstall my-release

O que vem a seguir

Depois de instalar o Milvus no Docker, você pode: