1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShiftにMilvusを立てた備忘録

Posted at

概要

ベクトルDBのMilvusをRed Hat OpenShift (OCP)に立てようとして、思いがけず苦労したので備忘録として残しておきます。元々はオンプレミスのIBM watsonxでRAGの検証をしようと思った際に、検証用なので小さい構成のMilvusを同居させたかったという動機でした。

前置き

OCPにアプリを追加インストールしインスタンスを立てる場合はOperatorを利用することが多いと思いますが、Milvus Operatorの公式を見るとHelmでのインストールの方が簡単そうでしたので、今回はHelmを使った方法を選びました。以下の手順は基本的にこちらに沿ったものです。OCPは4.14を使用しました。また、OCPにはMilvusのデータを格納するためのストレージが必要なので、NFSやODFなどのストレージクラスをセットアップしておく必要があります。

手順

まず、前提準備としてOCPを操作するBastion環境(ocコマンドが使えるLinuxなど)を用意しておきます。

  • ocコマンド
  • Helmコマンド

  • OCPにログイン
oc login --username=${OCP_USERNAME} --password=${OCP_PASSWORD} --server=${OCP_URL}
  • プロジェクトの作成と切り替え
oc create namespace milvus
oc project milvus
  • Helm repoの登録
helm repo add zilliztech https://zilliztech.github.io/milvus-helm/
helm repo update
  • HelmでMilvusをインストール
helm install my-release zilliztech/milvus

するとこのような出力が見られます。

NAME: my-release
LAST DEPLOYED: Sat Feb 15 05:52:25 2025
NAMESPACE: milvus
STATUS: deployed
REVISION: 1
TEST SUITE: None

少し待つと、Podが起動してくるはずなのですが・・・ここで実際にはそうならずに、エラーが出て待ち状態になっていました。OCPコンソールに入り、StatefulSetsに移ると、my-release-etcdなどの3つほどのStatefulSetsでPodができない状態になっている(0/3)ことがわかります。
image.png
そのmy-release-etcdのイベントタブで見ると、どうやら権限エラーになっている模様。
image.png

create Pod my-release-etcd-0 in StatefulSet my-release-etcd failed error: pods "my-release-etcd-0" is forbidden: ....

あまりOCPに詳しくないために、この問題に対処するのに時間がかかってしまいましたが、最終的に次のようなコマンドを実行すれば、このエラーが解消できました。

oc create serviceaccount milvus
oc adm policy add-scc-to-user anyuid -z milvus
oc set serviceaccount statefulsets/my-release-etcd milvus
oc set serviceaccount statefulsets/my-release-pulsarv3-zookeeper milvus
oc set serviceaccount statefulsets/my-release-pulsarv3-bookie milvus

最終的に、必要となるPodがすべて立ち上がりました。
image.png

使ってみる

さて、Serviceのmy-release-milvusを見ると、ポートとして19530と9091を開いていることがわかります。19530はMilvus、9091はWebUIのポートです。
image.png

まずPythonを使ってMilvusに接続するために、BastionからOCP上のMilvusサービスへのネットワーク経路を開いておきます。

oc port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530

するとポートフォワードの待機状態になるので、クライアントPCからBastionの27017ポートに接続すれば、そこからOCP上のMilvusにつながります。以下はPythonで接続してみた例です。

from pymilvus import MilvusClient

milvus_host="Bastionのホスト名またはIPアドレス"
milvus_port="27017"

client = MilvusClient(
    uri="http://"+milvus_host+":"+milvus_port
)

print(client.list_aliases())

client.create_collection(
    collection_name="demo_collection",
    dimension=768,  # The vectors we will use in this demo has 768 dimensions
)

print(client.list_collections())

同様に、MilvusのWebUIを使うには、9091をBastionでポートフォワードします。

oc port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091

すると、クライアントPCからWebUIを使うことができます。

http://(Bastionのホスト名またはIPアドレス):27018/webui/

image.png
Pythonで作成したcollectionが見えていますね!

まとめ

OpenShiftでMilvusを立てることができましたが、思わぬところで引っかかりました。ひょっとすると2025/2時点での不具合なのかもしれませんが、同じところでハマった方の助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?