SysdigのメトリクスでKubernetes HPAをトリガーする

By 清水 孝郎 - OCTOBER 7, 2021

SHARE:

本文の内容は、2021年10月7日にJesus Ángel Samitierが投稿したブログ(https://sysdig.com/blog/hpa-keda-sysdig/)を元に日本語に翻訳・再構成した内容となっております。

この記事では、Sysdig Monitorのメトリクスを使用するKubernetes Horizontal Pod Autoscaler (HPA)をデプロイするためにKedaを設定する方法を例を通じて学んでいきます。

Kedaは、Prometheusクエリーを使用してKubernetesポッドをスケールすることができるオープンソースプロジェクトです。
PrometheusのメトリクスでKubernetes HPAをトリガーする」では、Kedaをインストールして設定し、標準的なPrometheusクエリーでトリガーされるKubernetes HPAを作成する方法を学びました。

ここからは、SysdigのマネージドPrometheusソリューションを利用して、メトリクスにKubernetesやアプリケーションのコンテキストを自動的に反映させていきます。

Sysdig MonitorはPrometheusのクエリー(PromQL)と完全に互換性があり、安全なPrometheusのエンドポイントを有しています。そして、Keda PrometheusトリガーのServerAddressとして設定することもできます。


シナリオ

クラスター上にNginxのデプロイメントがあります。Nginx exporter の nginx_connections_waiting メトリクスに基づいて、1~5個のレプリカを作成します。500以上の接続待ちがある場合は、新しいポッドをスケジュールします。

KedaとSysdigでHPAを起動するためのクエリーを作成してみましょう。

sum((nginx_connections_waiting{kube_cluster_name="demo-env-prom", kube_namespace_name="keda-hpa", kube_workload_name="nginx-server"})

簡単でしょう?このクエリーは、demo-env-prom クラスター、keda-hpa ネームスペース、nginx-server ワークロードの nginx_connections_waiting メトリクス値の合計を返すだけです。

認証の管理

Sysdig API Tokenを使ったシークレットを作成するだけです。

kubectl create secret generic keda-prom-secret --from-literal=bearerToken=<API_KEY> -n keda

そして、TriggerAuthentication オブジェクトを作成します。

apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
 name: keda-prom-creds
spec:
 secretTargetRef:
 - parameter: bearerToken
   name: keda-prom-secr

最後に、ScaledObjectを作成して適用します。

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
 name: nginx-scale
 namespace: keda-hpa
spec:
 scaleTargetRef:
   kind: Deployment
   name: nginx-server
 minReplicaCount: 1
 maxReplicaCount: 5
 cooldownPeriod: 30
 pollingInterval: 1
 triggers:
 - type: prometheus
   metadata:
     serverAddress: https://app.sysdigcloud.com/prometheus
     metricName: nginx_connections_waiting_keda
     query: |
      sum((nginx_connections_waiting{kube_cluster_name="demo-env-prom", kube_namespace_name="keda-hpa", kube_workload_name="nginx-server"})
     threshold: "20"
     authModes: "bearer"
   authenticationRef:
     name: keda-prom-creds

metricNameパラメーターに注目してください。これは、クエリーからの値を受け取るために設定したカスタム名です。Kedaはクエリーの結果を取得し、それを元にnginx_connections_waiting_kedaというメトリクスを作成します。そして、このメトリクスを使ってエスカレーションのトリガーとします。

めちゃ簡単ですよね

この記事では、Sysdig MonitorのメトリクスをトリガーとしたKedaによるHPAの導入がいかに簡単であるかを学びました。アカウントをお持ちでない方は、 今すぐ無料トライアルにサインアップしてください!