Helm を使用して Kubernetes で Milvus を実行する

このページでは、Milvus Helmチャートを使用してKubernetesでMilvusインスタンスを起動する方法について説明します。

概要

Helmでは、「チャート」と呼ばれるパッケージ形式が使用されます。チャートとは、関連するKubernetesリソースのセットを記述したファイルの集合です。Milvusでは、Milvusの依存関係やコンポーネントをデプロイするためのチャート一式を提供しています。

前提条件

イメージの取得で問題が発生した場合は、問題の詳細を明記の上、community@zilliz.comまでご連絡ください。必要なサポートを提供いたします。

Milvus Helmチャートのインストール

Milvus Helm Chart をインストールする前に、Milvus Helm リポジトリを追加する必要があります。

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

https://github.com/milvus-io/milvus-helm にある Milvus Helm チャートリポジトリはアーカイブ化されました。現在は、https://github.com/zilliztech/milvus-helm の新しいリポジトリを使用しています。アーカイブ化されたリポジトリではバージョン 4.0.31 までのチャートが引き続き利用可能ですが、それ以降のリリースについては新しいリポジトリをご利用ください。

その後、次のようにしてリポジトリからMilvusチャートを取得してください:

$ helm repo update

このコマンドを実行すれば、いつでも最新のMilvus Helmチャートを取得できます。

オンラインインストール

1. Milvus クラスタのデプロイ

Helmチャートのインストールが完了したら、Kubernetes上でMilvusを起動できます。このセクションでは、Milvusクラスタのデプロイ手順について説明します。

スタンドアロンでのデプロイをご希望ですか?

開発やテストのために Milvus をスタンドアロンモード(シングルノード)でデプロイしたい場合は、次のコマンドを使用してください:

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

:スタンドアロンモードでは、デフォルトのメッセージキューとしてWoodpeckerが使用され、Streaming Nodeコンポーネントが有効になります。詳細については、「アーキテクチャの概要」および「Woodpeckerの使用」を参照してください。

Milvusクラスタのデプロイ:

次のコマンドは、v2.6.22向けに最適化された設定で、推奨されるメッセージキューとしてWoodpeckerを使用するMilvusクラスタをデプロイします:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.22 \
  --set pulsarv3.enabled=false \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

このコマンドの動作:

  • メッセージキューとしてWoodpeckerを使用します(メンテナンス負担の軽減に推奨)
  • パフォーマンス向上のために、新しいStreaming Nodeコンポーネントを有効化します
  • 従来のインデックスノードを無効化(機能は現在、データノードによって処理されます)
  • Pulsar を無効化し、代わりに Woodpecker を使用します

Milvus 2.6.x におけるアーキテクチャの変更点:

  • メッセージキューWoodpeckerが推奨されるようになりました(Pulsarと比較してインフラのメンテナンス負担が軽減されます)
  • 新しいコンポーネント: 「Streaming Node」が導入され、デフォルトで有効化されています
  • コンポーネントの統合インデックスノードデータノードが単一のデータノードに統合されました

アーキテクチャの詳細については、「アーキテクチャの概要」を参照してください。

メッセージキューの代替オプション:

Woodpeckerの代わりにPulsar(従来の選択肢)を使用したい場合:

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.22 \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

次の手順: 上記のコマンドを実行すると、推奨設定で Milvus がデプロイされます。本番環境での使用については:

重要な注意事項:

  • リリース名の命名規則:英字、数字、ハイフンのみを使用してください(ドットは使用不可)
  • Kubernetes v1.25 以降:PodDisruptionBudget に関する問題が発生した場合は、以下の回避策を適用してください:
    helm install my-release zilliztech/milvus \
      --set pulsar.bookkeeper.pdb.usePolicy=false \
      --set pulsar.broker.pdb.usePolicy=false \
      --set pulsar.proxy.pdb.usePolicy=false \
      --set pulsar.zookeeper.pdb.usePolicy=false
    

詳細については、Milvus HelmチャートおよびHelmのドキュメントを参照してください。

2. Milvusクラスタの状態を確認する

Podのステータスを確認し、デプロイが正常に完了していることを確認してください:

kubectl get pods

すべてのポッドのステータスが「Running」になるまで待ちます。v2.6.22 の設定では、次のようなポッドの状態が表示されるはずです:

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-streaming-node-xxxxxxxxx       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
my-release-pulsar-autorecovery-86f5dbdf77-lchpc  1/1    Running   0        3m24s
my-release-pulsar-bookkeeper-0                   1/1    Running   0        3m23s
my-release-pulsar-bookkeeper-1                   1/1    Running   0        98s
my-release-pulsar-broker-556ff89d4c-2m29m        1/1    Running   0        3m23s
my-release-pulsar-proxy-6fbd75db75-nhg4v         1/1    Running   0        3m23s
my-release-pulsar-zookeeper-0                    1/1    Running   0        3m23s
my-release-pulsar-zookeeper-metadata-98zbr       0/1   Completed  0        3m24s

