Container Service for Kubernetes は、AHPA (Advanced Horizontal Pod Autoscaler) をサポートしています。AHPA は、過去のメトリクスから学習して将来のリソース需要を予測し、Pod のレプリカを動的に調整します。トラフィックのピーク前にスケールアップと事前ウォームアップを行い、応答性と安定性を向上させ、トラフィックが少ない時間帯にはスケールダウンしてコストを削減します。
前提条件
ACK マネージドクラスターまたはACK サーバーレスクラスターが作成されていること。詳細については、「ACK マネージドクラスターの作成」または「クラスターの作成」をご参照ください。
Managed Service for Prometheus (Prometheus) が有効化されており、CPU やメモリ使用量などのアプリケーションの履歴データが少なくとも 7 日分あること。詳細については、「Prometheus へのアクセスと設定」をご参照ください。
手順1:AHPA コントローラーのインストール
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
アドオン管理 ページで、AHPA コントローラーを見つけて インストール をクリックします。プロンプトに従います。
手順2:Prometheus データソースの設定
にログインします。 ARMSコンソールを使用します。
左側のナビゲーションウィンドウで、.
インスタンス ページでリージョンを選択し、ACK クラスターと同じ名前のインスタンスをクリックします。
設定 ページの HTTP API アドレス (Grafana 読み取りアドレス) セクションで、以下を控えておきます。
(オプション) トークンベースの認証が有効な場合は、アクセストークン。
インターネット エンドポイント (Prometheus URL)。
ACK クラスターに Prometheus のクエリ URL を設定します。
次の内容で
application-intelligence.yamlを作成します。prometheusUrl:Prometheus エンドポイント。token:Prometheus のアクセストークン。
apiVersion: v1 kind: ConfigMap metadata: name: application-intelligence namespace: kube-system data: prometheusUrl: "http://cn-hangzhou-intranet.arms.aliyuncs.com:9443/api/v1/prometheus/da9d7dece901db4c9fc7f5b9c40****/158120454317****/cc6df477a982145d986e3f79c985a****/cn-hangzhou" token: "eyJhxxxxx"説明Prometheus で AHPA ダッシュボードを表示するには、この ConfigMap で以下のフィールドも設定します。
prometheus_writer_url: Remote Write の内部エンドポイント。prometheus_writer_ak: Alibaba Cloud アカウントの AccessKey ID。prometheus_writer_sk: Alibaba Cloud アカウントの AccessKey Secret。
詳細については、「AHPA の Prometheus ダッシュボードの有効化」をご参照ください。
application-intelligenceをデプロイします。kubectl apply -f application-intelligence.yaml
手順3:テストサービスのデプロイ
テストサービスには、Deployment fib-deployment、Service fib-svc、およびトラフィックをシミュレートするロードジェネレーター fib-loader が含まれます。HPA は、AHPA と比較するためのベースラインを提供します。
次の内容で demo.yaml を作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-deployment
namespace: default
annotations:
k8s.aliyun.com/eci-use-specs: "1-2Gi"
spec:
replicas: 1
selector:
matchLabels:
app: fib-deployment
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-deployment
spec:
containers:
- image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-server:20200820-171837
imagePullPolicy: IfNotPresent
name: user-container
ports:
- containerPort: 8080
name: user-port
protocol: TCP
resources:
limits:
cpu: "1"
memory: 2000Mi
requests:
cpu: "1"
memory: 2000Mi
---
apiVersion: v1
kind: Service
metadata:
name: fib-svc
namespace: default
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
app: fib-deployment
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fib-loader
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: fib-loader
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: fib-loader
spec:
containers:
- args:
- -c
- |
/ko-app/fib-loader --service-url="http://fib-svc.${NAMESPACE}?size=35&interval=0" --save-path=/tmp/fib-loader-chart.html
command:
- sh
env:
- name: NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
imagePullPolicy: IfNotPresent
name: loader
ports:
- containerPort: 8090
name: chart
protocol: TCP
resources:
limits:
cpu: "8"
memory: 16000Mi
requests:
cpu: "2"
memory: 4000Mi
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: fib-hpa
namespace: default
spec:
maxReplicas: 50
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: fib-deployment
targetCPUUtilizationPercentage: 50
---手順4:AHPA のデプロイ
スケーリングポリシーを設定するには、AdvancedHorizontalPodAutoscaler リソースを作成します。
次の内容で
ahpa-demo.yamlを作成します。apiVersion: autoscaling.alibabacloud.com/v1beta1 kind: AdvancedHorizontalPodAutoscaler metadata: name: ahpa-demo spec: scaleStrategy: observer metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 40 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fib-deployment maxReplicas: 100 minReplicas: 2 stabilizationWindowSeconds: 300 prediction: quantile: 95 scaleUpForward: 180 instanceBounds: - startTime: "2021-12-16 00:00:00" endTime: "2031-12-16 00:00:00" bounds: - cron: "* 0-8 ? * MON-FRI" maxReplicas: 15 minReplicas: 4 - cron: "* 9-15 ? * MON-FRI" maxReplicas: 15 minReplicas: 10 - cron: "* 16-23 ? * MON-FRI" maxReplicas: 20 minReplicas: 15選択されたパラメーター。
パラメーター
必須
説明
scaleTargetRef
はい
ターゲットの Deployment。
metrics
はい
スケーリングメトリクス。サポートされているメトリクスには、CPU、GPU、メモリ、QPS、RT があります。
target
はい
ターゲットのしきい値。たとえば、
averageUtilization: 40は CPU 使用率 40% をターゲットにします。scaleStrategy
いいえ
スケーリングモード。デフォルト:
observer。auto: AHPA がスケーリングを実行します。observer: AHPA はスケーリングを行わず、監視します。AHPA の動作を検証するために使用します。proactive:プロアクティブな予測のみが有効になります。reactive:リアクティブなスケーリングのみが有効になります。
maxReplicas
はい
最大レプリカ数。
minReplicas
はい
最小レプリカ数。
stabilizationWindowSeconds
いいえ
安定化ウィンドウ。レプリカ数の急激な変動を防ぎます。デフォルト: 300 秒。
prediction.quantile
いいえ
予測分位数 (0~100)。値が大きいほど、予測はより保守的になります。推奨値:90~99。デフォルト: 99。
prediction.scaleUpForward
はい
新しい Pod が
Ready状態になるまでの時間。コールドスタート時間とも呼ばれます。instanceBounds
いいえ
特定の期間におけるレプリカ数の境界。
startTime:開始時刻。endTime:終了時刻。
instanceBounds.bounds.cron
いいえ
スケジュールされたタスクの cron 式。たとえば、
- cron: "* 0-8 ? * MON-FRI"は、月曜日から金曜日の 00:00 から 08:59 まで毎分実行されます。cron 式のフィールド。詳細については、「Cron スケジュールタスク」をご参照ください。
フィールド
必須
許容値
特殊文字
分
はい
0–59
* / , -
時
はい
0–23
* / , -
日 (月)
はい
1–31
* / , - ?
月
はい
1–12 または JAN–DEC
* / , -
曜日
はい
0–6 または SUN–SAT
* / , - ?
説明月と曜日は大文字と小文字を区別しません。たとえば、
SUN、Sun、sunは等価です。曜日が指定されていない場合、デフォルトは
*です。特殊文字:
*: すべての値に一致します。/: 増分を指定します。,: 列挙値を区切ります。-: 範囲を指定します。?: 指定なし。日または曜日で、もう一方が設定されている場合に使用します。
AHPA スケーリングポリシーを作成します。
kubectl apply -f ahpa-demo.yaml
手順5:予測結果の表示
AHPA の Prometheus ダッシュボードを有効化して、予測結果を表示します。
予測には 7 日間の履歴データが必要です。サンプルアプリケーションを 7 日間実行するか、AHPA リソースで既存の本番アプリケーションを指定してください。
この例では、observer スケーリングモード (observer モード) を使用して、AHPA の予測と、HPA をベースラインとする実際のリソース需要を比較します。

実際の CPU 使用率と予測 CPU 使用率:緑色の線:実際の CPU 使用率 (HPA)。黄色の線:AHPA が予測した CPU 使用率。
黄色が緑色の上にある:予測されたキャパシティが十分であることを示します。
黄色が緑色より先に上昇している:AHPA が需要に先駆けてリソースを事前ウォームアップしていることを示します。
Pod の推移:緑色の線:実際の Pod 数 (HPA)。黄色の線:AHPA が予測した Pod 数。
黄色の曲線が低い: AHPA がより少ない Pod で同じ目標を達成していることを示します。
黄色の曲線が滑らか: AHPA のスケーリングは変動がより少なく、安定性が向上していることを示します。
予測された傾向が期待どおりであれば、スケーリングモードを auto に設定し、AHPA にスケーリングを管理させます。
関連ドキュメント
詳細については、「GPU メトリクスに基づく AHPA 予測スケーリングの設定」をご参照ください。
詳細については、「AHPA の Prometheus ダッシュボードの有効化」をご参照ください。