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デプロイメントスタックを管理して、スケーラビリティと高可用性を確保することができます。
1.cert-managerのインストール
Milvus Operatorは、cert-managerを使用してWebhookサーバー用の証明書を提供します。
- Helmを使用してMilvus Operatorをデプロイする場合は、この手順を省略できます。
- Milvus Operatorにはcert-manager 1.1.3以上が必要です。
次のコマンドを実行して cert-manager をインストールします。
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
インストールプロセスが終了すると、次のような出力が表示されます。
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
namespace/cert-manager created
serviceaccount/cert-manager-cainjector created
...
service/cert-manager created
service/cert-manager-webhook created
deployment.apps/cert-manager-cainjector created
deployment.apps/cert-manager created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
cert-managerポッドが稼働しているかどうかは、以下の手順で確認できます:
$ kubectl get pods -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-848f547974-gccz8 1/1 Running 0 70s
cert-manager-cainjector-54f4cc6b5-dpj84 1/1 Running 0 70s
cert-manager-webhook-7c9588c76-tqncn 1/1 Running 0 70s
2.Milvus Operator のインストール
Milvus Operatorは以下のいずれかの方法でインストールできます:
Helmによるインストール
以下のコマンドを実行して、HelmでMilvus Operatorをインストールします。
$ helm install milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.0.1/milvus-operator-1.0.1.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
kubectlによるインストール
以下のコマンドを実行して、Milvus Operatorをkubectl
でインストールします。
$ 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
certificate.cert-manager.io/milvus-operator-serving-cert created
issuer.cert-manager.io/milvus-operator-selfsigned-issuer created
mutatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-mutating-webhook-configuration created
validatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-validating-webhook-configuration created
Milvus OperatorのPodが起動しているかどうかは以下のように確認できます:
$ 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_default.yaml
上記のコマンドは、デフォルトの設定を使用して、コンポーネントと依存関係を別々のポッドに入れたMilvusクラスタをデプロイします。これらの設定をカスタマイズするには、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: "2021-11-02T05:59:41Z"
reason: StorageReady
status: "True"
type: StorageReady
- lastTransitionTime: "2021-11-02T06:06:23Z"
message: Pulsar is ready
reason: PulsarReady
status: "True"
type: PulsarReady
- lastTransitionTime: "2021-11-02T05:59:41Z"
message: Etcd endpoints is healthy
reason: EtcdReady
status: "True"
type: EtcdReady
- lastTransitionTime: "2021-11-02T06:12:36Z"
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 14m
my-release-etcd-1 1/1 Running 0 14m
my-release-etcd-2 1/1 Running 0 14m
my-release-milvus-datanode-5c686bd65-wxtmf 1/1 Running 0 6m
my-release-milvus-indexnode-5b9787b54-xclbx 1/1 Running 0 6m
my-release-milvus-proxy-84f67cdb7f-pg6wf 1/1 Running 0 6m
my-release-milvus-querynode-5bcb59f6-nhqqw 1/1 Running 0 6m
my-release-milvus-mixcoord-fdcccfc84-9964g 1/1 Running 0 6m
my-release-minio-0 1/1 Running 0 14m
my-release-minio-1 1/1 Running 0 14m
my-release-minio-2 1/1 Running 0 14m
my-release-minio-3 1/1 Running 0 14m
my-release-pulsar-bookie-0 1/1 Running 0 14m
my-release-pulsar-bookie-1 1/1 Running 0 14m
my-release-pulsar-bookie-init-h6tfz 0/1 Completed 0 14m
my-release-pulsar-broker-0 1/1 Running 0 14m
my-release-pulsar-broker-1 1/1 Running 0 14m
my-release-pulsar-proxy-0 1/1 Running 0 14m
my-release-pulsar-proxy-1 1/1 Running 0 14m
my-release-pulsar-pulsar-init-d2t56 0/1 Completed 0 14m
my-release-pulsar-recovery-0 1/1 Running 0 14m
my-release-pulsar-toolset-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-1 1/1 Running 0 13m
my-release-pulsar-zookeeper-2 1/1 Running 0 13m
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クラスタをアンインストールします。
$ 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.0.1/deploy/manifests/deployment.yaml
次のステップ
DockerにMilvusをインストールしました:
Hello MilvusでMilvusができることを確認する。
Milvusの基本操作を学ぶ:
Milvuクラスタをクラウドにデプロイする:
MilvusのデータバックアップのためのオープンソースツールであるMilvus Backupをご紹介します。
Milvusのデバッグとダイナミックコンフィギュレーションアップデートのためのオープンソースツール、Birdwatcherのご紹介。
Milvusを直感的に管理するオープンソースのGUIツールAttuをご紹介します。