Milvus Operator を使用したメッセージストレージの設定
Milvus 3.x では、Woodpecker がデフォルトのメッセージキューとして使用されます(Woodpecker を参照)。Milvus Operator を使用すると、RocksMQ、Pulsar、または Kafka を設定して、最近の変更のログ管理、ストリームログの出力、およびログのサブスクリプションを提供することもできます。 このトピックでは、Milvus Operator を使用して Milvus をインストールする際に、メッセージストレージの依存関係を設定する方法について説明します。詳細については、Milvus Operator リポジトリの「Milvus Operator を使用したメッセージストレージの設定」を参照してください。
このトピックでは、Milvus Operator がすでにデプロイされていることを前提としています。
Milvus Operator を使用して Milvus クラスタを起動するには、設定ファイルを指定する必要があります。
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
サードパーティの依存関係を設定するには、milvus_cluster_default.yaml 内のコードテンプレートを編集するだけで済みます。以下のセクションでは、オブジェクトストレージ、etcd、および Pulsar の設定方法をそれぞれ紹介します。
開始する前に
以下の表は、Milvus のスタンドアロンモードおよびクラスタモードにおいて、RocksMQ、Pulsar、Kafka、Woodpecker がサポートされているかどうかを示しています。
| RocksMQ | Pulsar | Kafka | Woodpecker | |
|---|---|---|---|---|
| スタンドアロンモード | ✔️ | ✔️ | ✔️ | ✔️ |
| クラスターモード | ✖️ | ✔️ | ✔️ | ✔️ |
メッセージストレージの指定に関しては、他にも以下の制限があります:
- 1つのMilvusインスタンスにつき、1つのメッセージストレージのみがサポートされています。ただし、1つのインスタンスに複数のメッセージストレージが設定されていた場合についても、下位互換性は維持されています。優先順位は以下の通りです:
- スタンドアロンモード:Woodpecker(デフォルト) > RocksMQ > Pulsar > Kafka
- クラスタモード:Woodpecker(デフォルト) > Pulsar > Kafka
- Milvus システムの稼働中は、メッセージストアを変更することはできません。
- Kafka 2.x または 3.x バージョンのみがサポートされています。
- アップグレードに関する制限事項:メッセージキューに関する制限事項:Milvus v3.0.1 へのアップグレード時には、現在のメッセージキューの選択を維持する必要があります。アップグレード中に異なるメッセージキューシステム間での切り替えはサポートされていません。メッセージキューシステムの変更機能は、将来のバージョンで提供される予定です。
RocksMQ の設定
RocksMQ は、2.5.x までの Milvus スタンドアロンにおけるデフォルトのメッセージストレージでした(2.6.x からは Woodpecker に置き換えられました)。
現在、Milvus Operator を使用する場合にのみ、Milvus スタンドアロンのメッセージストアとして RocksMQ を設定できます。
例
以下の例は、RocksMQ サービスを設定するものです。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: milvus
spec:
mode: standalone
dependencies:
msgStreamType: rocksmq
rocksmq:
persistence:
enabled: true
pvcDeletion: true
persistentVolumeClaim:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "local-path" # Specify your storage class
resources:
requests:
storage: 10Gi # Specify your desired storage size
components: {}
config: {}
主な設定オプション:
msgStreamType: rocksmq: RocksMQをメッセージキューとして明示的に設定しますpersistence.enabled: RocksMQ データの永続ストレージを有効にしますpersistence.pvcDeletion: true の場合、Milvus インスタンスが削除されると PVC も削除されますpersistentVolumeClaim.spec: 標準のKubernetes PVC仕様accessModes: ブロックストレージの場合は通常、ReadWriteOncestorageClassName: クラスタのストレージクラスstorage: 永続ボリュームのサイズ
Woodpecker の設定
Woodpeckerは、オブジェクトストレージ向けに設計されたクラウドネイティブなWrite-Ahead Log(WAL)です。高いスループット、低い運用オーバーヘッド、シームレスなスケーラビリティを提供します。詳細については、「Woodpecker」を参照してください。
Pulsar の設定
Pulsarは、最近の変更のログを管理し、ストリームログを出力し、ログのサブスクリプションを提供します。メッセージストレージとしてのPulsarの設定は、MilvusスタンドアロンおよびMilvusクラスターの両方でサポートされています。ただし、Milvus Operatorを使用する場合、Pulsarをメッセージストレージとして設定できるのはMilvusクラスターのみです。Pulsarを設定するには、「spec.dependencies.pulsar 」の下に必要なフィールドを追加してください。
pulsar external および をサポートしています。inCluster
外部Pulsar
external は、外部のPulsarサービスの使用を示します。
外部のPulsarサービスを設定するために使用されるフィールドには、以下のものがあります:
external:trueに値が設定されている場合、Milvus は外部の Pulsar サービスを使用することを示します。endpoints: Pulsar のエンドポイント。
例
以下の例は、外部Pulsarサービスを設定するものです。
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies: # Optional
pulsar: # Optional
# Whether (=true) to use an existed external pulsar as specified in the field endpoints or
# (=false) create a new pulsar inside the same kubernetes cluster for milvus.
external: true # Optional default=false
# The external pulsar endpoints if external=true
endpoints:
- 192.168.1.1:6650
components: {}
config: {}
内部Pulsar
inCluster は、Milvus クラスタの起動時に、Pulsar サービスがクラスタ内で自動的に起動することを示します。
例
次の例は、内部 Pulsar サービスを設定するものです。
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
pulsar:
inCluster:
values:
components:
autorecovery: false
zookeeper:
replicaCount: 1
bookkeeper:
replicaCount: 1
resoureces:
limit:
cpu: '4'
memory: 8Gi
requests:
cpu: 200m
memory: 512Mi
broker:
replicaCount: 1
configData:
## Enable `autoSkipNonRecoverableData` since bookkeeper is running
## without persistence
autoSkipNonRecoverableData: "true"
managedLedgerDefaultEnsembleSize: "1"
managedLedgerDefaultWriteQuorum: "1"
managedLedgerDefaultAckQuorum: "1"
proxy:
replicaCount: 1
components: {}
config: {}
pulsar.inCluster.values の下に必要に応じて設定項目を追加してください。設定ファイルの名前がmilvuscluster.yaml であると仮定して、次のコマンドを実行し、設定を適用します。
kubectl apply -f milvuscluster.yaml
Kafka の設定
2.5.x までは、Pulsar が Milvus クラスタのデフォルトのメッセージストレージでした(2.6.x からは Woodpecker に置き換えられました)。Kafka を使用する場合は、オプションフィールドmsgStreamType を追加して Kafka を設定してください。
kafka external および をサポートしています。inCluster
外部Kafka
external は、外部のKafkaサービスを使用することを示します。
外部Kafkaサービスを設定するために使用されるフィールドは次のとおりです:
external:trueの値は、Milvus が外部 Kafka サービスを使用することを示します。brokerList: メッセージを送信するブローカーのリスト。
例
以下の例は、外部Kafkaサービスを設定するものです。
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
kafka:
# securityProtocol supports: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL
securityProtocol: PLAINTEXT
# saslMechanisms supports: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
saslMechanisms: PLAIN
saslUsername: ""
saslPassword: ""
# Omit other fields ...
dependencies:
# Omit other fields ...
msgStreamType: "kafka"
kafka:
external: true
brokerList:
- "kafkaBrokerAddr1:9092"
- "kafkaBrokerAddr2:9092"
# ...
SASLの設定は、operator v0.8.5以降のバージョンでサポートされています。
内部 Kafka
inCluster は、Milvus クラスタの起動時に、そのクラスタ内で Kafka サービスが自動的に起動することを示しています。
例
以下の例は、内部 Kafka サービスを設定するものです。
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
msgStreamType: "kafka"
kafka:
inCluster:
values: {} # values can be found in https://artifacthub.io/packages/helm/bitnami/kafka
components: {}
config: {}
内部Kafkaサービスを設定するための完全な設定項目については、こちらをご覧ください。必要に応じて、kafka.inCluster.values の下に設定項目を追加してください。
設定ファイルの名前をmilvuscluster.yaml とする場合、以下のコマンドを実行して設定を適用します。
kubectl apply -f milvuscluster.yaml
次の手順
Milvus Operator を使用して他の Milvus 依存関係を設定する方法については、以下をご覧ください: