KubernetesでHelmを使ってMilvusを起動する
このページでは、Milvus Helmチャートを使用してKubernetesでMilvusインスタンスを起動する方法を説明します。
概要
Helmはチャートと呼ばれるパッケージングフォーマットを使用します。チャートとは、Kubernetesリソースの関連するセットを記述したファイルのコレクションです。Milvusは、Milvusの依存関係やコンポーネントをデプロイするのに役立つチャートのセットを提供します。
前提条件
K8sクラスタを作成する。
StorageClassをインストールする。インストールされたStorageClassは次のように確認できます。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate falseインストール前にハードウェアとソフトウェアの要件を確認します。
Milvusをインストールする前に、Milvus Sizing Toolを使用して、データサイズに基づいてハードウェア要件を見積もることを推奨します。これにより、Milvusのインストールに最適なパフォーマンスとリソースを確保することができます。
イメージのプル時に問題が発生した場合は、community@zilliz.comまで問題の詳細をご連絡ください。
Milvus Helm Chartのインストール
Milvus Helm Chartsをインストールする前に、Milvus Helmリポジトリを追加する必要があります。
helm repo add zilliztech https://zilliztech.github.io/milvus-helm/
https://github.com/milvus-io/milvus-helm にある Milvus Helm Charts リポジトリはアーカイブされました。現在は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.16 \
--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を使用し、v2.6.16用に最適化された設定でMilvusクラスタをデプロイします:
helm install my-release zilliztech/milvus \
--set image.all.tag=v2.6.16 \
--set pulsarv3.enabled=false \
--set woodpecker.enabled=true \
--set streaming.enabled=true \
--set indexNode.enabled=false
このコマンドが行うこと
- メッセージキューとしてWoodpeckerを使用します。
- 新しいストリーミング・ノード・コンポーネントを有効にし、パフォーマンスを向上させます。
- レガシー・インデックス・ノードを無効にします。
- Pulsarを無効にし、代わりにWoodpeckerを使用します。
Milvus 2.6.xにおけるアーキテクチャの変更点:
- メッセージ・キュー:Woodpeckerが推奨されるようになりました。
- 新しいコンポーネント:ストリーミング・ノードが導入され、デフォルトで有効になりました。
- コンポーネントの統合:インデックス・ノードと データ・ノードが1つのデータ・ノードに統合されました。
アーキテクチャの詳細については、アーキテクチャの概要をご覧ください。
代替メッセージ・キュー・オプション:
Woodpeckerの代わりにPulsar(従来の選択肢)を使いたい場合:
helm install my-release zilliztech/milvus \
--set image.all.tag=v2.6.16 \
--set streaming.enabled=true \
--set indexNode.enabled=false
次のステップ:上記のコマンドは、推奨構成でMilvusをデプロイします。本番用には
- Milvus Sizing Toolを使用して、データサイズに基づいた設定を最適化します。
- 高度な設定オプションについては、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 ChartおよびHelmドキュメントを参照してください。
2.Milvusクラスタのステータスの確認
ポッドのステータスを確認して、デプロイが成功したことを確認します:
kubectl get pods
すべてのPodが "Running "ステータスになるのを待ちます。v2.6.16の構成では、以下のようなポッドが表示されるはずです:
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コンポーネント:
mixcoorddatanode,querynode,proxy、streaming-node - 依存関係:
etcd(メタデータ),minio(オブジェクトストレージ),pulsar(メッセージキュー)
また、ポートフォワーディングが設定されると、Milvus WebUI(http://127.0.0.1:9091/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設定の更新
Milvusクラスタの設定を更新するには、values.yaml ファイルを編集し、再度適用します。
必要なコンフィギュレーションを含む
values.yamlファイルを作成します。以下では、
proxy.httpを有効にすることを前提としています。extraConfigFiles: user.yaml: |+ proxy: http: enabled: true該当する構成項目については、「システム構成」を参照してください。
values.yamlファイルを適用します。
helm upgrade my-release zilliztech/milvus --namespace my-namespace -f values.yaml
更新された構成を確認する。
helm get values my-release更新されたコンフィギュレーションが出力されるはずです。
Milvus WebUIへのアクセス
MilvusにはMilvus WebUIと呼ばれるGUIツールが組み込まれており、ブラウザからアクセスすることができます。Milvus WebUIは、シンプルで直感的なインターフェースにより、システムの観測性を向上させます。Milvus Web UIを使用することで、Milvusのコンポーネントや依存関係の統計やメトリクスの観察、データベースやコレクションの詳細の確認、Milvusの詳細な設定の一覧などを行うことができます。Milvus Web UIの詳細については、Milvus WebUIを参照してください。
Milvus Web UIへのアクセスを有効にするには、プロキシポッドをローカルポートにポートフォワードする必要があります。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091
これで、Milvus Web UI にhttp://localhost:27018 からアクセスできるようになります。
オフラインインストール
ネットワークが制限されている環境では、このセクションの手順に従って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のコンフィギュレーションを変更するには、Milvusテンプレートをダウンロードし、必要な設定をそのテンプレートに配置します。
value.yamlテンプレートをダウンロードし、必要な設定をそのテンプレートに配置し、helm template -f values.yaml my-release zilliztech/milvus > milvus_manifest.yamlを使用して、それに従ってマニフェストをレンダリングします。
2.image-pulling スクリプトのダウンロード
画像抽出スクリプトは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をインストールしました:
Hello MilvusでMilvusの機能を確認する。
Milvusの基本操作を学ぶ:
Milvusクラスターをクラウド上にデプロイする:
Milvusの観測と管理のための直感的なWebインターフェースであるMilvus WebUIをご覧ください。
MilvusデータバックアップのためのオープンソースツールであるMilvus Backupをご紹介します。
Milvusのデバッグとダイナミックなコンフィギュレーション更新のためのオープンソースツール、Birdwatcherをご覧ください。
Milvusを直感的に管理するオープンソースのGUIツールAttuをご紹介します。