Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
第26章 Pod の自動スケーリング
26.1. 概要
HorizontalPodAutoscaler
オブジェクトで定義される Horizontal Pod Autoscaler は、レプリケーションコントローラーに属する Pod から収集されるメトリクスまたはデプロイメント設定に基づいて、システムがレプリケーションコントローラーまたはデプロイメント設定のスケールの増減を自動的に設定する方法を指定します。
26.2. Horizontal Pod Autoscaler の要件
Horizontal Pod Autoscaler を使用するには、クラスター管理者は「クラスターメトリクスを適切に設定」している必要があります。
26.3. サポートされるメトリクス
以下のメトリクスは Horizontal Pod Autoscaler でサポートされています。
表26.1 メトリクス
メトリクス | 説明 | API バージョン |
---|---|---|
CPU の使用率 |
要求される CPU のパーセンテージ |
|
メモリーの使用率 |
要求されるメモリーの割合 |
|
26.4. 自動スケーリング
oc autoscale
コマンドを使用して Horizontal Pod Autoscaler を作成し、実行する Pod の最小数および最大数を指定すると共に Pod がターゲットとして設定すべき「CPU の使用率」または「メモリーの使用率」を指定することができます。
メモリー使用率の自動スケーリングはテクノロジープレビュー機能のみとして提供されています。
Horizontal Pod Autoscaler の作成後に、これは Heapster で Pod のメトリクスのクエリーを試行します。Heapster が初期メトリクスを取得するまでに 1 分から 2 分の時間がかかる場合があります。
メトリクスが Heapster で利用可能になると、Horizontal Pod Autoscaler は必要なメトリクスの使用率に対する現在のメトリクスの使用率の割合を計算し、随時スケールアップまたはスケールダウンを実行します。スケーリングは一定間隔で実行されますが、メトリクスが Heapster に移されるまでに 1 分から 2 分の時間がかかる場合があります。
レプリケーションコントローラーの場合、このスケーリングはレプリケーションコントローラーのレプリカに直接対応します。デプロイメント設定の場合、スケーリングはデプロイメント設定のレプリカ数に直接対応します。自動スケーリングは Complete
フェーズの最新デプロイメントにのみ適用されることに注意してください。
OpenShift Container Platform はリソースに自動的に対応し、起動時などのリソースの使用が急増した場合など必要のない自動スケーリングを防ぎます。unready
状態の Pod には、スケールアップ時の使用率が 0 CPU
と指定され、Autoscaler はスケールダウン時にはこれらの Pod を無視します。既知のメトリクスのない Pod にはスケールアップ時の使用率が 0% CPU
、スケールダウン時に 100% CPU
となります。これにより、HPA の決定時に安定性が増します。この機能を使用するには、readiness チェックを設定して新規 Pod が使用可能であるかどうかを判別します。
26.5. CPU 使用率の自動スケーリング
oc autoscale
コマンドを使用して、少なくとも指定される時間に実行する Pod の最大数を指定します。オプションとして Pod の最小数と Pod がターゲットとする平均の CPU 使用率を指定できます。指定しない場合は、OpenShift Container Platform サーバーからのデフォルト値がそれらに指定されます。
以下に例を示します。
$ oc autoscale dc/frontend --min 1 --max 10 --cpu-percent=80 deploymentconfig "frontend" autoscaled
上記の例では、Horizontal Pod Autoscaler の autoscaling/v1
を使用して以下の定義で Horizontal Pod Autoscaler をする作成方法を示しています。
例26.1 Horizontal Pod Autoscaler オブジェクト定義
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: frontend 1 spec: scaleTargetRef: kind: DeploymentConfig 2 name: frontend 3 apiVersion: apps/v1 4 subresource: scale minReplicas: 1 5 maxReplicas: 10 6 cpuUtilization: targetCPUUtilizationPercentage: 80 7
または、Horizontal Pod Autoscaler の v2beta1
バージョンを使用して、oc autoscale
コマンドにより、以下の定義で Horizontal Pod Autoscaler をする作成方法を示しています。
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-cpu 1 spec: scaleTargetRef: apiVersion: apps/v1 2 kind: ReplicationController 3 name: hello-hpa-cpu 4 minReplicas: 1 5 maxReplicas: 10 6 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 7
26.6. メモリー使用率の自動スケーリング
メモリー使用率の自動スケーリングはテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポートについての詳細は、https://access.redhat.com/support/offerings/techpreview/ を参照してください。
CPU ベースの自動スケーリングとは異なり、メモリーベースの自動スケーリングでは、oc autoscale
コマンドの代わりに YAML を使用してAutoscaler を指定することが必要です。オプションとして、Pod の最小数および Pod がターゲットとする必要のある平均のメモリー使用率を指定できます。これらを指定しない場合は、OpenShift Container Platform サーバーからのデフォルト値がこれらに指定されます。
メモリーベースの自動スケーリングは、自動スケーリング API の
v2beta1
バージョンでのみ利用できます。以下をクラスターのmaster-config.yaml
ファイルに追加してメモリーベースの自動スケーリングを有効にします。... apiServerArguments: runtime-config: - apis/autoscaling/v2beta1=true ...
以下を
hpa.yaml
などのファイルに置きます。apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory 1 spec: scaleTargetRef: apiVersion: apps/v1 2 kind: ReplicationController 3 name: hello-hpa-memory 4 minReplicas: 1 5 maxReplicas: 10 6 metrics: - type: Resource resource: name: memory targetAverageUtilization: 50 7
次に上記のファイルから Autoscaler を作成します。
$ oc create -f hpa.yaml
メモリーベースの自動スケーリングを機能させるには、メモリー使用量がレプリカ数と比例して増減する必要があります。平均的には以下のようになります。
- レプリカ数が増えると、Pod ごとのメモリー (作業セット) の使用量が全体的に減少します。
- レプリカ数が減ると、Pod ごとのメモリー使用量が全体的に増加します。
OpenShift web コンソールを使用して、アプリケーションのメモリー動作を確認し、メモリーベースの自動スケーリングを使用する前にアプリケーションがそれらの要件を満たしていることを確認します。
26.7. Horizontal Pod Autoscaler の表示
Horizontal Pod Autoscaler のステータスを表示するには、以下を実行します。
oc get
コマンドを使用して CPU 使用率および Pod 制限の情報を表示します。$ oc get hpa/hpa-resource-metrics-cpu NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE hpa-resource-metrics-cpu DeploymentConfig/default/frontend/scale 80% 79% 1 10 8d
出力には以下が含まれます。
- Target: デプロイメント設定で制御されるすべての Pod でターゲットに設定された平均 CPU 使用率です。
- Current: デプロイメント設定で制御されるすべての Pod における現在の CPU 使用率です。
- Minpods/Maxpods: Autoscaler で設定できるレプリカの最小数および最大数です。
Horizontal Pod Autoscaler オブジェクトの詳細情報を参照するには
oc describe
コマンドを使用します。$ oc describe hpa/hpa-resource-metrics-cpu Name: hpa-resource-metrics-cpu Namespace: default Labels: <none> CreationTimestamp: Mon, 26 Oct 2015 21:13:47 -0400 Reference: DeploymentConfig/default/frontend/scale Target CPU utilization: 80% 1 Current CPU utilization: 79% 2 Min replicas: 1 3 Max replicas: 4 4 ReplicationController pods: 1 current / 1 desired Conditions: 5 Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_requests ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range Events:
26.7.1. Horizontal Pod Autoscaler の状況条件の表示
状況条件セットを使用して、Horizontal Pod Autoscaler がスケーリングできるかどうかや、現時点でこれがいずれかの方法で制限されているかどうかを判別できます。
Horizontal Pod Autoscaler の状況条件は、自動スケーリング API の v2beta1
バージョンで利用できます。
kubernetesMasterConfig: ... apiServerArguments: runtime-config: - apis/autoscaling/v2beta1=true
以下の状況条件が設定されます。
AbleToScale
は Horizontal Pod Autoscaler がスケールをフェッチし、更新できるかどうかや、いずれかのバックオフ条件がスケーリングを防いでいないかどうかを示します。-
True
条件はスケーリングが許可されることを示します。 -
False
条件は指定される理由によりスケーリングが許可されないことを示します。
-
ScalingActive
は Horizontal Pod Autoscaler が有効にされており (ターゲットのレプリカ数がゼロでない)、必要なメトリクス (scale) を計算できるかどうかを示します。-
True
条件はメトリクスが適切に機能していることを示します。 -
False
条件は通常フェッチするメトリクスに関する問題を示します。
-
ScalingLimited
は、レプリカの最大または最小数に達したために自動スケーリングが許可されないことを示します。-
True
条件は、スケーリングするためにレプリカの最小または最大数を引き上げるか、または引き下げる必要があることを示します。 -
False
条件は、要求されたスケーリングが許可されることを示します。
-
この行を追加または編集する必要がある場合には、OpenShift Container Platform サービスを再起動します。
# master-restart api # master-restart controllers
Horizontal Pod Autoscaler に影響を与える条件を表示するには、oc describe hpa
を使用します。条件は status.conditions
フィールドに表示されます。
$ oc describe hpa cm-test
Name: cm-test
Namespace: prom
Labels: <none>
Annotations: <none>
CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000
Reference: ReplicationController/cm-test
Metrics: ( current / target )
"http_requests" on pods: 66m / 500m
Min replicas: 1
Max replicas: 4
ReplicationController pods: 1 current / 1 desired
Conditions: 1
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
Events:
- 1
- Horizontal Pod Autoscaler の状況メッセージです。
-
AbleToScale
条件では、HPA がスケールを取得して更新できるか、またバックオフ関連の条件によりスケーリングを防止できるかどうかを指定します。 -
ScalingActive
の条件は、HPA を有効にするか (たとえば、ターゲットのレプリカ数は 0 でないなど)、任意のスケーリングを計算できるかどうかを指定します。「False」の状態は通常、メトリクスの取得に問題があることを示します。 -
ScalingLimited
の条件は、任意のスケーリングが Horiontal Pod Autoscaler の最大値または最小値で制限されていることを示します。「False」の状態は通常、Horizontal Pod Autoscaler で最小または最大レプリカ数の制限を増減する必要があります。
-
以下は、スケーリングできない Pod の例です。
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale False FailedGetScale the HPA controller was unable to get the target's current scale: replicationcontrollers/scale.extensions "hello-hpa-cpu" not found
以下は、スケーリングに必要なメトリクスを取得できなかった Pod の例です。
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from heapster
以下は、要求される自動スケーリングが要求される最小数よりも小さい場合の Pod の例です。
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range Events: