一部のシナリオでは、HTTPリクエストのQPSやメッセージキューの長さなど、カスタムメトリックに基づいてアプリケーションをスケーリングする必要がある場合があります。 Autosaling Horizontal Pod Autoscaler (AHPA) は、alibaba-cloud-Metrics-adapterコンポーネントと連携して、カスタムメトリクスに基づいてアプリケーションをスケーリングできる外部メトリクスメカニズムを提供します。 このトピックでは、AHPAを使用してアプリケーションスケーリングのカスタムメトリックを設定する方法について説明します。
前提条件
ACKマネージドクラスターまたはACKサーバーレスクラスターが作成されます。 詳細については、「ACKマネージドクラスターの作成」および「ACKサーバーレスクラスターの作成」をご参照ください。
ステップ1: 準備
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページで、右上隅の [YAMLから作成] をクリックします。
[作成] ページで、次のYAMLコンテンツをコピーして、ストレステスト用のサンプルアプリ、サービス、fib-loader-qpsという名前のデプロイを作成し、[作成] をクリックします。
説明1秒あたりのリクエスト数を示すカスタムメトリックrequests_per_secondが収集されます。
[作成] ページで、次のYAMLコンテンツをコピーしてServiceMonitorを作成し、[作成] をクリックします。
ServiceMonitorを有効にします。
ARMSコンソール にログインします。
左側のナビゲーションウィンドウで、を選択します。
上部のナビゲーションバーで、Prometheusインスタンスがデプロイされているリージョンを選択し、ACKクラスターの名前と同じインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、[サービスの検出] をクリックします。 右側の [設定] タブをクリックし、[ServiceMonitor] タブをクリックします。
sample-appの [操作] 列のスイッチをオンにします。
手順2: ack-alibaba-cloud-metrics-adapterのデプロイ
Prometheusインスタンスの内部HTTP APIエンドポイントを取得します。
ARMSコンソールにログインします。
左側のナビゲーションウィンドウで、を選択します。
[インスタンス] ページの上部のナビゲーションバーで、Prometheusインスタンスがデプロイされているリージョンを選択し、インスタンスの名前をクリックします。 Prometheusインスタンスの名前は、arms_metrics_{RegionId}_XXX形式です。
左側のナビゲーションウィンドウで、[設定] をクリックします。 [HTTP API URL (Grafana Read URL)] セクションで、Internal Networkの右側にエンドポイントを記録します。
オプションです。 アクセストークンが有効になっている場合は、クラスターのアクセストークンを設定し、そのアクセストークンを記録する必要があります。
Internal Networkの右側にHTTP APIエンドポイントを記録します。
ack-alibaba-cloud-metrics-adapterをデプロイします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[アプリカタログ] タブで、[ack-alibaba-cloud-metrics-adapter] を見つけてクリックします。
ack-alibaba-cloud-metrics-adapterページの右上隅で、[デプロイ] をクリックします。
On the基本情報ウィザードページ,クラスターと名前空間をクリックし、次へ.
[パラメーター] ウィザードページで、[グラフバージョン] を指定します。 記録した内部HTTP APIエンドポイントに基づいて、[パラメーター] セクションで
prometheus.url
とprometheus.prometheusHeader
を設定し、[OK] をクリックします。prometheus: enabled: true # Enter the internal HTTP API endpoint, which is the URL of Managed Service for Prometheus. url: http://cn-beijing-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/6b4b40986a3bec4f92ea418534****/115964845466****/arms-metrics-6fae216078e4****/cn-beijing # If access tokens are enabled for Managed Service for Prometheus, you need to configure prometheusHeader Authorization. prometheusHeader: - Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjIwMDc1MTY0MDksImlzcyI6Imh0dHA6******liYWJhY2xvdWQuY29tIiwiaWF0IjoxNjkyMTU2NDA5LCJqdGkiOiI3NmRkOWJkOS0zYzBkLTRjY2MtOTFkYy1lZTU1OGFkNjg3NmMifQ.gltEJ7g4j-QPao2durNk3OiEBYhv2F_nzG-cncVfFtY
カスタムメトリックを設定します。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
alibaba-cloud-metrics-adapterの [操作] 列で [更新] をクリックします。
次のYAMLコンテンツをコピーして、エディターのコードを上書きします。 次のサンプルコードの
requests_per_second
を、Prometheusのマネージドサービスで使用される実際のメトリックに置き換える必要があります。 [OK] をクリックします。...... prometheus: adapter: rules: custom: - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) name: as: requests_per_second resources: overrides: namespace: resource: namespace seriesQuery: requests_per_second # Specify the name of the metric that is used in Managed Service for Prometheus. default: false enabled: true # Set the value to true to enable ack-alibaba-cloud-metrics-adapter. ......
次のコマンドを実行して、メトリックに関する詳細情報を照会します。
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/requests_per_second" {"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"requests_per_second","metricLabels":{},"timestamp":"2023-08-15T07:59:09Z","value":"10"}]}
ステップ3: AHPAのデプロイ
次のAHPAリソースを作成します。
external.metric
を設定して、メトリック名とmatchLabelsを指定します。 メトリック名は、[カスタムメトリックの設定] で指定したメトリック名と同じである必要があります。 この例では、requests_per_secondメトリックが指定されています。しきい値を設定します。 この例では、AverageValueは10に設定されています。 1秒あたりのリクエスト数が10を超えると、アプリケーションはスケールアウトされます。
次のコマンドを実行して、スケーリング結果を照会します。
custom-metric % kubectl get ahpa NAME STRATEGY REFERENCE METRIC TARGETS DESIREDPODS REPLICAS MINPODS MAXPODS AGE customer-deployment observer Deployment/sample-app requests_per_second 60000m/10 6 1 1 50 7h53m
mまたはk単位は、Kubernetesがより高い精度を必要とする場合に使用されます。 例えば、この例では、1001mは1.001に等しく、60000mは60に等しい。 出力は、1秒あたりのリクエスト数が60であり、しきい値10を超えていることを示します。 予想されるポッド数 (DESIREDPODS) は6です。