Milvusの水平ポッドオートスケーリング(HPA)の設定
概要
Horizontal Pod Autoscaling (HPA)はKubernetesの機能で、CPUやメモリなどのリソースの使用状況に基づいてデプロイメント内のPodの数を自動的に調整します。Milvusでは、proxy,queryNode,dataNode,indexNode のようなステートレスコンポーネントにHPAを適用することで、ワークロードの変化に応じてクラスタを動的にスケールさせることができます。
このガイドでは、Milvus Operatorを使用してMilvusコンポーネントにHPAを設定する方法を説明します。
前提条件
- Milvus Operatorを使用してデプロイされた稼働中のMilvusクラスタ。
- Kubernetesリソースを管理するための
kubectlへのアクセス。 - MilvusアーキテクチャとKubernetes HPAに精通していること。
Milvus Operatorを使用したHPAの設定
Milvus Operatorで管理するMilvusクラスタでHPAを有効にするには、以下の手順に従います:
Replicasを-1に設定します:
Milvusカスタムリソース(CR)で、HPAでスケーリングしたいコンポーネントの
replicasフィールドを-1に設定します。こ れに よ り 、 オペレー タ ではなく HPA にスケー リ ン グ制御が委譲 さ れます。CR を直接編集す る か、 以下のkubectl patchコ マ ン ド を使用す る こ と で、 HPA コ ン ト ロ ー ルへ迅速に切 り 替え る こ と がで き ます:kubectl patch milvus <your-release-name> --type='json' -p='[{"op": "replace", "path": "/spec/components/proxy/replicas", "value": -1}]'<your-release-name>をMilvusクラスタ名に置き換えてください。変更が適用されたことを確認するには、次のコマンドを実行します:
kubectl get milvus <your-release-name> -o jsonpath='{.spec.components.proxy.replicas}'-1proxyコ ン ポーネ ン ト が HPA 制御下にあ る こ と を確認で き ます。または、CR YAMLで定義することもできます:
apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: <your-release-name> spec: mode: cluster components: proxy: replicas: -1HPAリソースを定義します:
HPA リソースを定義: 目的のコンポーネントのデプロイメントをターゲットとする HPA リソースを作成します。以下は
proxyコンポーネントの例です:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: my-release-milvus-proxy-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-release-milvus-proxy minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 60 behavior: scaleUp: policies: - type: Pods value: 1 periodSeconds: 30 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Pods value: 1 periodSeconds: 60metadata.nameおよびspec.scaleTargetRef.nameのmy-releaseを、実際の Milvus クラスタ名 (例:<your-release-name>-milvus-proxy-hpaおよび<your-release-name>-milvus-proxy) に置き換えてください。HPA構成を適用します:
以下のコマンドを使用してHPAリソースをデプロイします:
kubectl apply -f hpa.yamlHPAが正常に作成されたことを確認するには、以下のコマンドを実行します:
kubectl get hpaの よ う な出力が表示 さ れ る はずです:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-release-milvus-proxy-hpa Deployment/my-release-milvus-proxy <some>/60% 2 10 2 <time>NAMEおよびREFERENCEフィールドには、 クラスタ名が反映されます(例:<your-release-name>-milvus-proxy-hpaおよびDeployment/<your-release-name>-milvus-proxy)。
scaleTargetRef:スケーリングする配置を指定します(たとえば、my-release-milvus-proxy)。minReplicasおよび : スケーリング範囲を設定します(この例では 2~10 Pods)。maxReplicasmetrics:CPU とメモリの使用率に基づいてスケーリングを設定し、平均使用率 60% を目標にします。
結論
HPAを利用することで、Milvusは様々なワークロードに効率的に適応することができます。kubectl patch コマンドを使用することで、CR全体を手動で編集することなく、コンポーネントを素早くHPA制御に切り替えることができます。詳細については、Kubernetes HPAのドキュメントを参照してください。