46.6kЗаказать демоВойтиНачать бесплатно

Настройка Milvus на Amazon EKS

Jul 16, 202415 min read

Milvus изначально разработан для поддержки Kubernetes и может быть легко развернут в AWS. Чтобы создать надежный, эластичный кластер векторной базы данных Milvus, мы можем использовать Amazon Elastic Kubernetes Service (Amazon EKS) в качестве управляемого Kubernetes, Amazon S3 в качестве Object Storage, Amazon Managed Streaming for Apache Kafka (Amazon MSK) в качестве Message Storage и Amazon Elastic Load Balancing (Amazon ELB) в качестве Load Balancer.

Обзор архитектуры Milvus Обзор архитектуры Milvus

Архитектура Milvus

EKS — это управляемый сервис Kubernetes от Amazon, который работает на EC2 или в serverless-режиме на Fargate. Он идеально подходит для организаций, уже использующих Kubernetes on-premises, позволяя им переносить свои развертывания в AWS с минимальными изменениями.

В этом блоге для развертывания используется EC2, поскольку Fargate не может обрабатывать persistent volume claims (PVCs), необходимые для зависимостей Milvus, таких как etcd.

Мы предоставим пошаговое руководство по развертыванию кластера Milvus с использованием EKS и других сервисов. Более подробная версия этого блога доступна здесь.

Предварительные требования

AWS CLI

Установите AWS CLI на ваш локальный PC/Mac или экземпляр Amazon EC2, который будет служить вашей конечной точкой для операций, описанных в этом документе. Если вы используете Amazon Linux 2 или Amazon Linux 2023, инструменты AWS CLI установлены по умолчанию. См. Как установить AWS CLI.

Ниже приведен снимок экрана, подтверждающий, что AWS CLI установлен.

% which aws
/usr/local/bin/aws

% aws --version
aws-cli/2.15.34 Python/3.11.8 Darwin/23.5.0 exe/x86_64 prompt/off

Инструменты EKS: Kubectl, eksctl, helm

Установите инструменты EKS на предпочитаемое endpoint-устройство, включая:

См. Начало работы с EKS для подробных шагов установки. Ниже приведен снимок экрана, подтверждающий установки и версии на ноутбуке Mac M2 с использованием z shell:

% kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

# Download eksctl
ARCH=arm64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin

% eksctl version
0.185.0

% helm list --all-namespaces
NAME        NAMESPACE   REVISION    UPDATED                                 STATUS      CHART           APP VERSION
my-milvus   default     1           2024-07-09 16:00:14.117945 -0700 PDT    deployed    milvus-4.1.34   2.4.5

Создайте Amazon S3 Bucket

Ознакомьтесь с правилами именования Bucket и соблюдайте их при именовании вашего AWS S3 bucket с помощью AWS console.

Создать Amazon S3 Bucket Создать Amazon S3 Bucket

Создайте KMS, Customer managed key.

Ключ KMS не может быть AWS-managed key. Это должен быть Customer-managed key. После его создания вам нужно будет подождать около 10 минут, пока ключ станет активным, прежде чем вы сможете использовать его в AWS Secrets Manager. Используя AWS console, перейдите в KMS > Customer managed keys.

Создайте KMS, Customer managed key.  .png Создайте KMS, Customer managed key. .png

Создайте пользовательский секрет в AWS Secrets Manager.

Убедитесь, что вы подождали около 10 минут после создания вашего KMS Customer managed key. Теперь создайте новый секрет AWS Secrets Manager. Используя AWS console.

  1. Выберите другой тип секрета для типа секрета.

  2. Переключите редактор пар ключ/значение в режим Plaintext. Введите JSON с ключами, точно соответствующими “username” и “password”.

  3. Имя секрета должно начинаться с AmazonMSK_.

  4. Ключ шифрования должен быть клиентским ключом KMS, а не ключом, управляемым AWS.

Create a custom secret in the AWS Secrets Manager.  .png Create a custom secret in the AWS Secrets Manager. .png

Создайте экземпляр MSK

Далее используйте консоль AWS, чтобы создать кластер Amazon MSK с включенной функцией Kafka autoCreateTopics и безопасностью SASL/SCRAM.

Рекомендации при создании MSK:

Последняя стабильная версия Milvus (v2.4.x) зависит от функции Kafka autoCreateTopics, поэтому при создании MSK необходимо использовать пользовательскую конфигурацию, а также изменить свойство auto.create.topics.enable со значения по умолчанию false на true.

Кроме того, чтобы увеличить пропускную способность сообщений MSK, рекомендуется увеличить значения message.max.bytes и replica.fetch.max.bytes.

auto.create.topics.enable=true

message.max.bytes=10485880

replica.fetch.max.bytes=20971760

Подробности см. в разделе Пользовательские конфигурации MSK.

Create a MSK Instance.png Create a MSK Instance.png

  • Milvus не поддерживает аутентификацию MSK на основе IAM role, поэтому при создании MSK включите параметр аутентификации SASL/SCRAM в конфигурации безопасности и настройте имя пользователя и пароль в AWS Secrets Manager. Подробности см. в разделе Аутентификация учетными данными для входа с помощью AWS Secrets Manager.

  • Security group для MSK должна разрешать доступ из security group или диапазона IP-адресов кластера EKS.

security settings security settings

Подождите ~15 минут, пока экземпляр MSK будет подготовлен. Когда он будет готов, нажмите на него, и вы сможете связать пользовательский секрет AWS Secrets Manager, созданный ранее.

AWS Secrets Manager AWS Secrets Manager

Создайте кластер Amazon EKS

Существует много способов создать кластер EKS, например через консоль, CloudFormation или eksctl. Обратитесь к документу Настройка для использования Amazon EKS.

В этой публикации будет использоваться eksctl. eksctl — это простой инструмент командной строки для создания кластеров Kubernetes в Amazon EKS и управления ими. eksctl предоставляет самый быстрый и простой способ создать новый кластер с узлами для Amazon EKS. Для получения дополнительной информации обратитесь к официальной документации eksctl.

Шаг 1: Создайте файл eks_cluster.yaml.

Пример файла .yaml см. в документации Milvus.

  1. Замените имя кластера на имя вашего кластера,

  2. Замените region-code на регион AWS, в котором вы хотите создать кластер.

  3. Замените private-subnet-idx на ваши частные подсети. Примечание: Этот файл конфигурации создает кластер EKS в существующей VPC, указывая частные подсети. Вы также можете удалить конфигурацию VPC и подсетей, чтобы eksctl автоматически создал новую VPC.

**Шаг 2: Выполните команду eksctl create cluster -f eks_cluster.yaml, чтобы создать кластер EKS. **

create cluster -f eks_cluster.yaml

Обратитесь к Amazon EKS Quickstart. Эта команда создаст следующие ресурсы:

  • Кластер EKS с указанной версией.

  • Managed node group с 3 экземплярами EC2 m6i.2xlarge.

  • Поставщик удостоверений IAM OIDC и ServiceAccount с именем aws-load-balancer-controller будут использованы позже при установке AWS Load Balancer Controller.

  • Пространство имен milvus и ServiceAccount milvus-s3-access-sa в этом пространстве имен. Это будет использоваться позже при настройке S3 в качестве объектного хранилища для Milvus.

  • Примечание: Для простоты milvus-s3-access-sa предоставляются полные разрешения доступа к S3. В производственных развертываниях рекомендуется следовать принципу минимальных привилегий и предоставлять доступ только к конкретному бакету S3, используемому для Milvus.

  • Несколько add-on, где vpc-cni, coredns, kube-proxy являются основными add-on, необходимыми для EKS. aws-ebs-csi-driver — это драйвер AWS EBS CSI, который позволяет кластерам EKS управлять жизненным циклом томов Amazon EBS.
% eksctl create cluster -f eks_cluster.yaml
2024-07-10 17:45:32 [ℹ]  eksctl version 0.185.0
2024-07-10 17:45:32 [ℹ]  using region us-west-2
2024-07-10 17:45:32 [✔]  using existing VPC (vpc-84c5b3fc) and 
…
2024-07-10 17:45:32 [ℹ]  building cluster stack "eksctl-MilvusEKSTest-cluster"
2024-07-10 17:45:33 [ℹ]  deploying stack
…

Дождитесь завершения создания кластера. После завершения вы должны увидеть ответ, похожий на следующий вывод:

% EKS cluster "MilvusEKSTest" in "us-west-2" region is ready

После создания кластера вы можете просмотреть узлы, выполнив:

% kubectl get nodes -A -o wide
NAME                                          STATUS   ROLES    AGE   VERSION               INTERNAL-IP     EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-172-31-22-240.us-west-2.compute.internal   Ready    <none>   11m   v1.28.8-eks-ae9a62a   172.31.22.240   52.40.226.172   Amazon Linux 2   5.10.219-208.866.amzn2.x86_64   containerd://1.7.11
ip-172-31-31-71.us-west-2.compute.internal    Ready    <none>   11m   v1.28.8-eks-ae9a62a   172.31.31.71    35.165.133.62   Amazon Linux 2   5.10.219-208.866.amzn2.x86_64   containerd://1.7.11
ip-172-31-33-44.us-west-2.compute.internal    Ready    <none>   11m   v1.28.8-eks-ae9a62a   172.31.33.44    35.91.5.162     Amazon Linux 2   5.10.219-208.866.amzn2.x86_64   containerd://1.7.11

Шаг 3: Создайте ebs-sc StorageClass, настроенный с GP3 в качестве типа хранилища, и сделайте его StorageClass по умолчанию.

Milvus использует etcd в качестве Meta Storage, и ему нужен этот StorageClass для создания и управления PVC.

  1. Выполните эту команду cat.
% cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
EOF
storageclass.storage.k8s.io/ebs-sc created
  1. После создания выполните команду patch, чтобы сделать этот StorageClass используемым по умолчанию.
% kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
storageclass.storage.k8s.io/gp2 patched
  1. Проверьте, что storage class был настроен правильно.
% kubectl get storageclass
NAME     PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
ebs-sc   ebs.csi.aws.com         Delete          WaitForFirstConsumer   false                  6m39s
gp2      kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  44m

Шаг 4: Установите AWS Load Balancer Controller

Это будет использоваться позже для Milvus Service и Attu Ingress. Обратитесь к официальным инструкциям EKS Load Balancer Controller.

Добавьте репозиторий eks-charts и обновите его.

% helm repo add eks https://aws.github.io/eks-charts
"eks" has been added to your repositories

% helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "zilliztech" chart repository
...Successfully got an update from the "milvus" chart repository
Update Complete. ⎈Happy Helming!⎈

Установите AWS Load Balancer Controller. Замените cluster-name именем вашего кластера. ServiceAccount с именем aws-load-balancer-controller уже был создан при создании кластера EKS.

% helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=MilvusEKSTest \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller
NAME: aws-load-balancer-controller
LAST DEPLOYED: Wed Jul 10 19:00:34 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!

Проверьте, был ли контроллер успешно установлен. Вывод должен выглядеть так:

% kubectl get deployment -n kube-system aws-load-balancer-controller
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           88s

Развертывание кластера Milvus в Amazon EKS

Milvus поддерживает несколько методов развертывания, таких как Operator и Helm. Использовать Operator проще, но Helm более прямолинеен и гибок. Поэтому для развертывания мы используем Helm.

Вы можете настраивать конфигурацию через значения при развертывании Milvus с файлом milvus_helm.yaml.

По умолчанию Milvus создает внутрикластерные minio и pulsar в качестве Object Storage и Message Storage соответственно. Мы внесем некоторые изменения в конфигурацию, чтобы сделать ее более подходящей для production.

Шаг 1: Добавьте репозиторий Milvus Helm и обновите его.

% helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
"milvus" already exists with the same configuration, skipping
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "eks" chart repository
...Successfully got an update from the "zilliztech" chart repository
...Successfully got an update from the "milvus" chart repository
Update Complete. ⎈Happy Helming!⎈

Шаг 2: Создайте файл milvus_cluster.yaml.

Следующий код настраивает установку Milvus, например конфигурирует Amazon S3 в качестве объектного хранилища, Amazon MSK в качестве очереди сообщений и т. д. Мы предоставим подробные объяснения и рекомендации по конфигурации после блока кода.

#####################################
# Section 1
# 
# Configure S3 as the Object Storage
#####################################

# Service account
# - this service account are used by External S3 access
serviceAccount:
  create: false
  name: milvus-s3-access-sa

# Close in-cluster minio
minio:
  enabled: false

# External S3
# - these configs are only used when `externalS3.enabled` is true
externalS3:
  enabled: true
  host: "s3.<region-code>.amazonaws.com"
  port: "443"
  useSSL: true
  bucketName: "<bucket-name>"
  rootPath: "<root-path>"
  useIAM: true
  cloudProvider: "aws"
  iamEndpoint: ""

