Kubernetes上でのモニタリングサービスのデプロイ

このトピックでは、Prometheusを使用してKubernetes上のMilvusクラスタに監視サービスをデプロイする方法について説明します。

Prometheusでメトリクスを監視する

メトリクスは、システムの実行状態に関する情報を提供する指標です。例えば、メトリクスを使用すると、Milvusのデータノードで消費されるメモリやCPUリソースの量を把握できます。Milvusクラスタ内のコンポーネントのパフォーマンスとステータスを把握することで、十分な情報を得ることができるため、より適切な意思決定を行い、よりタイムリーにリソースの割り当てを調整することができます。

一般的に、メトリクスはPrometheusのような時系列データベース(TSDB)に保存され、タイムスタンプとともに記録されます。Milvusのサービスを監視する場合、Prometheusを使用して、エクスポータによって設定されたエンドポイントからデータを引き出すことができます。その後、Prometheusは各Milvusコンポーネントのメトリクスをhttp://<component-host>:9091/metrics

しかし、1つのコンポーネントに対して複数のレプリカが存在する場合があり、Prometheusの手動設定が複雑になりすぎます。そこで、Kubernetesの拡張機能であるPrometheus Operatorを使用することで、Prometheusモニタリングインスタンスを自動化し、効率的に管理することができます。Prometheus Operatorを使用すると、メトリックターゲットとサービスプロバイダーを手動で追加する手間が省けます。

ServiceMonitorカスタムリソース定義(CRD)を使用すると、動的なサービスセットを監視する方法を宣言的に定義できます。また、ラベル選択を使用して、必要な構成で監視するサービスを選択できます。Prometheus Operatorを使用すると、メトリクスを公開する方法を指定する規約を導入できます。新しいサービスは、手動で再設定することなく、設定した規約に従って自動的に検出されます。

次の図は、Prometheus のワークフローを表しています。

Prometheus_architecture Prometheus_architecture

前提条件

このチュートリアルでは、kube-prometheusを使用して、各監視およびアラートコンポーネントのインストールと手動設定の手間を省きます。

Kube-prometheusは、Kubernetesマニフェスト、Grafanaダッシュボード、およびドキュメントとスクリプトを組み合わせたPrometheusルールを収集します。

監視サービスをデプロイする前に、kube-prometheus manifestsディレクトリ内の設定を使用して監視スタックを作成する必要があります。

$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ cd kube-prometheus
$ kubectl apply --server-side -f manifests/setup
$ kubectl wait \
        --for condition=Established \
        --all CustomResourceDefinition \
        --namespace=monitoring
$ kubectl apply -f manifests/
デフォルトのprometheus-k8s clusterroleではmilvusのメトリクスを取得できないため、パッチを適用する必要があります:
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'

スタックを削除するには、kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup を実行します。

Kubernetesに監視サービスをデプロイする

1.ダッシュボードにアクセスする

Prometheus サービスをポート9090 に、Grafana サービスをポート3000 に転送する。

$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000

2.ServiceMonitorを有効にする

Milvus Helmでは、デフォルトではServiceMonitorは有効になっていません。KubernetesクラスタにPrometheus Operatorをインストールした後、パラメータmetrics.serviceMonitor.enabled=true を追加することで有効にできます。

Helmの場合

Milvus Helm chartをインストールしている場合、以下のようにパラメータmetrics.serviceMonitor.enabled=true を設定することでServiceMonitorを有効にすることができます。

```
$ helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values
```

インストールが完了したら、kubectl を使用して ServiceMonitor リソースを確認します。

Milvus Operatorの場合

Milvus Operatorを使用してMilvusをインストールした場合、以下の手順でServiceMonitorを有効にすることができます。

  1. 以下のコマンドを実行し、Milvusカスタムリソースを編集します。以下のコマンドは、カスタムリソースの名前がmy-release であると仮定しています。

    $ kubectl edit milvus my-release
    
  2. spec.components.disableMetric フィールドをfalse に編集する。

    ...
    spec:
      components:
        disableMetric: false # set to true to disable metrics
    ...
    
  3. 保存してエディタを終了します。

  4. オペレータが変更を照合するのを待つ。以下のコマンドを実行することで、Milvusカスタムリソースのステータスを確認することができます。

    $ kubectl get milvus my-release -o yaml
    

status.components.metrics.serviceMonitor.enabled フィールドをtrue にする。

3.メトリクスの確認

ServiceMonitor を有効にした後、http://localhost:9090/ から Prometheus ダッシュボードにアクセスできます。

Status タブをクリックし、次にTargets をクリックする。Milvusコンポーネントのターゲットが表示されます。

Prometheus_targets Prometheus_targets

Graph タブをクリックし、式入力ボックスに式up{job="default/my-release"} を入力します。Milvusコンポーネントのメトリクスが表示されます。

Prometheus_graph Prometheus_graph

4.ServiceMonitorを確認する

$ kubectl get servicemonitor
NAME                           AGE
my-release-milvus              54s

次のステップ