Este tutorial mostra como implementar um cluster de base de dados vetorial Weaviate no Google Kubernetes Engine (GKE).
O Weaviate é uma base de dados de vetores de código aberto com desempenho de baixa latência e suporte básico para diferentes tipos de multimédia, como texto e imagens. Suporta a pesquisa semântica, a resposta a perguntas e a classificação. O Weaviate é totalmente criado em Go e armazena objetos e vetores, o que permite a utilização da pesquisa vetorial, da pesquisa de palavras-chave e de uma combinação de ambas como uma pesquisa híbrida. Do ponto de vista da infraestrutura, o Weaviate é uma base de dados nativa da nuvem e tolerante a falhas. A tolerância a falhas é fornecida pela arquitetura sem líder, em que cada nó do cluster da base de dados pode processar pedidos de leitura e escrita, o que, por sua vez, exclui um único ponto de falha.
Este tutorial destina-se a administradores e arquitetos da plataforma na nuvem, engenheiros de ML e profissionais de MLOps (DevOps) interessados na implementação de clusters de bases de dados vetoriais no GKE.
Vantagens
O Weaviate oferece as seguintes vantagens:
- Bibliotecas para várias linguagens de programação e API aberta para integração com outros serviços.
- Escalabilidade horizontal.
- Um equilíbrio entre a rentabilidade e a velocidade das consultas, especialmente quando se trabalha com grandes conjuntos de dados. Pode escolher a quantidade de dados armazenados na memória em comparação com o disco.
Objetivos
Neste tutorial, vai aprender a:
- Planeie e implemente a infraestrutura do GKE para o Weaviate.
- Implemente e configure a base de dados Weaviate num cluster do GKE.
- Execute um notebook para gerar e armazenar exemplos de incorporações de vetores na sua base de dados e execute consultas de pesquisa baseadas em vetores.
Configure o seu ambiente
Para configurar o seu ambiente com o Cloud Shell, siga estes passos:
Defina variáveis de ambiente para o seu projeto, região e um prefixo de recurso de cluster do Kubernetes:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=weaviate export REGION=us-central1
Substitua
PROJECT_ID
pelo seu Google Cloud ID do projeto.Este tutorial usa a região
us-central1
para criar os recursos de implementação.Verifique a versão do Helm:
helm version
Atualize a versão se for anterior à 3.13:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Clone o repositório de código de exemplo do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Navegue para o diretório
weaviate
:cd kubernetes-engine-samples/databases/weaviate
Crie a infraestrutura do cluster
Nesta secção, executa um script do Terraform para criar um cluster do GKE regional privado e de elevada disponibilidade para implementar a sua base de dados do Weaviate.
Pode optar por implementar o Weaviate através de um cluster padrão ou do Autopilot. Cada um tem as suas próprias vantagens e modelos de preços diferentes.
Piloto automático
O diagrama seguinte mostra um cluster do GKE Autopilot implementado no projeto.
Para implementar a infraestrutura do cluster, execute os seguintes comandos no Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-autopilot init
terraform -chdir=terraform/gke-autopilot apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
O GKE substitui as seguintes variáveis no tempo de execução:
GOOGLE_OAUTH_ACCESS_TOKEN
usa o comandogcloud auth print-access-token
para obter um token de acesso que autentica as interações com várias APIs Google CloudPROJECT_ID
,REGION
eKUBERNETES_CLUSTER_PREFIX
são as variáveis de ambiente definidas na secção Configure o seu ambiente e atribuídas às novas variáveis relevantes para o cluster do Autopilot que está a criar.
Quando lhe for pedido, escreva yes
.
O resultado é semelhante ao seguinte:
...
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials weaviate-cluster --region us-central1"
O Terraform cria os seguintes recursos:
- Uma rede VPC personalizada e uma sub-rede privada para os nós do Kubernetes.
- Um Cloud Router para aceder à Internet através da tradução de endereços de rede (NAT).
- Um cluster do GKE privado na região
us-central1
. - Um
ServiceAccount
com autorizações de registo e monitorização para o cluster. - Configuração do serviço gerido Google Cloud para o Prometheus para monitorização e alertas de clusters.
Standard
O diagrama seguinte mostra um cluster GKE regional privado padrão implementado em três zonas diferentes.
Para implementar a infraestrutura do cluster, execute os seguintes comandos no Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-standard init
terraform -chdir=terraform/gke-standard apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
O GKE substitui as seguintes variáveis no tempo de execução:
GOOGLE_OAUTH_ACCESS_TOKEN
usa o comandogcloud auth print-access-token
para obter um token de acesso que autentica as interações com várias APIs Google Cloud.PROJECT_ID
,REGION
eKUBERNETES_CLUSTER_PREFIX
são as variáveis de ambiente definidas na secção Configure o seu ambiente e atribuídas às novas variáveis relevantes para o cluster padrão que está a criar.
Quando lhe for pedido, escreva yes
. Estes comandos podem demorar vários minutos a serem concluídos e o cluster pode demorar a apresentar o estado pronto.
O resultado é semelhante ao seguinte:
...
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials weaviate-cluster --region us-central1"
O Terraform cria os seguintes recursos:
- Uma rede VPC personalizada e uma sub-rede privada para os nós do Kubernetes.
- Um Cloud Router para aceder à Internet através da tradução de endereços de rede (NAT).
- Um cluster do GKE privado na região
us-central1
com a escala automática ativada (um a dois nós por zona). - Um
ServiceAccount
com autorizações de registo e monitorização para o cluster. - Configuração do Google Cloud Managed Service for Prometheus para monitorização e alertas de clusters.
Estabeleça ligação ao cluster
Configure o kubectl
para obter credenciais e comunicar com o seu novo cluster do GKE:
gcloud container clusters get-credentials \
${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION}
Implemente a base de dados Weaviate no seu cluster
Para usar o gráfico Helm para implementar a base de dados Weaviate no seu cluster do GKE, siga estes passos:
Adicione o repositório do gráfico Helm da base de dados Weaviate antes de o poder implementar no seu cluster do GKE:
helm repo add weaviate https://weaviate.github.io/weaviate-helm
Crie o espaço de nomes
weaviate
para a base de dados:kubectl create ns weaviate
Crie um segredo para armazenar a chave da API:
kubectl create secret generic apikeys --from-literal=AUTHENTICATION_APIKEY_ALLOWED_KEYS=$(openssl rand -base64 32) -n weaviate
Implemente um balanceador de carga interno para aceder ao Weaviate a partir da rede virtual:
kubectl apply -n weaviate -f manifests/05-ilb/ilb.yaml
O manifesto
ilb.yaml
descreve o serviço de balanceador de carga:Aplique o manifesto para implementar o cluster do Weaviate:
helm upgrade --install "weaviate" weaviate/weaviate \ --namespace "weaviate" \ --values ./manifests/01-basic-cluster/weaviate_cluster.yaml
O manifesto
weaviate_cluster.yaml
descreve a implementação. Uma implementação é um objeto da API Kubernetes que lhe permite executar várias réplicas de pods distribuídos entre os nós num cluster.Aguarde alguns minutos para que o cluster do Weaviate seja iniciado totalmente.
Verifique o estado da implementação:
kubectl get weaviate -n weaviate --watch
O resultado é semelhante ao seguinte, se a base de dados
weaviate
for implementada com êxito:NAME: weaviate LAST DEPLOYED: Tue Jun 18 13:15:53 2024 NAMESPACE: weaviate STATUS: deployed REVISION: 1 TEST SUITE: None
Aguarde que o Kubernetes inicie os recursos:
kubectl wait pods -l app.kubernetes.io/name=weaviate --for condition=Ready --timeout=300s -n weaviate
Execute consultas com o bloco de notas do Vertex AI Colab Enterprise
Esta secção explica como estabelecer ligação à sua base de dados Weaviate através do Colab Enterprise.
Pode usar um modelo de tempo de execução dedicado para implementar no weaviate-vpc
, para que o bloco de notas possa comunicar com os recursos no cluster do GKE.
Para mais informações sobre o Vertex AI Colab Enterprise, consulte a documentação do Colab Enterprise.
Crie um modelo de tempo de execução
Para criar um modelo de tempo de execução do Colab Enterprise:
Na Google Cloud consola, aceda à página Modelos de tempo de execução do Colab Enterprise e certifique-se de que o seu projeto está selecionado:
Clique em add_box Novo modelo. É apresentada a página Criar novo modelo de tempo de execução.
Na secção Noções básicas do ambiente de execução:
- No campo Nome a apresentar, introduza
weaviate-connect
. - Na lista pendente Região, selecione
us-central1
. É a mesma região que o seu cluster do GKE.
- No campo Nome a apresentar, introduza
Na secção Configurar computação:
- Na lista pendente Tipo de máquina, selecione
e2-standard-2
. - No campo Tamanho do disco, introduza
30
.
- Na lista pendente Tipo de máquina, selecione
Na secção Redes e segurança:
- Na lista pendente Rede, selecione a rede onde o seu cluster do GKE reside.
- Na lista pendente Sub-rede, selecione uma sub-rede correspondente.
- Desmarque a caixa de verificação Ativar acesso público à Internet.
Para concluir a criação do modelo de tempo de execução, clique em Criar. O modelo de tempo de execução aparece na lista no separador Modelos de tempo de execução.
Crie um tempo de execução
Para criar um tempo de execução do Colab Enterprise:
Na lista de modelos de tempo de execução do modelo que acabou de criar, na coluna Ações, clique em more_vert e, de seguida, clique em Criar tempo de execução. É apresentado o painel Criar tempo de execução do Vertex AI.
Para criar um tempo de execução com base no seu modelo, clique em Criar.
No separador Tempos de execução que é aberto, aguarde até que o estado passe a Em bom estado.
Importe o bloco de notas
Para importar o bloco de notas no Colab Enterprise:
Aceda ao separador Os meus blocos de notas e clique em Importar. É apresentado o painel Importar blocos de notas.
Em Origem da importação, selecione URL.
Em URLs do bloco de notas, introduza o seguinte link:
https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/databases/weaviate/manifests/02-notebook/vector-database.ipynb
Clique em Importar.
Ligue-se ao tempo de execução e execute consultas
Para associar ao tempo de execução e executar consultas:
No bloco de notas, junto ao botão Associar, clique em arrow_drop_down Opções de associação adicionais. É apresentado o painel Ligar ao tempo de execução do Vertex AI.
Selecione Ligar a um tempo de execução e, de seguida, selecione Ligar a um tempo de execução existente.
Selecione o tempo de execução que iniciou e clique em Associar.
Para executar as células do bloco de notas, clique no botão
Executar célula junto a cada célula de código.
O bloco de notas contém células de código e texto que descrevem cada bloqueio de código. A execução de uma célula de código executa os respetivos comandos e apresenta um resultado. Pode executar as células por ordem ou executar células individuais conforme necessário.
Veja as métricas do Prometheus para o seu cluster
O cluster do GKE está configurado com o Google Cloud Managed Service for Prometheus, que permite a recolha de métricas no formato Prometheus. Este serviço oferece uma solução totalmente gerida para monitorização e alertas, permitindo a recolha, o armazenamento e a análise de métricas do cluster e das respetivas aplicações.
O diagrama seguinte mostra como o Prometheus recolhe métricas para o seu cluster:
O cluster privado do GKE no diagrama contém os seguintes componentes:
- Pods do Weaviate que expõem métricas no caminho
/metrics
e na porta2112
. - Coletores baseados no Prometheus que processam as métricas dos pods do Weaviate.
- Um recurso PodMonitoring que envia as métricas para o Cloud Monitoring.
Para exportar e ver as métricas, siga estes passos:
Crie o recurso
PodMonitoring
para extrair métricas porlabelSelector
:kubectl apply -n weaviate -f manifests/03-prometheus-metrics/pod-monitoring.yaml
O manifesto
pod-monitoring.yaml
descreve o recursoPodMonitoring
:Para importar um painel de controlo do Cloud Monitoring personalizado com as configurações definidas em
dashboard.json
:gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.json
Depois de o comando ser executado com êxito, aceda a Cloud Monitoring Painéis de controlo:
Na lista de painéis de controlo, abra o painel de controlo
Weaviate Overview
. Pode demorar algum tempo a recolher e apresentar métricas. O painel de controlo mostra a quantidade de fragmentos, vetores e latência das operações