< back to blog

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

清水 孝郎
SysdigのメトリクスでKubernetes HPAをトリガーする
Published by:
清水 孝郎
@
SysdigのメトリクスでKubernetes HPAをトリガーする
Published:
October 7, 2021
シスディグによるファルコフィード

Falco Feedsは、オープンソースに焦点を当てた企業に、新しい脅威が発見されると継続的に更新される専門家が作成したルールにアクセスできるようにすることで、Falcoの力を拡大します。

さらに詳しく

本文の内容は、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の導入がいかに簡単であるかを学びました。アカウントをお持ちでない方は、 今すぐ無料トライアルにサインアップしてください!

About the author

Monitoring
Sysdig Features

セキュリティの専門家と一緒に、クラウド防御の最適な方法を探索しよう