Ejecutar Milvus en Kubernetes con Helm

Esta página explica cómo iniciar una instancia de Milvus en Kubernetes utilizando los gráficos Helm de Milvus.

Descripción general

Helm utiliza un formato de empaquetado denominado «charts». Un chart es un conjunto de archivos que describen un conjunto relacionado de recursos de Kubernetes. Milvus proporciona un conjunto de charts para ayudarte a implementar las dependencias y los componentes de Milvus.

Requisitos previos

  • Instala la CLI de Helm.

  • Crea un clúster de K8s.

  • Instala una StorageClass. Puedes comprobar la StorageClass instalada de la siguiente manera.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Comprueba los requisitos de hardware y software antes de la instalación.

  • Antes de instalar Milvus, se recomienda utilizar la herramienta Milvus Sizing Tool para calcular los requisitos de hardware en función del tamaño de tus datos. Esto ayuda a garantizar un rendimiento óptimo y una asignación adecuada de recursos para tu instalación de Milvus.

Si tienes algún problema al descargar la imagen, ponte en contacto con nosotros en community@zilliz.com con los detalles del problema y te proporcionaremos la asistencia necesaria.

Instalar el Helm Chart de Milvus

Antes de instalar los Helm Charts de Milvus, debe añadir el repositorio Helm de Milvus.

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

El repositorio de gráficos Helm de Milvus en https://github.com/milvus-io/milvus-helm ha sido archivado. Ahora utilizamos el nuevo repositorio en https://github.com/zilliztech/milvus-helm. El repositorio archivado sigue estando disponible para gráficos hasta la versión 4.0.31, pero utilice el nuevo repositorio para versiones posteriores.

A continuación, descarga los charts de Milvus del repositorio de la siguiente manera:

$ helm repo update

Siempre puedes ejecutar este comando para descargar los gráficos Helm de Milvus más recientes.

Instalación en línea

1. Implementar un clúster de Milvus

Una vez instalado el gráfico de Helm, puede iniciar Milvus en Kubernetes. Esta sección le guía a través del proceso de implementación de un clúster de Milvus.

¿Necesitas una implementación independiente?

Si prefieres implementar Milvus en modo autónomo (un solo nodo) para desarrollo o pruebas, utiliza este comando:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.2 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

Nota: El modo autónomo utiliza Woodpecker como cola de mensajes predeterminada y habilita el componente Streaming Node. Las implementaciones autónomas ejecutan Woodpecker integrado en el pod de Milvus; el servicio dedicado de Woodpecker (pods separados) se utiliza únicamente para implementaciones distribuidas o en clúster. Para obtener más detalles, consulta la Descripción general de la arquitectura y Woodpecker.

Implementar un clúster de Milvus:

Para el modo de servicio de Woodpecker, recomendamos utilizar la próxima versión de Milvus 3.0.1 o una posterior, junto con Woodpecker v0.1.37 o posterior, para beneficiarse de las optimizaciones de limpieza por compactación y de confirmación en grupo.

El siguiente comando implementa un clúster de Milvus con una configuración optimizada para la versión 3.0.2, utilizando Woodpecker como cola de mensajes recomendada:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v3.0.2 \
  --set woodpecker.enabled=true \
  --set woodpecker.image.tag=v0.1.37 \
  --set streaming.enabled=true \
  --set streaming.woodpecker.embedded=false \
  --set indexNode.enabled=false

Qué hace este comando:

  • Utiliza Woodpecker como cola de mensajes (recomendado para reducir el mantenimiento)
  • Ejecuta Woodpecker como un servicio dedicado (un StatefulSet independiente), no integrado en el nodo de streaming
  • Habilita el nuevo componente «Streaming Node » para mejorar el rendimiento
  • Desactiva el nodo de índice heredado (ahora el nodo de datos se encarga de esta funcionalidad)

Cambios en la arquitectura de Milvus 2.6.x:

  • Cola de mensajes: ahora se recomienda Woodpecker (reduce el mantenimiento de la infraestructura en comparación con Pulsar)
  • Nuevo componente: se introduce el nodo de streaming, que viene habilitado por defecto
  • Componentes fusionados: el nodo de índice y el nodo de datos se combinan en un único nodo de datos

Para obtener información detallada sobre la arquitectura, consulta la Descripción general de la arquitectura.

Colas de mensajes alternativas: para realizar la implementación con Pulsar, Kafka o RocksMQ en lugar de Woodpecker, consulta «Dependencias opcionales».

Próximos pasos: El comando anterior implementa Milvus con las configuraciones recomendadas. Para uso en producción:

Notas importantes:

  • Denominación de la versión: utiliza únicamente letras, números y guiones (no se permiten puntos)

Para obtener más información, consulta el gráfico Helm de Milvus y la documentación de Helm.

2. Comprueba el estado del clúster de Milvus

Comprueba que la implementación se ha realizado correctamente verificando el estado de los pods:

kubectl get pods

Espera a que todos los pods muestren el estado «Running». Con la configuración v3.0.2, deberías ver pods similares a estos:

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-streamingnode-7b8cfc769c-mqmsm  1/1    Running   0        3m24s
my-release-milvus-woodpecker-0                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-1                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-2                   1/1    Running   0        3m24s
my-release-milvus-woodpecker-3                   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

Componentes clave que hay que verificar:

  • Componentes de Milvus: mixcoord, datanode, querynode, proxy, streamingnode
  • Dependencias: etcd (metadatos), minio (almacenamiento de objetos), woodpecker (cola de mensajes)