#####################################
# Section 2
# 
# Configure MSK as the Message Storage
#####################################

# Close in-cluster pulsar
pulsar:
  enabled: false

# Внешний kafka
# - эти конфигурации используются только когда `externalKafka.enabled` имеет значение true
externalKafka:
  enabled: true
  brokerList: "<broker-list>"
  securityProtocol: SASL_SSL
  sasl:
    mechanisms: SCRAM-SHA-512
    username: "<username>"
    password: "<password>"
    
#####################################
# Раздел 3
# 
# Откройте сервис Milvus для доступа извне кластера (сервис LoadBalancer).
# или получите к нему доступ изнутри кластера (сервис ClusterIP). Задайте тип сервиса и порт для его обслуживания.
#####################################
service:
  type: LoadBalancer
  port: 19530
  annotations: 
    service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller обслуживает сервисы, у которых есть эта аннотация 
    service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #Пользовательское имя, заданное для AWS Network Load Balancer
    #service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal или internet-facing, позже позволяя публичный доступ через интернет
    service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing" #Размещает балансировщик нагрузки в публичных подсетях
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #IP-адреса Pod должны использоваться как целевые IP-адреса (а не IP-адреса узлов)

#####################################
# Раздел 4
# 
# Установка Attu — GUI для управления Milvus
#####################################
attu:
  enabled: true
  name: attu
  service:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-type: external
      service.beta.kubernetes.io/aws-load-balancer-name : milvus-attu-service 
      service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing" 
      service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip 
    labels: {}
    type: LoadBalancer
    port: 3000
  ingress:
    enabled: false
      
#####################################
# Раздел 5
# 
# HA-развертывание основных компонентов Milvus
#####################################
rootCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Включите active-standby, когда задаете несколько реплик для root coordinator
  resources: 
    limits:
      cpu: 1
      memory: 2Gi
indexCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Включите active-standby, когда задаете несколько реплик для index coordinator
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
queryCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Включите active-standby, когда задаете несколько реплик для query coordinator
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
dataCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Включите active-standby, когда задаете несколько реплик для data coordinator
  resources: 
    limits:
      cpu: "0.5"
      memory: 0.5Gi
proxy:
  replicas: 2
  resources: 
    limits:
      cpu: 1
      memory: 4Gi

#####################################
# Раздел 6
# 
# Распределение ресурсов Milvus
#####################################
queryNode:
  replicas: 1
  resources: 
    limits:
      cpu: 2
      memory: 8Gi
dataNode:
  replicas: 1
  resources: 
    limits:
      cpu: 1
      memory: 4Gi
indexNode:
  replicas: 1
  resources: 
    limits:
      cpu: 4
      memory: 8Gi

Код разделен на шесть разделов. Следуйте следующим инструкциям, чтобы изменить соответствующие конфигурации.

  • Раздел 1: Настройте S3 как хранилище объектов. serviceAccount предоставляет Milvus доступ к S3 (здесь это milvus-s3-access-sa, который уже был создан при создании кластера EKS).

    • Замените <region-code> на регион AWS, в котором вы создали кластер.

    • Замените <bucket-name> на имя бакета S3, а <root-path> — на префикс бакета S3 (может быть пустым).

  • Раздел 2: Настройте MSK как хранилище сообщений.

    • Замените <broker-list> на конечную точку MSK для типа аутентификации SASL/SCRAM, и — на имя пользователя и пароль MSK. Вы можете получить <broker-list> из информации о клиенте MSK, как показано на изображении.

view client information.jpg view client information.jpg

  • Раздел 3: Этот раздел открывает конечную точку сервиса Milvus для доступа извне кластера. По умолчанию конечная точка Milvus использует сервис типа ClusterIP, который доступен только внутри кластера EKS. При необходимости вы можете изменить его на тип LoadBalancer, чтобы разрешить доступ извне кластера EKS. Сервис типа LoadBalancer использует Amazon NLB в качестве балансировщика нагрузки.

    • Согласно лучшим практикам безопасности, aws-load-balancer-scheme здесь по умолчанию настроен в режиме internal, что означает, что разрешен только доступ к Milvus из интрасети. Если вам действительно нужен доступ к Milvus через Интернет, необходимо изменить internal на internet-facing. Нажмите, чтобы посмотреть инструкции по настройке NLB.

      • Измените строку на: aws-load-balancer-scheme: internet-facing
# service.beta.kubernetes.io/aws-load-balancer-scheme: internal 
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
  • Раздел 4: Установите и настройте Attu, инструмент администрирования Milvus с открытым исходным кодом. У него есть интуитивно понятный графический интерфейс, который позволяет легко взаимодействовать с базой данных. Мы включаем Attu, настраиваем ingress с использованием AWS ALB и задаем для него тип internet-facing, чтобы к Attu можно было получить доступ через Интернет.

    • Нажмите здесь, чтобы открыть руководство по настройке ALB.
  • Раздел 5: Включите HA-развертывание основных компонентов Milvus. Согласно архитектуре, мы уже знаем, что Milvus содержит несколько независимых и слабо связанных компонентов. Например, служба координатора выступает в качестве уровня управления, выполняя координацию для компонентов Root, Query, Data и Index. Proxy на уровне доступа служит конечной точкой доступа к базе данных. По умолчанию эти компоненты имеют только 1 реплику pod. Для повышения доступности Milvus особенно важно развернуть несколько реплик этих сервисных компонентов.

    • Обратите внимание, что компоненты координаторов Root, Query, Data и Index должны быть развернуты в нескольких репликах с включенной опцией activeStandby.
  • Раздел 6: Настройте распределение ресурсов для компонентов Milvus в соответствии с требованиями ваших рабочих нагрузок. На веб-сайте Milvus также доступен sizing tool, который генерирует рекомендации по конфигурации на основе объема данных, размерности векторов, типов индексов и т. д. Он также может в один клик создать файл конфигурации Helm.

    • Следующая конфигурация является рекомендацией, которую инструмент дал для 1 миллиона векторов размерности 1024 и типа индекса HNSW.

Используйте Helm для создания Milvus (развернутого в namespace milvus).

  • Обратите внимание, что demo-milvus можно заменить пользовательским именем.
% helm install demo-milvus milvus/milvus -n milvus -f milvus_cluster.yaml
W0710 19:35:08.789610   64030 warnings.go:70] annotation "kubernetes.io/ingress.class" is deprecated, please use 'spec.ingressClassName' instead
NAME: demo-milvus
LAST DEPLOYED: Wed Jul 10 19:35:06 2024
NAMESPACE: milvus
STATUS: deployed
REVISION: 1
TEST SUITE: None

Выполните следующую команду, чтобы проверить статус развертывания.

% kubectl get deployment -n milvus
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
demo-milvus-attu         1/1     1            1           5m27s
demo-milvus-datacoord    2/2     2            2           5m27s
demo-milvus-datanode     1/1     1            1           5m27s
demo-milvus-indexcoord   2/2     2            2           5m27s
demo-milvus-indexnode    1/1     1            1           5m27s
demo-milvus-proxy        2/2     2            2           5m27s
demo-milvus-querycoord   2/2     2            2           5m27s
demo-milvus-querynode    1/1     1            1           5m27s
demo-milvus-rootcoord    2/2     2            2           5m27s

Вывод выше показывает, что все компоненты Milvus AVAILABLE, а для координационных компонентов включено несколько реплик.

Доступ к конечным точкам Milvus и управление ими

На данный момент мы успешно развернули базу данных Milvus. Теперь мы можем получить доступ к Milvus через конечные точки. Milvus предоставляет конечные точки через сервисы Kubernetes. Attu предоставляет конечные точки через Kubernetes Ingress.

Доступ к конечным точкам Milvus с использованием сервисов Kubernetes

Выполните следующую команду, чтобы получить конечные точки сервиса:

% kubectl get svc -n milvus
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP                                             PORT(S)                         AGE
demo-etcd               ClusterIP   172.20.103.138   <none>                                                 2379/TCP,2380/TCP               62m
demo-etcd-headless      ClusterIP   None            <none>                                                  2379/TCP,2380/TCP               62m
demo-milvus             LoadBalancer   172.20.219.33    milvus-nlb-xxxx.elb.us-west-2.amazonaws.com   19530:31201/TCP,9091:31088/TCP   62m
demo-milvus-datacoord   ClusterIP   172.20.214.106   <none>                                                 13333/TCP,9091/TCP              62m
demo-milvus-datanode    ClusterIP   None            <none>                                                  9091/TCP                        62m
demo-milvus-indexcoord   ClusterIP      172.20.106.51   <none>                                                  31000/TCP,9091/TCP              62m
demo-milvus-indexnode   ClusterIP   None            <none>                                                  9091/TCP                        62m
demo-milvus-querycoord   ClusterIP      172.20.136.213   <none>                                                 19531/TCP,9091/TCP              62m
demo-milvus-querynode   ClusterIP   None            <none>                                                  9091/TCP                        62m
demo-milvus-rootcoord   ClusterIP   172.20.173.98   <none>                                                  53100/TCP,9091/TCP              62m

