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

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

概要

Milvus Operatorは、Kubernetes (K8s)クラスタへのMilvusサービススタックのデプロイと管理を支援するソリューションです。このスタックには、すべてのMilvusコンポーネントと、etcd、Pulsar、MinIOなどの関連する依存関係が含まれます。

前提条件

  • 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 Operatorのインストール

Milvus OperatorはKubernetes Custom Resourcesの上にMilvusクラスタのカスタムリソースを定義します。カスタムリソースが定義されると、宣言的な方法でK8s APIを使用し、Milvusデプロイメントスタックを管理してスケーラビリティと高可用性を確保することができます。

以下のコマンドを実行して、Milvus OperatorをHelmでインストールします。

$ helm install milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

インストールプロセスが終了すると、以下のような出力が表示されます。

NAME: milvus-operator
LAST DEPLOYED: Thu Jul  7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD

Milvus Operatorをインストール済みの場合は、以下のコマンドでアップグレードしてください:

helm upgrade milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

以下のコマンドを実行し、Milvus Operator withkubectl をインストールしてください。

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml

インストール終了後、以下のような出力が表示されます。

namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created

Milvus Operatorポッドが稼働しているかどうかは、以下のようにして確認することができます:

$ kubectl get pods -n milvus-operator

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-5fd77b87dc-msrk4   1/1     Running   0          46s

Milvusをデプロイする。

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

Milvus Operatorポッドが起動したら、次のようにMilvusクラスタをデプロイできます。

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

上記のコマンドは、メッセージキューとしてWoodpecker(v2.6.15で推奨)、Streaming Nodeを含むすべての新しいアーキテクチャコンポーネントを備えたMilvusクラスタをデプロイします。

このデプロイにおけるアーキテクチャのハイライト

  • メッセージキューWoodpeckerを使用(インフラメンテナンスの軽減)
  • ストリーミング・ノード:データ処理の強化
  • ミックス・コーディネーター:コーディネータコンポーネントの統合による効率化

これらの設定をカスタマイズするには、Milvus Sizing Toolを使用して実際のデータサイズに基づいて設定を調整し、対応するYAMLファイルをダウンロードすることをお勧めします。コンフィギュレーションパラメータの詳細については、Milvusシステムコンフィギュレーションチェックリストをご参照ください。

  • リリース名にはアルファベット、数字、ダッシュのみを使用してください。リリース名にはドットは使用できません。
  • Milvusインスタンスをスタンドアロンモードでデプロイすることもできます。そのためには、上記コマンドの設定ファイルURLを次のように変更してください。https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

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

以下のコマンドを実行してMilvusクラスタのステータスを確認します。

$ kubectl get milvus my-release -o yaml

Milvusクラスタの準備ができたら、上記コマンドの出力は以下のようになるはずです。status.status フィールドがUnhealthy のままであれば、Milvusクラスタはまだ作成中です。

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
  conditions:
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    reason: StorageReady
    status: "True"
    type: StorageReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Pulsar is ready
    reason: PulsarReady
    status: "True"
    type: PulsarReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Etcd endpoints is healthy
    reason: EtcdReady
    status: "True"
    type: EtcdReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: All Milvus components are healthy
    reason: MilvusClusterHealthy
    status: "True"
    type: MilvusReady
  endpoint: my-release-milvus.default:19530
  status: Healthy

Milvus Operatorは、etcd、Pulsar、MinIOなどのMilvus依存関係を作成し、プロキシ、コーディネータ、ノードなどのMilvusコンポーネントを作成します。

Milvusクラスタの準備ができたら、Milvusクラスタ内のすべてのPodのステータスは以下のようになるはずです。

$ kubectl get pods

NAME                                             READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                1/1     Running   0          2m36s
my-release-etcd-1                                1/1     Running   0          2m36s
my-release-etcd-2                                1/1     Running   0          2m36s
my-release-milvus-datanode-58955c65b9-j4j7s      1/1     Running   0          92s
my-release-milvus-mixcoord-686f84968f-jcv5d      1/1     Running   0          92s
my-release-milvus-proxy-646f48fc7c-4lctb         1/1     Running   0          92s
my-release-milvus-querynode-0-d89d7677b-x7j7q    1/1     Running   0          91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1     Running   0          92s
my-release-minio-0                               1/1     Running   0          2m36s
my-release-minio-1                               1/1     Running   0          2m36s
my-release-minio-2                               1/1     Running   0          2m35s
my-release-minio-3                               1/1     Running   0          2m35s

3.ローカルポートをMilvusに転送する

以下のコマンドを実行して、Milvusクラスタがサービスを提供しているポートを取得します。

$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

出力は、Milvusインスタンスがデフォルトのポート19530でサービスを提供していることを示しています。

Milvusをスタンドアロンモードでデプロイしている場合、ポッド名をmy-release-milvus-proxy-xxxxxxxxxx-xxxxx からmy-release-milvus-xxxxxxxxxx-xxxxx に変更します。

次に、以下のコマンドを実行して、ローカルポートをMilvusがサービスを提供するポートに転送します。

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

オプションとして、上記のコマンドで27017:19530 の代わりに:19530 を使用し、kubectl にローカルポートを割り当てさせることで、ポートの競合を管理する必要がなくなります。

デフォルトでは、kubectlのポートフォワーディングはlocalhost のみをリッスンします。Milvusに選択したIPアドレスまたはすべてのIPアドレスをリッスンさせたい場合は、address フラグを使用してください。以下のコマンドは、port-forwardをホストマシンのすべてのIPアドレスでリッスンするようにします。

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

これで、転送されたポートを使用してMilvusに接続できるようになります。

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

以下のようにpatch コマンドを呼び出すことで、Milvusクラスタの設定を表示および更新することができます:

  1. 以下のコマンドを実行して、コンフィギュレーションをプレビューします。

    以下は、spec.components.disableMetric パラメータをfalse msに更新することを想定しています。

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' \
      --dry-run=client -o yaml
    

    該当する構成項目については、「システム構成」を参照してください。

  2. 設定を更新します。

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' 
    

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のアンインストール

以下のコマンドを実行して、Milvusクラスタをアンインストールします。

$ kubectl delete milvus my-release
  • デフォルトの設定でMilvusクラスタを削除した場合、etcd、Pulsar、MinIOなどの依存関係は削除されません。そのため、次回同じMilvusクラスタインスタンスをインストールすると、これらの依存関係が再び使用されます。
  • Milvusクラスタとともに依存関係および永続ボリュームクレーム(PVC)を削除するには、設定ファイルを参照してください。

Milvus Operatorのアンインストール

Milvus Operatorをアンインストールするには2つの方法があります。

Helmによるアンインストール

$ helm -n milvus-operator uninstall milvus-operator

kubectlでアンインストール

$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.0/deploy/manifests/deployment.yaml

次のステップ

DockerにMilvusをインストールしました: