KubernetesでHelmを使ってMilvusを起動する

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

概要

Helmはチャートと呼ばれるパッケージングフォーマットを使用します。チャートとは、Kubernetesリソースの関連するセットを記述したファイルのコレクションです。Milvusは、Milvusの依存関係やコンポーネントをデプロイするのに役立つチャートのセットを提供します。

前提条件

  • Helm CLIをインストールする。

  • 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をデプロイします。本番用には

重要な注意事項

  • リリースの命名:アルファベット、数字、ダッシュのみ使用(ドットは使用不可)
  • 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コンポーネントmixcoord datanode,querynode,proxystreaming-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 ファイルを編集し、再度適用します。

  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 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をインストールしました: