46.5kデモを予約するログイン無料で始める

Amazon EKSでMilvusをセットアップする

Jul 16, 20245 min read

Milvusは最初からKubernetesをサポートするように設計されており、AWS上に簡単にデプロイすることができる。信頼性が高く弾力的なMilvusベクトルデータベースクラスターを構築するために、マネージドKubernetesとしてAmazon Elastic Kubernetes Service (Amazon EKS)、オブジェクトストレージとしてAmazon S3、メッセージストレージとしてAmazon Managed Streaming for Apache Kafka (Amazon MSK)、ロードバランサーとしてAmazon Elastic Load Balancing (Amazon ELB)を使用することができます。

Milvusアーキテクチャの概要](https://assets.zilliz.com/Milvus_Architecture_Overview_fd10aeffb8.png)

_ミルバスアーキテクチャ

EKSはAmazonのマネージドKubernetesサービスで、EC2またはFargate上のサーバーレスで実行される。すでにオンプレミスでKubernetesを使用している組織にとって理想的で、最小限の変更でデプロイメントをAWSに移行できる。

このブログでは、FargateがetcdのようなMilvusの依存関係に必要なPersistent Volume Claim(PVC)を扱えないため、デプロイにEC2を使用している。

EKSやその他のサービスを利用したMilvusクラスタのデプロイについて、ステップバイステップのガイダンスを提供する。このブログの詳細版はこちら。

前提条件

AWS CLI

ローカルの PC/Mac または Amazon EC2 インスタンスに AWS CLI をインストールする。Amazon Linux 2またはAmazon Linux 2023を使用している場合、デフォルトでAWS CLIツールがインストールされています。 AWS CLIのインストール方法](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)をご参照ください。

以下はAWS CLIがインストールされていることを確認する画面です。

どのawsか
/usr/local/bin/aws

aws --バージョン
aws-cli/2.15.34 Python/3.11.8 Darwin/23.5.0 exe/x86_64 prompt/off

EKS ツール:Kubectl、eksctl、helm

優先するエンドポイントデバイスに以下の EKS ツールをインストールする:

  • kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

  • eksctl](https://eksctl.io/installation)

  • helm](https://milvus.io/docs/install_cluster-helm.md)

インストール手順の詳細については、EKS getting started を参照してください。 以下は Mac M2 ラップトップで z shell を使ってインストールとバージョンを確認したスクリーンショットです:

kubectl バージョン
クライアントバージョン: v1.30.2
Kustomize バージョン: v5.0.4-0.20230601165947-6ce0bf390ce3

# 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 バージョン
0.185.0

helm list --all-namespaces
名前 名前空間 リビジョン 更新 ステータス チャート アプリケーション バージョン
my-milvus default 1 2024-07-09 16:00:14.117945 -0700 PDT deployed milvus-4.1.34 2.4.5

Amazon S3 バケットを作成する

AWSコンソール](http://console.aws.amazon.com)を使用してAWS S3バケットに名前を付ける際は、バケット命名規則を読み、それを守ってください。

Amazon S3バケットの作成](https://assets.zilliz.com/Create_an_Amazon_S3_Bucket_37e2a9fe03.png)

KMSのCustomer managed keyを作成する。

KMSキーはAWS管理キーにはできません。 Customer が管理するキーでなければなりません。 作成後、AWS Secrets Managerで使用できるようになるまで、鍵がアクティブになるまで約10分待つ必要があります。 AWSコンソール](http://console.aws.amazon.com)を使用して、KMS > Customer managed keysに移動します。

KMS、カスタマーマネージドキーの作成.png KMS、カスタマーマネージドキーの作成.png

AWS Secrets Managerでカスタムシークレットを作成します。

KMSのカスタマーマネージドキーを作成した後、10分ほど待っていることを確認してください。 次に、新しいAWS Secrets Managerのシークレットを作成します。 AWSコンソール](http://console.aws.amazon.com)を使用します。

1.シークレットタイプに別のタイプを選択します。

2.Key/value pairs editorをPlaintextに切り替える。 username "と "password "に完全に一致するキーを持つJSONを入力する。

3.シークレットの名前はAmazonMSK_で始まる必要があります。

4.暗号化キーは、AWSが管理するキーではなく、KMSの顧客が管理するキーでなければならない。

AWS Secrets Managerでカスタムシークレットを作成する。.png](https://assets.zilliz.com/Create_a_custom_secret_in_the_AWS_Secrets_Manager_3f33a9ef75.png)

MSKインスタンスの作成

次に、AWS console を使用して、Kafka の autoCreateTopics 機能と SASL/SCRAM セキュリティを有効にした Amazon MSK クラスタを作成します。

**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

レプリカフェッチ最大バイト数=20971760

詳細はCustom MSK configurationsを参照。

MSKインスタンスの作成.png MSKインスタンスの作成.png

  • MilvusはMSKのIAMロールベース認証をサポートしていないため、MSKを作成する際はセキュリティ設定でSASL/SCRAM認証オプションを有効にし、AWS Secrets Managerでユーザ名とパスワードを設定します。詳しくはAWS Secrets Managerによるサインイン認証をご参照ください。

  • MSKのセキュリティグループは、EKSクラスタのセキュリティグループまたはIPアドレス範囲からのアクセスを許可する必要があります。

セキュリティ設定](https://assets.zilliz.com/security_settings_f10ab85b9e.jpg)

MSKインスタンスがプロビジョニングされるまで15分ほど待つ。 準備ができたら、それをクリックし、先ほど作成したAWS Secrets Managerのカスタムシークレットを関連付けます。

AWSシークレットマネージャ AWSシークレットマネージャ

Amazon EKSクラスタを作成する

コンソール、CloudFormation、eksctlなど、EKSクラスタを作成する方法はたくさんあります。ドキュメントSet up to use Amazon EKSを参照してください。

この記事ではeksctlを使用します。eksctlは、Amazon EKS上でKubernetesクラスタを作成および管理するためのシンプルなコマンドラインツールです。eksctlは、Amazon EKS用のノードで新しいクラスタを作成するための最速かつ最も簡単な方法を提供します。詳細については、eksctlの公式ドキュメントを参照してください。

**ステップ 1: eks_cluster.yaml ファイルを作成する。

.yaml`ファイルのサンプルはMilvus documentationを参照してください。

1.クラスタ名をクラスタ名に置き換えます、

2.region-code をクラスタを作成するAWSリージョンに置き換えます。

3.private-subnet-idx をプライベートサブネットに置き換えます。注:この設定ファイルは、プライベートサブネットを指定して既存のVPCにEKSクラスタを作成します。VPCとサブネットの設定を削除して、eksctlが自動的に新しいVPCを作成するようにすることもできます。

ステップ 2: eksctl create cluster -f eks_cluster.yaml コマンドを実行して EKS クラスターを作成します。

create cluster -f eks_cluster.yaml

Amazon EKS Quickstart](https://docs.aws.amazon.com/eks/latest/userguide/quickstart.html)を参照してください。 このコマンドは以下のリソースを作成します:

  • 指定したバージョンのEKSクラスタ。

  • 3台のm6i.2xlarge EC2インスタンスを持つ管理ノードグループ。

  • IAM OIDC Identity Provider](https://docs.aws.amazon.com/en_us/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)とaws-load-balancer-controllerというServiceAccountは、後でAWS Load Balancer Controllerをインストールする際に使用する。

  • 名前空間 milvus と、この名前空間内の ServiceAccount milvus-s3-access-sa。これは後ほどMilvusのオブジェクトストレージとしてS3を設定する際に使用します。

  • 注: 簡単のため、milvus-s3-access-saにはS3のフルアクセス権限が付与されています。本番環境では、最小権限の原則に従い、Milvusで使用する特定のS3バケットのみにアクセス権限を付与することを推奨する。

  • aws-ebs-csi-driverは、EKSクラスタがAmazon EBSボリュームのライフサイクルを管理するためのAWS EBS CSIドライバです。
eksctl create cluster -f eks_cluster.yaml
2024-07-10 17:45:32 [ℹ] eksctl バージョン 0.185.0
2024-07-10 17:45:32 [ℹ] リージョン us-west-2 を使用しています。
2024-07-10 17:45:32 [✔] 既存のVPC (vpc-84c5b3fc) と
...
2024-07-10 17:45:32 [✔] クラスタスタック "eksctl-MilvusEKSTest-cluster" を構築しています。
2024-07-10 17:45:33 [ℹ] スタックのデプロイ
...

クラスタの作成が完了するまで待ちます。完了すると、以下のような応答が出力されるはずです:

us-west-2 "リージョンのEKSクラスタ "MilvusEKSTest "の準備ができました。

クラスタが作成されたら、以下を実行してノードを表示できます:

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: ストレージタイプとして GP3 を設定した ebs-sc StorageClass を作成し、デフォルトの StorageClass として設定します。

Milvusはメタストレージとしてetcdを使用し、PVCの作成と管理にこのStorageClassが必要です。

1.次の cat コマンドを実行します。

cat <<EOF | kubectl apply -f -f
apiVersion: storage.k8s.io/v1
種類: StorageClass
メタデータ
  name: ebs-sc
プロビジョナー: ebs.csi.aws.com
volumeBindingMode:WaitForFirstConsumer
パラメータを指定する:
  タイプ: gp3
EOF
storageclass.storage.k8s.io/ebs-scが作成されました。

2.作成後にパッチコマンドを実行して、このStorageClassをデフォルトにします。

kubectl patch storageclass gp2 -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class": "false"}}}'.
storageclass.storage.k8s.io/gp2 パッチ済み

3.ストレージクラスが正しく設定されていることを確認する。

kubectl get storageclass
名前 provisioner reclaimpolicy volumebindingmode allowvolumeexpansion age
ebs-sc ebs.csi.aws.com Delete WaitForFirstConsumer false 6m39s
gp2 kubernetes.io/aws-ebs WaitForFirstConsumer false を削除 44m

**ステップ 4: AWS ロードバランサーコントローラーのインストール

これは後でMilvus ServiceとAttu Ingressに使用します。EKSロードバランサーコントローラーの説明書](https://docs.aws.amazon.com/eks/latest/userguide/quickstart.html#quickstart-lbc)を参照してください。

eks-charts repoを追加し、更新します。

helm repo add eks https://aws.github.io/eks-charts
"eks" がリポジトリに追加されました。

helm repo update
チャートリポジトリから最新情報を取得する間、しばらくお待ちください...
... "eks "チャートリポジトリから更新を取得しました。
... "zilliztech "チャートリポジトリからの更新に成功しました。
...milvusチャートリポジトリからの更新に成功しました。
アップデート完了ハッピー・ヘルミング!⎈⎈。

AWS Load Balancer Controllerをインストールします。cluster-name はクラスタ名に置き換えてください。aws-load-balancer-controller という ServiceAccount は、EKS クラスタの作成時に既に作成されています。

helm install aws-load-balancer-controller eks/aws-load-balancer-controller ୧ -n kube-system
  -n kube-system
  --set clusterName=MilvusEKSTest ୧-͈ᴗ-͈ᴗ
  --set serviceAccount.create=false ¦ --set serviceAccount.create=false
  --set serviceAccount.name=aws-load-balancer-controller
名前: aws-load-balancer-controller
最後にデプロイされたWed Jul 10 19:00:34 2024
ネームスペース: kube-system
ステータス: 配備済み
リビジョン: 1
テストスイート: なし
注意事項
AWSロードバランサーコントローラーがインストールされました!

コントローラが正常にインストールされたか確認します。出力は以下のようになるはずです:

kubectl get deployment -n kube-system aws-load-balancer-controller
名前 ready up-to-date available age
aws-load-balancer-controller 2/2 2 88s

Amazon EKSにMilvusクラスタをデプロイする

MilvusはOperatorやHelmといった複数のデプロイ方法をサポートしている。Operatorを使う方がシンプルですが、Helmの方がより直接的で柔軟です。そこで、デプロイにはHelmを使用します。

milvus_helm.yaml`ファイルを使ってMilvusをデプロイする際の設定をカスタマイズすることができます。

デフォルトでは、Milvusはクラスタ内のminioとpulsarをそれぞれオブジェクトストレージとメッセージストレージとして作成する。これを本番環境に適したものにするために、いくつかの設定変更を行う。

**ステップ1: Milvus Helmのリポジトリを追加し、更新する。

helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
"milvus "はすでに同じ設定で存在しています。
チャートリポジトリから最新のものを取得する間、しばらくお待ちください...
... "eks "チャートリポジトリからアップデートに成功しました。
... "zilliztech "チャートリポジトリから更新を取得。
...milvusチャートリポジトリからの更新に成功しました。
アップデート完了ハッピー・ヘルミング!⎈⎈。

**ステップ2: milvus_cluster.yamlファイルを作成します。

以下のコードでは、オブジェクトストレージとしてAmazon S3、メッセージキューとしてAmazon MSKを設定するなど、Milvusのインストールをカスタマイズします。コードブロックの後に詳細な説明と設定ガイダンスを提供します。

#####################################
# セクション1
#
# S3 をオブジェクトストレージとして設定



# サービスアカウント
# - このサービスアカウントは外部S3アクセスで使用されます
serviceAccount:
  作成: false
  名前: milvus-s3-access-sa


# クラスタ内のminioを閉じる
minio:
  有効: false


# 外部S3
# - これらの設定は `externalS3.enabled` が true のときのみ使用されます。
externalS3:
  enabled: true
  host: "s3.<region-code>.amazonaws.com"
  ポート"443"
  useSSL: true
  バケット名"<バケット名>"
  rootPath:"<ルートパス>"
  useIAM: true
  cloudProvider:"aws"
  iamEndpoint: ""


# セクション2
#
# メッセージストレージとしてMSKを設定する


# クラスタ内パルサーを閉じる
パルサー
  enabled: false

# 外部カフカ
# - これらの設定は、`externalKafka.enabled`がtrueの場合のみ使用されます。
externalKafka:
  enabled: true
  brokerList:"<broker-list>"
  securityProtocol:SASL_SSL
  sasl:
    メカニズム:SCRAM-SHA-512
    ユーザー名: "<ユーザー名>"
    パスワード: "<パスワード>"
    

# セクション3
#
# クラスタ外からアクセスできるようにMilvusサービスを公開します(LoadBalancerサービス)。
# またはクラスタ内からアクセスします(ClusterIPサービス)。サービスの種類とポートを設定します。
#####################################
サービスを提供します:
  タイプロードバランサー
  ポート19530
  アノテーション
    service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller はこのアノテーションを持つサービスを満たす。
    service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #AWSネットワークロードバランサーに付与されるユーザー定義名
    #service.beta.kubernetes.io/aws-load-balancer-scheme: internal #内部またはインターネットに面している。
    service.beta.kubernetes.io/aws-load-balancer-scheme:"internet-facing" #ロードバランサーをパブリックサブネットに置く
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #ターゲットIPとして(ノードIPではなく)Pod IPを使う。


# セクション4
#
# Milvus管理GUIのAttuのインストール

attu
  enabled: true
  name: attu
  サービスを提供します:
    アノテーション
      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
    ラベルに{}
    タイプロードバランサー
    ポート3000
  ingress:
    有効: false
      

# セクション 5
#
# MilvusコアコンポーネントのHA配備

rootCoordinator:
  レプリカ: 2
  activeStandby:
    enabled: true # ルートコーディネータに複数のレプリカを設定した場合、アクティブスタンバイを有効にする
  リソースに設定します:
    制限:
      CPU: 1
      メモリ: 2Gi
indexCoordinator:
  レプリカ: 2
  activeStandby:
    enabled: true # インデックスコーディネータに複数のレプリカを設定した場合にアクティブスタンバイを有効にする
  リソースを設定します:
    リミットを設定します:
      CPU: "0.5"
      メモリ0.5Gi
queryCoordinator:
  レプリカ: 2
  activeStandby:
    enabled: true # クエリコーディネータに複数のレプリカを設定する場合、アクティブスタンバイを有効にする
  リソースを指定します:
    リミットを設定します:
      CPU: "0.5"
      メモリ0.5Gi
dataCoordinator:
  レプリカ: 2
  activeStandby:
    enabled: true # データコーディネータに複数のレプリカを設定した場合にアクティブスタンバイを有効にする
  リソースを設定します:
    リミットを設定します:
      CPU: "0.5"
      メモリ0.5Gi
プロキシ
  レプリカ: 2
  リソース
    制限
      CPU: 1
      メモリ4Gi


# セクション6
#
# Milvus Resource Allocation
#####################################
queryNode:
  レプリカ1
  リソース
    制限
      CPU: 2
      メモリ: 8Gi
dataNode:
  レプリカ1
  リソース
    リミット
      CPU: 1
      メモリ4Gi
indexNode:
  レプリカ1
  リソース
    リミット
      CPU: 4
      メモリ: 8Gi

コードは6つのセクションに分かれています。以下の説明に従って、対応する設定を変更してください。

  • セクション1: S3をオブジェクトストレージとして設定する。 serviceAccountはMilvusにS3へのアクセス権を与える(ここではmilvus-s3-access-saで、EKSクラスタ作成時に作成済み)。

    • region-code>はクラスタを作成したAWSリージョンに置き換えてください。

    • <bucket-name>をS3バケット名、<root-path>をS3バケットのプレフィックス(空でも可)に置き換える。

  • セクション2: メッセージストレージとしてMSKを設定する。

    • <broker-list>をSASL/SCRAM認証タイプのMSKエンドポイントに、とをMSKのユーザー名とパスワードに置き換える。<broker-list>はMSKのクライアント情報から取得できます。

クライアント情報を見る.jpg クライアント情報を見る.jpg

  • セクション3:** このセクションではMilvusサービスのエンドポイントをクラスタ外からアクセスできるように公開します。デフォルトでは、MilvusエンドポイントはEKSクラスタ内でのみアクセス可能なClusterIPタイプのサービスを使用します。必要に応じてLoadBalancerタイプに変更し、EKSクラスタ外部からのアクセスを許可することができます。ロードバランサータイプのサービスは、ロードバランサとしてAmazon NLBを使用します。

    • セキュリティのベストプラクティスに従い、aws-load-balancer-schemeはデフォルトで内部モードとして設定されており、Milvusへのイントラネットアクセスのみが許可されています。Milvusへのインターネットアクセスが必要な場合は、internalをinternet-facingに変更する必要がある。NLB設定手順を見る](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html)をクリックしてください。

      • 行を次のように変更してください:aws-load-balancer-scheme: internet-facing` に変更してください。
# service.beta.kubernetes.io/aws-load-balancer-scheme: internal に変更する。
service.beta.kubernetes.io/aws-load-balancer-scheme: internal:"internet-facing"
  • セクション4: オープンソースのMilvus管理ツールである Attuのインストールと設定を行う。Attuは直感的なGUIを持ち、データベースを簡単に操作することができます。Attuを有効にし、AWS ALBを使用してingressを設定し、インターネット経由でAttuにアクセスできるようにインターネットフェイシングタイプに設定します。

    • ALB設定のガイドは こちらをクリックしてください。
  • セクション5: Milvus Core ComponentsのHAデプロイを有効にする。アーキテクチャによれば、Milvusには複数の独立したコンポーネントが含まれている。例えば、コーディネータサービスは制御層として機能し、ルート、クエリ、データ、インデックスの各コンポーネントの調整を行う。アクセスレイヤーのProxyはデータベースアクセスのエンドポイントとして機能します。これらのコンポーネントのデフォルトは1ポッドレプリカのみです。Milvusの可用性を向上させるためには、これらのサービスコンポーネントの複数のレプリカをデプロイすることが特に必要です。

    • Root、Query、Data、Indexの各コーディネータコンポーネントは、activeStandbyオプションを有効にしてマルチレプリカでデプロイする必要があることに注意してください。
  • セクション 6: ワークロードの要件に合わせて Milvus コンポーネントのリソース割り当てを調整する。Milvusのウェブサイトでは、データ量、ベクトルサイズ、インデックスタイプなどに基づいて構成案を生成する sizing toolも提供しています。また、ワンクリックでHelm設定ファイルを生成することも可能です。

    • 以下の構成は、100万個の1024次元ベクトルとHNSWインデックスタイプに対するツールからの提案です。

Helmを使用してMilvusを作成する(名前空間milvusに配置)。

  • demo-milvusをカスタム名で置き換えることができます。
helm install demo-milvus milvus/milvus -n milvus -f milvus_cluster.yaml
W0710 19:35:08.789610 64030 warnings.go:70] アノテーション "kubernetes.io/ingress.class "は非推奨です。
名前: demo-milvus
最後にデプロイされたWed Jul 10 19:35:06 2024
名前空間: milvus
ステータス: 配備済み
リビジョン: 1
テストスイート: なし

以下のコマンドを実行して、デプロイメント状況を確認します。

kubectl get deployment -n milvus
名前 ready up-to-date available age
demo-milvus-attu 1/1 1 5m27s
demo-milvus-datacoord 2/2 2 5m27s
demo-milvus-datanode 1/1 1 5m27s
デモミルバス インデックスコード 2/2 2 5m27s
demo-milvus-indexnode 1/1 1 5m27s
demo-milvus-proxy 2/2 2 5m27s
demo-milvus-querycoord 2/2 2 5m27s
demo-milvus-querynode 1/1 1 5m27s
demo-milvus-rootcoord 2/2 2 5m27s

上記の出力は、MilvusコンポーネントがすべてAVAILABLEであり、コーディネーション・コンポーネントが複数のレプリカを有効にしていることを示している。

Milvusエンドポイントへのアクセスと管理

ここまでで、Milvusデータベースのデプロイは成功しました。ここからはエンドポイントを通してMilvusにアクセスできるようになります。MilvusはKubernetesサービス経由でエンドポイントを公開している。AttuはKubernetes Ingress経由でエンドポイントを公開する。

Kubernetesサービスを使ったMilvusエンドポイントへのアクセス

以下のコマンドを実行して、サービスのエンドポイントを取得します:

kubectl get svc -n milvus
名前 タイプ cluster-ip external-ip port(s) age
demo-etcd ClusterIP 172.20.103.138 <none> 2379/TCP,2380/TCP 62m
demo-etcd-headless ClusterIP なし <なし> 2379/TCP,2380/TCP 62m
demo-milvus ロードバランサー 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> 9091/TCP 62m
demo-milvus-indexcoord ClusterIP 172.20.106.51 <none> 31000/TCP,9091/TCP 62m
demo-milvus-indexnode ClusterIP なし <なし> 9091/TCP 62m
demo-milvus-querycoord ClusterIP 172.20.136.213 <なし> 19531/TCP,9091/TCP 62m
demo-milvus-querynode ClusterIP なし <none> 9091/TCP 62m
demo-milvus-rootcoord ClusterIP 172.20.173.98 <なし> 53100/TCP,9091/TCP 62m

いくつかのサービスが見える。Milvusはポート19530とポート9091の2つのポートをサポートしている:

  • ポート19530はgRPCとRESTful API用です。異なるMilvus SDKやHTTPクライアントでMilvusサーバに接続する場合のデフォルトポートです。

  • ポート9091はKubernetes内のメトリクス収集、pprofプロファイリング、ヘルスプローブ用の管理ポートです。

このうち、demo-milvusサービスはデータベースアクセスエンドポイントを提供し、クライアントとの接続を確立するために使用される。このデータベース・エンドポイントは、サービスのロードバランサーとしてNLBにアクセスされる。NLBのサービスエンドポイントはEXTERNAL-IP列から取得できる。

NLBのEXTERNAL-IP列に注意してください:

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

Attu を使用して Milvus エンドポイントにアクセスする

Milvusをインストールした際に、Milvusを管理するための管理ツールAttuもインストールしました。以下のコマンドを実行し、エンドポイントを取得します:

kubectl get ingress -n milvus
名前 クラス ホスト アドレス ポート 年齢
demo-milvus-attu <none> * k8s-attu-xxxx.us-west-2.elb.amazonaws.com 80 27s

demo-milvus-attuというイングレスが表示されるはずで、ADDRESS列は外部URLである。

  • Ingressのアドレスをブラウザ**で開くと、以下のページが表示されます。

  • Connec**tをクリックしてログインしてください。

attuインターフェース attuインターフェース

ログイン後、Milvusのデータベースを管理することができます:

Attuを使ってMilvusを管理する Attuを使ってMilvusを管理する

Milvusベクターデータベースのテスト

Milvusの公式 サンプルコードを使って、Milvusのデータベースが正しく動作しているかテストすることができます。

  • Step 1: サンプルコード hello_milvus.py を直接ダウンロードする。
wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py

  • ステップ2: サンプルコードのホスト**を先ほど取得したMilvus Kubernetesエンドポイントに変更する。
print(fmt.format("Milvusへの接続開始"))
connections.connect(
"default"、
host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com"、
port="19530")
  • 以下の結果が返ってくれば、Milvusは正常に動作している。
% python3 hello_milvus.py
=== Milvusへの接続を開始する。
Milvusにコレクションhello_milvusが存在するか: False
=== hello_milvus`コレクションを作成する。
=== エンティティの挿入開始 ===
Milvusのエンティティ数: 3000
=== インデックスIVF_FLATの作成開始。
=== ロード開始 ===

**これでEKSへのMilvusのセットアップは完了です! おめでとうございます!

結論

この記事では、オープンソースのベクターデータベースMilvusを紹介し、Amazon EKS、S3、MSK、ELBなどのマネージドサービスを使用してAWS上にデプロイし、より高い弾力性と信頼性を実現する方法を説明しました。

リソース

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.アマゾン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

  1. 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ファイル:このブログ内からコピー・ペーストしてください。

Updated on Jul 09, 2026