確認すべき主要コンポーネント:

  • Milvus コンポーネントmixcoorddatanodequerynodeproxystreaming-node
  • 依存関係etcd (メタデータ)、minio (オブジェクトストレージ)、pulsar (メッセージキュー)

ポートフォワーディングの設定が完了したら(次の手順を参照)、http://127.0.0.1:9091/webui/ からMilvus WebUIにアクセスすることもできます。詳細については、Milvus WebUI を参照してください。

3. Milvus への接続

Kubernetesの外部からMilvusクラスタに接続するには、ポートフォワーディングを設定する必要があります。

ポートフォワーディングの設定:

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

このコマンドは、ローカルポート27017 を Milvus ポート19530 に転送します。次のような出力が表示されるはずです:

Forwarding from 127.0.0.1:27017 -> 19530

接続の詳細:

  • ローカル接続:localhost:27017
  • Milvusのデフォルトポート:19530

ポートフォワーディングのオプション:

  • ローカルポートの自動割り当て:27017:19530 の代わりに:19530 を使用し、kubectl に利用可能なポートを選ばせる
  • すべてのインターフェースでリスニング:--address 0.0.0.0 を追加して、他のマシンからの接続を許可します:
    kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
    
  • スタンドアロン展開: スタンドアロンモードを使用する場合、サービス名は変更されません

Milvus を使用中は、このターミナルを開いたままにしておいてください。これで、任意の Milvus SDK を使用してlocalhost:27017 から Milvus に接続できるようになります。

(オプション) Milvus の設定を更新する

values.yaml ファイルを編集して再度適用することで、Milvus クラスタの設定を更新できます。

  1. 希望する設定を含むvalues.yaml ファイルを作成します。

    以下では、proxy.http を有効にする場合を想定しています。

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

    適用可能な設定項目については、「システム設定」を参照してください。

  2. values.yaml ファイルを適用します。

helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
  1. 更新された設定を確認します。

    helm get values my-release
    

    出力には、更新された設定が表示されます。

Milvus WebUI へのアクセス

Milvus には、ブラウザからアクセスできる「Milvus WebUI」という組み込みの GUI ツールが付属しています。Milvus WebUI は、シンプルで直感的なインターフェースにより、システムの可観測性を向上させます。Milvus WebUI を使用すると、Milvus のコンポーネントや依存関係の統計情報やメトリクスを確認したり、データベースやコレクションの詳細を確認したり、Milvus の詳細な設定を一覧表示したりすることができます。 Milvus WebUIの詳細については、「Milvus WebUI」を参照してください。

Milvus WebUIへのアクセスを有効にするには、プロキシポッドをローカルポートにポートフォワードする必要があります。

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

これで、http://localhost:27018 から Milvus Web UI にアクセスできるようになります。

オフラインインストール

ネットワークが制限された環境にある場合は、このセクションの手順に従って Milvus クラスタを起動してください。

1. Milvus マニフェストの取得

次のコマンドを実行して、Milvus マニフェストを取得します。

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

上記のコマンドは、Milvus クラスタ用のチャートテンプレートを生成し、その出力を `milvus_manifest.yaml` という名前のマニフェストファイルに保存します。このマニフェストを使用すると、Milvus クラスタを、そのコンポーネントと依存関係を別々のポッドに配置してインストールできます。

  • すべての Milvus コンポーネントが単一のポッド内に含まれるスタンドアロンモードで Milvus インスタンスをインストールする場合は、代わりに `helm template my-release --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false zilliztech/milvus > milvus_manifest.yaml ` を実行し、スタンドアロンモードの Milvus インスタンス用のチャートテンプレートを生成する必要があります。
  • Milvusの設定を変更するには、 value.yaml テンプレートをダウンロードし、希望の設定を記述した上で、helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yaml を実行して、それに応じてマニフェストを生成してください。

2. イメージ取得スクリプトのダウンロード

イメージ取得スクリプトは Python で開発されています。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. イメージの取得と保存

以下のコマンドを実行して、必要なイメージを取得・保存します。

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

画像は、現在のディレクトリ内の「images 」という名前のサブフォルダに取得されます。

4. 画像の読み込み

これで、ネットワーク制限環境内のホストに、次のように画像を読み込むことができます:

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

5. Milvusのデプロイ

$ kubectl apply -f milvus_manifest.yaml

ここまでは、オンラインインストールの手順2および3に従って、クラスタの状態を確認し、ローカルポートを Milvus に転送することができます。

稼働中の Milvus クラスタのアップグレード

実行中のMilvusクラスタを最新バージョンにアップグレードするには、次のコマンドを実行してください:

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

Milvusのアンインストール

Milvus をアンインストールするには、次のコマンドを実行します。

$ helm uninstall my-release

次の手順

Docker に Milvus をインストールしたら、次のことができます: