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=v3.0.5 \
  --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ポッド内に組み込まれて実行されます。専用のWoodpeckerサービス(別個のポッド)は、分散型/クラスター展開でのみ使用されます。詳細については、「アーキテクチャの概要」および「Woodpecker」を参照してください。

Milvusクラスタのデプロイ:

Woodpecker サービスモードの場合、Milvus 3.0.3 以降と Woodpecker v0.1.46 以降を使用することを推奨します。

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

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

このコマンドの機能:

  • メッセージキューとしてWoodpeckerを使用します(メンテナンス負担の軽減に推奨)
  • Woodpeckerをストリーミングノードに組み込まず、専用のサービス(独立したStatefulSet)として実行します
  • パフォーマンス向上のために、新しいストリーミングノードコンポーネントを有効にします
  • 従来のインデックスノードを無効化します(機能は現在、データノードによって処理されます)

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

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

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

代替メッセージキュー:Woodpeckerの代わりにPulsar、Kafka、またはRocksMQを使用してデプロイする場合は、「オプションの依存関係」を参照してください。

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

重要な注意事項:

  • リリース名の命名規則:英字、数字、ハイフンのみを使用してください(ドットは使用不可)

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

2. Milvusクラスタのステータスを確認する

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

kubectl get pods

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

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

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

  • Milvus コンポーネント:mixcoord 、datanode 、querynode 、proxy 、streamingnode
  • 依存関係:etcd (メタデータ)、minio (オブジェクトストレージ)、woodpecker (メッセージキュー)

streaming.woodpecker.embedded=false を使用する場合、Woodpecker は専用の StatefulSetとして実行されます(my-release-milvus-woodpecker 、デフォルトで 4 つのレプリカ — クォーラム 3 ノードに加え、フォールトトレランス用の予備 1 ノード。woodpecker.replicaCount を3未満に設定しないでください)として動作し、ヘッドレスサービスによってフロントエンドが構成され、ストレージバックエンドとしてMinIOを使用しています。そのため、クラスタにはストリーミングノードとは別のwoodpecker ポッドセットが存在します。

ポートフォワーディングの設定が完了すると(次の手順を参照)、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へのアクセスを有効にするには、プロキシPodをローカルポートにポートフォワードする必要があります。

$ 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 --set standalone.messageQueue=woodpecker --set woodpecker.enabled=true --set streaming.enabled=true 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

オプションの依存関係

このデプロイメントでは、メッセージキューとしてWoodpecker、メタデータとしてetcd、オブジェクトストレージとしてMinIOを使用しています。別のメッセージキューを使用する場合、または外部のオブジェクトストレージ/メタデータに接続する場合は、以下を参照してください:

Storage V3はデフォルトで無効になっています。Storage V3に依存する機能を使用する前に、有効にしてください。要件および互換性に関する注意事項については、「Storage V3」を参照してください。

次のステップ

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