Executar o Milvus no Kubernetes com o Milvus Operator

Esta página ilustra como iniciar uma instância do Milvus no Kubernetes usando o Milvus Operator.

Visão geral

O Milvus Operator é uma solução que ajuda a implantar e gerenciar uma pilha de serviços Milvus completa para atingir os clusters Kubernetes (K8s). A pilha inclui todos os componentes do Milvus e dependências relevantes, como etcd, Pulsar e MinIO.

Pré-requisitos

  • Criar um cluster K8s.

  • Instalar um StorageClass. É possível 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 
    
  • Verificar 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 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 apoio necessário.

Instalar o Milvus Operator

O Milvus Operator define recursos personalizados de um cluster Milvus em cima dos Recursos Personalizados do Kubernetes. Quando os recursos personalizados são definidos, pode utilizar as APIs K8s de uma forma declarativa e gerir a pilha de implementação do Milvus para garantir a sua escalabilidade e alta disponibilidade.

Execute o seguinte comando para instalar o Milvus Operator com o Helm.

$ helm install milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

Verá um resultado semelhante ao seguinte após a conclusão do processo de instalação.

NAME: milvus-operator
LAST DEPLOYED: Thu Jul  7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD

Se já tiver instalado o Milvus Operator anteriormente, actualize-o utilizando o seguinte comando:

helm upgrade milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

Execute o seguinte comando para instalar o Milvus Operator com kubectl.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml

Verá um resultado semelhante ao seguinte após a conclusão do processo de instalação.

namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created

Pode verificar se o pod do Milvus Operator está a ser executado da seguinte forma:

$ kubectl get pods -n milvus-operator

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-5fd77b87dc-msrk4   1/1     Running   0          46s

Implantar o Milvus

1. Implantar um cluster do Milvus

Depois que o pod do Milvus Operator estiver em execução, você poderá implantar um cluster do Milvus da seguinte maneira.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

O comando acima implementa um cluster Milvus com o Woodpecker como fila de mensagens (recomendado para a versão 2.6.16) e todos os novos componentes de arquitetura, incluindo o nó de fluxo contínuo.

Destaques da arquitetura nesta implementação:

  • Fila de mensagens: Usa o Woodpecker (reduz a manutenção da infraestrutura)
  • Nó de streaming: Habilitado para processamento de dados aprimorado
  • Coordenador Mix: Componentes consolidados do coordenador para maior eficiência

Para personalizar estas definições, recomendamos a utilização da Milvus Sizing Tool para ajustar as configurações com base no tamanho real dos dados e, em seguida, descarregar o ficheiro YAML correspondente. Para saber mais sobre os parâmetros de configuração, consulte a Lista de verificação das configurações do sistema Milvus.

  • O nome da versão deve conter apenas letras, números e traços. Os pontos não são permitidos no nome da versão.
  • Também é possível implantar uma instância do Milvus no modo autônomo, em que todos os seus componentes estão contidos em um único pod. Para o fazer, altere o URL do ficheiro de configuração no comando acima para https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. Verificar o estado do cluster do Milvus

Execute o seguinte comando para verificar o estado do cluster Milvus

$ kubectl get milvus my-release -o yaml

Quando o cluster do Milvus estiver pronto, a saída do comando acima deverá ser semelhante à seguinte. Se o campo status.status permanecer Unhealthy, o seu cluster Milvus ainda está a ser criado.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
  conditions:
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    reason: StorageReady
    status: "True"
    type: StorageReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Pulsar is ready
    reason: PulsarReady
    status: "True"
    type: PulsarReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Etcd endpoints is healthy
    reason: EtcdReady
    status: "True"
    type: EtcdReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: All Milvus components are healthy
    reason: MilvusClusterHealthy
    status: "True"
    type: MilvusReady
  endpoint: my-release-milvus.default:19530
  status: Healthy

O Milvus Operator cria as dependências do Milvus, como etcd, Pulsar e MinIO, e depois os componentes do Milvus, como proxy, coordenadores e nós.

Quando o cluster do Milvus estiver pronto, o status de todos os pods no cluster do Milvus deverá ser semelhante ao seguinte.

$ kubectl get pods

NAME                                             READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                1/1     Running   0          2m36s
my-release-etcd-1                                1/1     Running   0          2m36s
my-release-etcd-2                                1/1     Running   0          2m36s
my-release-milvus-datanode-58955c65b9-j4j7s      1/1     Running   0          92s
my-release-milvus-mixcoord-686f84968f-jcv5d      1/1     Running   0          92s
my-release-milvus-proxy-646f48fc7c-4lctb         1/1     Running   0          92s
my-release-milvus-querynode-0-d89d7677b-x7j7q    1/1     Running   0          91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1     Running   0          92s
my-release-minio-0                               1/1     Running   0          2m36s
my-release-minio-1                               1/1     Running   0          2m36s
my-release-minio-2                               1/1     Running   0          2m35s
my-release-minio-3                               1/1     Running   0          2m35s

3. Encaminhar uma porta local para o Milvus

Execute o seguinte comando para obter a porta na qual o seu cluster Milvus serve.

$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

A saída mostra que a instância do Milvus serve na porta padrão 19530.

Se você implantou o Milvus no modo autônomo, altere o nome do pod de my-release-milvus-proxy-xxxxxxxxxx-xxxxx para my-release-milvus-xxxxxxxxxx-xxxxx.

Em seguida, execute o seguinte comando para encaminhar uma porta local para a porta em que o Milvus serve.

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

Opcionalmente, pode utilizar :19530 em vez de 27017:19530 no comando acima para permitir que kubectl atribua uma porta local para si, para que não tenha de gerir conflitos de portas.

Por predefinição, o encaminhamento de portas do kubectl apenas escuta em localhost. Use a flag address se quiser que o Milvus escute nos endereços IP selecionados ou em todos. O comando a seguir faz com que o port-forward escute em todos os endereços IP na máquina host.

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

Agora, você pode conectar-se ao Milvus usando a porta encaminhada.

(Opcional) Atualizar as configurações do Milvus

Você pode visualizar e atualizar as configurações do seu cluster Milvus chamando o comando patch da seguinte forma:

  1. Execute o seguinte comando para visualizar as possíveis configurações.

    O comando a seguir assume que você deseja atualizar o parâmetro spec.components.disableMetric para false ms.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' \
      --dry-run=client -o yaml
    

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

  2. Actualize as configurações.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' 
    

Acessar a WebUI do Milvus

O Milvus é fornecido com uma ferramenta GUI incorporada, denominada 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 permitir o acesso à Milvus Web UI, é necessário encaminhar o 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 à Milvus Web UI em http://localhost:27018.

Desinstalar o Milvus

Execute o seguinte comando para desinstalar o cluster do Milvus.

$ kubectl delete milvus my-release
  • Quando você exclui o cluster do Milvus usando a configuração padrão, dependências como etcd, Pulsar e MinIO não são excluídas. Portanto, da próxima vez que instalar a mesma instância do cluster Milvus, essas dependências serão usadas novamente.
  • Para eliminar as dependências e as reivindicações de volume persistente (PVCs) juntamente com o cluster Milvus, consulte o ficheiro de configuração.

Desinstalar o Milvus Operator

Há também duas maneiras de desinstalar o Milvus Operator.

Desinstalar com Helm

$ helm -n milvus-operator uninstall milvus-operator

Desinstalar com kubectl

$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.0/deploy/manifests/deployment.yaml

O que vem a seguir

Tendo instalado o Milvus no Docker, você pode: