Prometheus、AlermanagerによるKubernetes自動伸縮
2507 ワード
これまでKubernetesはcpu使用率ベースの水平pod自動伸縮サポートには良好だったが,カスタムmetricsによるHPAサポートが不十分で使い勝手も悪かった.
以下に、任意のカスタムmetricsをサポートするPrometheusおよびAlertmanagerに基づいてKubernetes Pod自動伸縮を実現するスキームを紹介する.考え方は簡単です.Prometheusが必要な性能指標(例えば、現在のリンクの同時数、現在のcpuの使用率など)を収集し、定義されたアラームルールに基づいてアラームイベントを生成し、アラームイベントをAlertmanagerに渡し、alertmanagerがwebhookをトリガーして最終的なpod伸縮機能を実現します.下図に示すように、
PrometheusのAlert rulesの構成例:
上記のルールは、適用されるアクティブなタスク数が30分以上続く場合、過剰なタスク数に対応するために新しいpodを作成する必要があることを示しています.しかし、ここでは水平Pod自動伸縮機能は直接トリガーされず、prometheusはアラームルールに基づいてアラームイベントを生成し、このイベントをalertmanagerに渡し、alertmanagerによってアラームをどのように処理するかを決定します.
Alertmanagerの構成例:
Alertmanagerは、対応するアラートを受信すると、取得した具体的なmetics値(ここでmetric nameは
Webhook Pythonスクリプトの例:
ここでは,k 8 s apiを具体的に呼び出してpod伸縮を実現する論理を省略した.Alertmanagerはすべての情報をjson形式postでカスタマイズしたスクリプトを提供してくれました.具体的にどのように処理するかは、ビジネスのニーズ次第です.
以下に、任意のカスタムmetricsをサポートするPrometheusおよびAlertmanagerに基づいてKubernetes Pod自動伸縮を実現するスキームを紹介する.考え方は簡単です.Prometheusが必要な性能指標(例えば、現在のリンクの同時数、現在のcpuの使用率など)を収集し、定義されたアラームルールに基づいてアラームイベントを生成し、アラームイベントをAlertmanagerに渡し、alertmanagerがwebhookをトリガーして最終的なpod伸縮機能を実現します.下図に示すように、
PrometheusのAlert rulesの構成例:
ALERT HpaTrigger
IF app_active_task_count > 30
FOR 30m
LABELS {serverity = "page",trigger="hpa",action = "scale-out",value = "{{$value}}", deployment="test", namespace = "{{$labels.namespace}}"}
ANNOTATIONS {
summary = "Instance {{$labels.namespace}}: scale-out",
description = "{{$labels.namespace}} auto scale-out"
}
上記のルールは、適用されるアクティブなタスク数が30分以上続く場合、過剰なタスク数に対応するために新しいpodを作成する必要があることを示しています.しかし、ここでは水平Pod自動伸縮機能は直接トリガーされず、prometheusはアラームルールに基づいてアラームイベントを生成し、このイベントをalertmanagerに渡し、alertmanagerによってアラームをどのように処理するかを決定します.
Alertmanagerの構成例:
global:
route:
receiver: 'email' # , email
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- receiver: 'auto-hpa' # trigger=hpa auto-hpa
match:
trigger: hpa
receivers:
- name: 'email'
email_configs:
- to: [email protected]
from: [email protected]
smarthost: smtpserver:port
auth_username: "username"
auth_identity: "username"
auth_password: "password"
require_tls: true
- name: "auto-hpa"
webhook_configs:
- url: 'http://YOUR_WEBHOOK_IP:PORT/hpa' # webhook url 。
send_resolved: true
Alertmanagerは、対応するアラートを受信すると、取得した具体的なmetics値(ここでmetric nameは
app_active_task_count
)と、アラートルールで定義されたLABELS
情報とをjsonデータに統合し、POSTで定義したwebhook urlに送信します.Webhook Pythonスクリプトの例:
from flask import Flask,request
import json
app = Flask(__name__)
@app.route("/hpa",methods=["POST"])
def hpa():
content = request.get_json()
# content , , k8s api pod
#.......
#.......
print content
if __name__ == "__main__":
app.run("0.0.0.0")
ここでは,k 8 s apiを具体的に呼び出してpod伸縮を実現する論理を省略した.Alertmanagerはすべての情報をjson形式postでカスタマイズしたスクリプトを提供してくれました.具体的にどのように処理するかは、ビジネスのニーズ次第です.