Вы можете увидеть несколько сервисов. Milvus поддерживает два порта: порт 19530 и порт 9091:

  • Порт 19530 предназначен для gRPC и RESTful API. Это порт по умолчанию при подключении к серверу Milvus с помощью различных Milvus SDK или HTTP-клиентов.

  • Порт 9091 — это порт управления для сбора метрик, профилирования pprof и проверок работоспособности внутри Kubernetes.

Среди них сервис demo-milvus предоставляет конечную точку доступа к базе данных, которая используется для установления соединения с клиентами. Доступ к конечной точке базы данных осуществляется через NLB как балансировщик нагрузки сервиса. Вы можете получить конечную точку сервиса NLB из столбца EXTERNAL-IP.

Обратите внимание на столбец NLB EXTERNAL-IP, который в данном случае выглядит так:

milvus-nlb-xxxx.elb.us-west-2.amazonaws.com   19530:31201/TCP,9091:31088/TCP

Доступ к конечным точкам Milvus с использованием Attu

Когда мы устанавливали Milvus, мы также установили Attu — инструмент администрирования для управления Milvus. Выполните следующую команду, чтобы получить конечную точку:

% kubectl get ingress -n milvus
NAME            CLASS   HOSTS   ADDRESS                                                 PORTS   AGE
demo-milvus-attu   <none>   *       k8s-attu-xxxx.us-west-2.elb.amazonaws.com   80      27s

Вы должны увидеть ingress с именем demo-milvus-attu, где столбец ADDRESS является внешним URL.

  • Откройте адрес Ingress в браузере и увидите следующую страницу.

  • Нажмите Connect, чтобы войти.

интерфейс attu интерфейс attu

После входа вы можете управлять базами данных Milvus через:

управление Milvus с помощью Attu управление Milvus с помощью Attu

Протестируйте векторную базу данных Milvus

Вы можете использовать официальный пример кода Milvus, чтобы проверить, работает ли база данных Milvus правильно.

  • Шаг 1: Напрямую скачайте пример кода hello_milvus.py.
% wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py

  • Шаг 2: Измените host в примере кода на endpoint Milvus Kubernetes, который мы получили ранее.
print(fmt.format("start connecting to Milvus"))
connections.connect(
"default", 
host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com", 
port="19530")
  • Шаг 3: Запустите код. Если возвращается следующий результат, Milvus работает нормально.
% python3 hello_milvus.py
=== start connecting to Milvus     ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities       ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT  ===
=== Start loading                  ===

Теперь вы успешно настроили Milvus на EKS! ПОЗДРАВЛЯЕМ!!!

Заключение

В этой публикации была представлена векторная база данных с открытым исходным кодом Milvus и объяснено, как развернуть ее на AWS с использованием управляемых сервисов, таких как Amazon EKS, S3, MSK и ELB, для достижения большей эластичности и надежности.

Ресурсы

  1. Блог AWS Milvus EKS: https://aws.amazon.com/cn/blogs/china/build-open-source-vector-database-milvus-based-on-amazon-eks/

  2. Руководство Milvus EKS: https://milvus.io/docs/eks.md

  3. Руководство по настройке Amazon EKS: https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html

  4. Руководство пользователя Amazon EKS: https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

  5. Официальный веб-сайт Milvus: https://milvus.io/

  6. Milvus Github: https://github.com/milvus-io/milvus

  7. Официальный веб-сайт eksctl: https://eksctl.io/

  8. YAML-файлы, которые понадобятся для установки:

    1. Файл eks_cluster.yaml: https://aws.amazon.com/cn/blogs/china/build-open-source-vector-database-milvus-based-on-amazon-eks/

    2. Файл milvus_helm.yaml: https://raw.githubusercontent.com/milvus-io/milvus-helm/master/charts/milvus/values.yaml

    3. Файл milvus_cluster.yaml: скопируйте/вставьте из этого блога.

Обновлено Jul 09, 2026