シナリオによっては、HTTP リクエストのクエリ/秒 (QPS) やメッセージキューの長さなど、カスタムメトリックに基づいてアプリケーションをスケーリングする必要があります。Autoscaling Horizontal Pod Autoscaler (AHPA) は、alibaba-cloud-metrics-adapter コンポーネントと連携できる External Metrics メカニズムを提供し、カスタムメトリックに基づいてアプリケーションをスケーリングできるようにします。
前提条件
手順 1: 準備
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[デプロイメント] ページで、[YAML から作成] をクリックします。次に、以下の YAML コンテンツをコピーして、sample-app という名前のデプロイメント、サービス、およびストレステスト用の 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)] セクションで、[内部ネットワーク] の右側のエンドポイントを記録します。
オプション。アクセストークンが有効になっている場合は、クラスターのアクセストークンを設定し、アクセストークンを記録する必要があります。
[内部ネットワーク] の右側の HTTP API エンドポイントを記録します。

ack-alibaba-cloud-metrics-adapter をデプロイします。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
アプリカタログ タブで、[ack-alibaba-cloud-metrics-adapter] を見つけてクリックします。次に、ページの右上隅にある [デプロイ] をクリックします。
[基本情報] ウィザードページで、[クラスター] と [名前空間] を指定し、[次へ] をクリックします。
[パラメーター] ウィザードページで、[チャートバージョン] を指定します。[パラメーター] セクションで、記録した 内部 HTTP API エンドポイント に基づいて
prometheus.urlとprometheus.prometheusHeaderを設定し、[OK] をクリックします。prometheus: enabled: true # 内部 HTTP API エンドポイント (Managed Service for Prometheus の URL) を入力します。 url: http://cn-beijing-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/6b4b40986a3bec4f92ea418534****/115964845466****/arms-metrics-6fae216078e4****/cn-beijing # Managed Service for Prometheus でアクセストークンが有効になっている場合は、prometheusHeader Authorization を設定する必要があります。 prometheusHeader: - Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjIwMDc1MTY0MDksImlzcyI6Imh0dHA6******liYWJhY2xvdWQuY29tIiwiaWF0IjoxNjkyMTU2NDA5LCJqdGkiOiI3NmRkOWJkOS0zYzBkLTRjY2MtOTFkYy1lZTU1OGFkNjg3NmMifQ.gltEJ7g4j-QPao2durNk3OiEBYhv2F_nzG-cncVfFtY
カスタムメトリックを設定します。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
コンテナー名アクション[alibaba-cloud-metrics-adapter] の 列の [更新] をクリックします。
次の YAML コンテンツをコピーして、エディターのコードを上書きします。次のサンプルコードの
requests_per_secondを、Managed Service for Prometheus で使用されている実際のメトリックに置き換える必要があります。次に、[OK] をクリックします。...... prometheus: adapter: rules: custom: - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) name: as: requests_per_second resources: overrides: namespace: resource: namespace seriesQuery: requests_per_second # Managed Service for Prometheus で使用されているメトリックの名前を指定します。 default: false enabled: true # 値を true に設定して、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 7h53mKubernetes でより高い精度が必要な場合は、m または k 単位が使用されます。たとえば、この例では 1001m は 1.001、60000m は 60 に相当します。出力は、1 秒あたりのリクエスト数が 60 であり、しきい値 10 を超えていることを示しています。必要なポッド数 (
DESIREDPODS) は 6 です。