milvus-logo
LFAI
Home
  • Começar a trabalhar

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 completa de serviços Milvus 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 suporte 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 do K8s de forma declarativa e gerir a pilha de implementação do Milvus para garantir a sua escalabilidade e alta disponibilidade.

1. Instalar o cert-manager

O Milvus Operator utiliza o cert-manager para fornecer um certificado para o servidor webhook.

Execute o seguinte comando para instalar o cert-manager.

$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml

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

customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
namespace/cert-manager created
serviceaccount/cert-manager-cainjector created
...
service/cert-manager created
service/cert-manager-webhook created
deployment.apps/cert-manager-cainjector created
deployment.apps/cert-manager created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created

Pode verificar se os pods do cert-manager estão a ser executados da seguinte forma:

$ kubectl get pods -n cert-manager

NAME                                      READY   STATUS    RESTARTS   AGE
cert-manager-848f547974-gccz8             1/1     Running   0          70s
cert-manager-cainjector-54f4cc6b5-dpj84   1/1     Running   0          70s
cert-manager-webhook-7c9588c76-tqncn      1/1     Running   0          70s

2. Instalar o Milvus Operator

Você pode instalar o Milvus Operator de uma das seguintes maneiras:

Instalar com o Helm

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.0.1/milvus-operator-1.0.1.tgz

Verá uma saída semelhante à 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

Instalar com o kubectl

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

Você verá uma saída semelhante à seguinte após o término 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
certificate.cert-manager.io/milvus-operator-serving-cert created
issuer.cert-manager.io/milvus-operator-selfsigned-issuer created
mutatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-mutating-webhook-configuration created
validatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-validating-webhook-configuration created

Você pode verificar se o pod do Milvus Operator está em execução 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_default.yaml

O comando acima implanta um cluster do Milvus com seus componentes e dependências em pods separados usando configurações padrão. Para personalizar estas definições, recomendamos que utilize a Milvus Sizing Tool para ajustar as configurações com base no tamanho real dos dados e, em seguida, transfira 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: "2021-11-02T05:59:41Z"
    reason: StorageReady
    status: "True"
    type: StorageReady
  - lastTransitionTime: "2021-11-02T06:06:23Z"
    message: Pulsar is ready
    reason: PulsarReady
    status: "True"
    type: PulsarReady
  - lastTransitionTime: "2021-11-02T05:59:41Z"
    message: Etcd endpoints is healthy
    reason: EtcdReady
    status: "True"
    type: EtcdReady
  - lastTransitionTime: "2021-11-02T06:12:36Z"
    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          14m
my-release-etcd-1                               1/1     Running     0          14m
my-release-etcd-2                               1/1     Running     0          14m
my-release-milvus-datanode-5c686bd65-wxtmf      1/1     Running     0          6m
my-release-milvus-indexnode-5b9787b54-xclbx     1/1     Running     0          6m
my-release-milvus-proxy-84f67cdb7f-pg6wf        1/1     Running     0          6m
my-release-milvus-querynode-5bcb59f6-nhqqw      1/1     Running     0          6m
my-release-milvus-mixcoord-fdcccfc84-9964g      1/1     Running     0          6m
my-release-minio-0                              1/1     Running     0          14m
my-release-minio-1                              1/1     Running     0          14m
my-release-minio-2                              1/1     Running     0          14m
my-release-minio-3                              1/1     Running     0          14m
my-release-pulsar-bookie-0                      1/1     Running     0          14m
my-release-pulsar-bookie-1                      1/1     Running     0          14m
my-release-pulsar-bookie-init-h6tfz             0/1     Completed   0          14m
my-release-pulsar-broker-0                      1/1     Running     0          14m
my-release-pulsar-broker-1                      1/1     Running     0          14m
my-release-pulsar-proxy-0                       1/1     Running     0          14m
my-release-pulsar-proxy-1                       1/1     Running     0          14m
my-release-pulsar-pulsar-init-d2t56             0/1     Completed   0          14m
my-release-pulsar-recovery-0                    1/1     Running     0          14m
my-release-pulsar-toolset-0                     1/1     Running     0          14m
my-release-pulsar-zookeeper-0                   1/1     Running     0          14m
my-release-pulsar-zookeeper-1                   1/1     Running     0          13m
my-release-pulsar-zookeeper-2                   1/1     Running     0          13m

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 encaminhamento de porta 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

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 nuvens virtuais privadas (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.0.1/deploy/manifests/deployment.yaml

O que vem a seguir

Tendo instalado o Milvus no Docker, você pode:

Traduzido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?