Con streaming.woodpecker.embedded=false, Woodpecker se ejecuta como un StatefulSet dedicado (my-release-milvus-woodpecker, 4 réplicas por defecto —un quórum de 3 nodos más uno de reserva para la tolerancia a fallos; no establezcas woodpecker.replicaCount por debajo de 3) respaldado por un servicio sin interfaz gráfica, que utiliza MinIO como backend de almacenamiento; por lo tanto, el clúster cuenta con un conjunto de pods woodpecker independiente, distinto del nodo de streaming.

También puedes acceder a la interfaz web de Milvus en http://127.0.0.1:9091/webui/ una vez configurado el reenvío de puertos (véase el siguiente paso). Para más detalles, consulta la interfaz web de Milvus.

3. Conectarse a Milvus

Para conectarte a tu clúster de Milvus desde fuera de Kubernetes, debes configurar el reenvío de puertos.

Configurar el reenvío de puertos:

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

Este comando reenvía el puerto local 27017 al puerto de Milvus 19530. Deberías ver:

Forwarding from 127.0.0.1:27017 -> 19530

Detalles de la conexión:

  • Conexión local: localhost:27017
  • Puerto predeterminado de Milvus: 19530

Opciones para el reenvío de puertos:

  • Asignar puerto local automáticamente: utiliza :19530 en lugar de 27017:19530 para que kubectl elija un puerto disponible
  • Escuchar en todas las interfaces: Añade --address 0.0.0.0 para permitir conexiones desde otros equipos:
    kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
    
  • Implementación independiente: Si utilizas el modo independiente, el nombre del servicio sigue siendo el mismo

Mantén este terminal abierto mientras utilizas Milvus. Ahora puedes conectarte a Milvus utilizando cualquier SDK de Milvus en localhost:27017.

(Opcional) Actualizar las configuraciones de Milvus

Puede actualizar las configuraciones de su clúster de Milvus editando el archivo values.yaml y aplicándolo de nuevo.

  1. Crea un archivo « values.yaml » con las configuraciones deseadas.

    A continuación se da por supuesto que desea habilitar proxy.http.

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

    Para conocer los elementos de configuración aplicables, consulta «Configuración del sistema».

  2. Aplica el archivo ` values.yaml `.

helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
  1. Compruebe las configuraciones actualizadas.

    helm get values my-release
    

    La salida debería mostrar las configuraciones actualizadas.

Acceder a la interfaz web de Milvus

Milvus incluye una herramienta GUI integrada llamada Milvus WebUI a la que puede acceder a través de su navegador. Milvus WebUI mejora la observabilidad del sistema con una interfaz sencilla e intuitiva. Puede utilizar Milvus WebUI para observar las estadísticas y métricas de los componentes y dependencias de Milvus, comprobar los detalles de la base de datos y la recopilación de datos, y ver una lista detallada de las configuraciones de Milvus. Para obtener más información sobre Milvus WebUI, consulta Milvus WebUI

Para habilitar el acceso a la interfaz web de Milvus, es necesario redirigir el puerto del pod del proxy a un puerto local.

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

Ahora ya puede acceder a la interfaz de usuario web de Milvus en http://localhost:27018.

Instalación sin conexión

Si se encuentra en un entorno con restricciones de red, siga el procedimiento descrito en esta sección para iniciar un clúster de Milvus.

1. Obtener el manifiesto de Milvus

Ejecuta el siguiente comando para obtener el manifiesto de Milvus.

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

El comando anterior genera plantillas de gráficos para un clúster de Milvus y guarda el resultado en un archivo de manifiesto denominado « milvus_manifest.yaml ». Con este manifiesto, puedes instalar un clúster de Milvus con sus componentes y dependencias en pods independientes.

  • Para instalar una instancia de Milvus en modo autónomo, en el que todos los componentes de Milvus se encuentran dentro de un único pod, debe ejecutar « helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false --set standalone.messageQueue=woodpecker --set woodpecker.enabled=true --set streaming.enabled=true zilliztech/milvus > milvus_manifest.yaml » para generar las plantillas de gráficos de una instancia de Milvus en modo autónomo.
  • Para modificar las configuraciones de Milvus, descarga la value.yaml plantilla, introduce en ella los ajustes que desees y utiliza helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml para generar el manifiesto en consecuencia.

2. Descargar el script de descarga de imágenes

El script de descarga de imágenes está escrito en Python. Debe descargar el script junto con sus dependencias en el archivo 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. Descargar y guardar las imágenes

Ejecuta el siguiente comando para descargar y guardar las imágenes necesarias.

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

Las imágenes se descargan en una subcarpeta llamada « images » dentro del directorio actual.

4. Cargar las imágenes

Ahora puedes cargar las imágenes en los hosts del entorno con acceso restringido de la red de la siguiente manera:

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

5. Implementar Milvus

$ kubectl apply -f milvus_manifest.yaml

Hasta ahora, puede seguir los pasos 2 y 3 de la instalación en línea para comprobar el estado del clúster y reenviar un puerto local a Milvus.

Actualizar el clúster de Milvus en ejecución

Ejecuta el siguiente comando para actualizar tu clúster de Milvus en ejecución a la última versión:

$ helm repo update
$ helm upgrade my-release zilliztech/milvus --reset-then-reuse-values

Desinstalar Milvus

Ejecuta el siguiente comando para desinstalar Milvus.

$ helm uninstall my-release

Dependencias opcionales

Esta implementación utiliza Woodpecker como cola de mensajes, etcd para los metadatos y MinIO para el almacenamiento de objetos. Para utilizar una cola de mensajes diferente o conectar un almacenamiento de objetos o metadatos externo, consulta:

El almacenamiento V3 está desactivado por defecto. Actívalo antes de utilizar las funciones que dependen de él. Para conocer los requisitos y las consideraciones de compatibilidad, consulta Almacenamiento V3.

Próximos pasos

Una vez instalado Milvus en Docker, puedes: