Utilizando Milvus na Magalu Cloud
Milvus é um banco de dados vetorial open-source projetado especificamente para armazenar, indexar e buscar grandes volumes de dados não estruturados, como imagens, vídeos, textos, entre outros, por meio de embeddings (representações vetoriais).
Existem 3 maneiras de utilizar o milvus:
-
Milvus Lite: uma versão do milvus que pode ser utilizada atravez do SDK python, onde os dados são armazenados em um arquivo, é recomendado para criação de prototipos utilizando milvus ou com o uso de um volume de até 1 milhão de vetores.
-
Milvus Standalone: uma versão do milvus para utilizar em um único servidor, ele empacota todos os recursos necessários em uma imagem docker, facilitando no processo de deploy. Caso não queira usar kubernetes em produção, está é uma ótima opção, desde que o servidor tenha memória suficiente para lidar com o volume de dados e consultas. Essa versão é recomendada para volumes de até 100M de vetores.
-
Milvus Distributed: uma versão distribuida do milvus, onde a ingestão de dados, consulta, e criação de index são processadas separadamentes por nós isolados, possibilitando um escalamento quando necessário.
Para os exemplos que serão apresentados a seguir, será utilizado a versão distribuida do Milvus, porém, a versão Standalone também é compativel com a Magalu Cloud.
Deploy
Neste guia, serão apresentados duas maneiras de implantar o Milvus em um cluster na Magalu Cloud:
Manual – utilizando Helm
Automática – utilizando Terraform
Para isso, será utilizado um cluster com um node pool do tipo Genérico Médio, contendo três nós.
Se você deseja estimar os recursos necessários para sua aplicação, o Milvus disponibiliza uma calculadora de recursos. Basta inserir algumas informações sobre sua aplicação, e ela estimará a quantidade de CPU, RAM e armazenamento necessários.
- Helm
- Terraform
Criando Cluster na Magalu Cloud.
Para seguir com esse guia, é necessário criar um cluster com três nodes do tipo Genérico Medium.
Configurando Milvus.
Para configurar o Milvus, primeiro é necessário baixar os arquivos de configuração padrão do Milvus. Para isso, será utilizado o Helm. Execute os seguintes comandos para instalar o Helm e adicionar os repositórios do Milvus:
- Linux ou MacOS
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo add zilliztech https://zilliztech.github.io/milvus-helm/
helm repo update
Em seguida, dentro do diretório em que deseja trabalhar, execute o comando abaixo para baixar os arquivos de configuração. Esse
comando criará um diretório chamado milvus, que conterá os arquivos de configuração, entre eles o values.yaml
:
helm pull milvus/milvus --untar
Abra o arquivo milvus/values.yaml. Nele estarão todas as possíveis configurações. Procure pela seção referente ao service e substitua ou ajuste para que fique conforme o exemplo abaixo:
service:
type: LoadBalancer
port: 19530
portName: milvus
nodePort: ""
annotations: {}
labels: {}
externalIPs: []
loadBalancerSourceRanges:
- 0.0.0.0/0
Esse ajuste criará um service para expor os serviços necessários para acessar o Milvus.
Ainda no arquivo values.yaml, localize a seção externalS3 e ajuste-a com suas credenciais da Magalu Cloud e informações do bucket, conforme o exemplo:
externalS3:
enabled: true
host: "br-se1.magaluobjects.com"
port: "443"
accessKey: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
secretKey: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
useSSL: true
bucketName: "bucket_name"
cloudProvider: "aws"
Como os dados serão armazenados no OBJS, é necessário desativar o MinIO para evitar a criação de pods desnecessários. Para isso, no mesmo arquivo values.yaml, localize a seção minio e define o campo enabled como false:
minio:
enabled: false
Após realizar essas alterações, o Milvus estará configurado para utilizar o Object Storage da Magalu Cloud como armazenamento e expor seus serviços conforme desejado.
Realizando Deploy
Para fazer deploy do milvus no kubernetes, basta executar o comando abaixo passando o kubeconfig do cluster.
helm --kubeconfig=kubeconfig.yaml upgrade --install milvus milvus/milvus -f milvus/values.yaml
Pré Requisitos
Para realizar a construção do cluster na MGC e o deploy do Milvus com terraform, é necessário que MGC CLI esteja instalado em sua máquina e que sua conta esteja autenticada.
Configurando Milvus
Primeiramente, é necessário baixar o template que contém os códigos necessários para realizar o deploy do Milvus na Magalu Cloud.
O template possui cinco arquivos principais:
-
version.tf – Define os provedores necessários para a execução do Terraform.
-
variables.tf – Define variáveis utilizadas nos códigos, como o flavor do nodepool, a quantidade de réplicas, entre outros parâmetros.
-
main.tf – Contém as instruções para a criação do cluster na Magalu Cloud e do nodepool. Ao final da execução, gera um arquivo kubeconfig.yaml, que é utilizado para se conectar ao cluster.
-
values.yaml.tpl – Template contendo as configurações do Milvus.
-
secrets.tfvars.example – Contém um exemplo das variáveis necessárias para a execução.
-
milvus.tf – Define as instruções para o deploy do Milvus, utilizando o arquivo values.yaml para configurar o ambiente, como a quantidade de réplicas de cada serviço e o tipo de storage a ser utilizado.
Após baixar os arquivos, copie o secrets.tfvars.example mantendo como o nome "secrets.tfvars". Após isso, abra o arquivo e preencha accessKey e secretKey com as informações da sua conta na Magalu Cloud, host com o Endpoint que deseja usar e o nome do bucket que o Milvus irá utilizar para guardar os dados.