本文の内容は、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というメトリクスを作成します。そして、このメトリクスを使ってエスカレーションのトリガーとします。