1.4.2. CPU 使用率のための Horizontal Pod Autoscaler の作成
指定する CPU 使用率を維持するために、オブジェクトに関連付けられた Pod を自動的にスケーリングする既存の DeploymentConfig または ReplicationController オブジェクトについて Horizontal Pod Autoscaler (HPA) を作成できます。
HPA は、すべての Pod で指定された CPU 使用率を維持するために、最小数と最大数の間でレプリカ数を増減します。
CPU 使用率について自動スケーリングを行う際に、oc autoscale コマンドを使用し、実行する必要のある Pod の最小数および最大数と Pod がターゲットとして設定する必要のある平均 CPU 使用率を指定することができます。最小値を指定しない場合、Pod には OpenShift Container Platform サーバーからのデフォルト値が付与されます。特定の CPU 値について自動スケーリングを行うには、ターゲット CPU および Pod の制限のある HorizontalPodAutoscaler オブジェクトを作成します。
前提条件
Horizontal Pod Autoscaler を使用するには、クラスターの管理者はクラスターメトリクスを適切に設定している必要があります。メトリクスが設定されているかどうかは、oc describe PodMetrics <pod-name> コマンドを使用して判断できます。メトリクスが設定されている場合、出力は以下の Usage の下にある Cpu と Memory のように表示されます。
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
出力例
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Namespace: openshift-kube-scheduler
Labels: <none>
Annotations: <none>
API Version: metrics.k8s.io/v1beta1
Containers:
Name: wait-for-host-port
Usage:
Memory: 0
Name: scheduler
Usage:
Cpu: 8m
Memory: 45440Ki
Kind: PodMetrics
Metadata:
Creation Timestamp: 2019-05-23T18:47:56Z
Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Timestamp: 2019-05-23T18:47:56Z
Window: 1m0s
Events: <none>
手順
CPU 使用率のための Horizontal Pod Autoscaler を作成するには、以下を実行します。
以下のいずれかの手順を実行します。
CPU 使用率のパーセントに基づいてスケーリングするには、既存の
DeploymentConfigオブジェクトのHorizontalPodAutoscalerオブジェクトを作成します。$ oc autoscale dc/<dc-name> \1 --min <number> \2 --max <number> \3 --cpu-percent=<percent> 4
CPU 使用率のパーセントに基づいてスケーリングするには、既存のレプリケーションコントローラーの
HorizontalPodAutoscalerオブジェクトを作成します。$ oc autoscale rc/<rc-name> 1 --min <number> \2 --max <number> \3 --cpu-percent=<percent> 4
特定の CPU 値についてスケーリングするには、既存の
DeploymentConfigオブジェクトまたはレプリケーションコントローラーについて以下のような YAML ファイルを作成します。以下のような YAML ファイルを作成します。
apiVersion: autoscaling/v2beta2 1 kind: HorizontalPodAutoscaler metadata: name: cpu-autoscale 2 namespace: default spec: scaleTargetRef: apiVersion: v1 3 kind: ReplicationController 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Resource resource: name: cpu 9 target: type: AverageValue 10 averageValue: 500m 11
- 1
autoscaling/v2beta2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
レプリケーションコントローラーについては、
v1を使用します。 -
DeploymentConfigオブジェクトについては、apps.openshift.io/v1を使用します。
-
レプリケーションコントローラーについては、
- 4
- スケーリングするオブジェクトの種類 (
ReplicationControllerまたはDeploymentConfigのいずれか) を指定します。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用率に
metricsパラメーターを使用します。 - 9
- CPU 使用率に
cpuを指定します。 - 10
AverageValueに設定します。- 11
- ターゲットに設定された CPU 値で
averageValueに設定します。
Horizontal Pod Autoscaler を作成します。
$ oc create -f <file-name>.yaml
Horizontal Pod Autoscaler が作成されていることを確認します。
$ oc get hpa cpu-autoscale
出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale ReplicationController/example 173m/500m 1 10 1 20m
以下のコマンドは、image-registry DeploymentConfig オブジェクトが制御する Pod の 3 から 7 までのレプリカを維持し、すべての Pod で 75% の平均 CPU 使用率を維持する Horizontal Pod Autoscaler を作成します。
$ oc autoscale dc/image-registry --min 3 --max 7 --cpu-percent=75
出力例
deploymentconfig "image-registry" autoscaled
このコマンドは、以下の定義で Horizontal Pod Autoscaler を作成します。
$ oc edit hpa frontend -n openshift-image-registry
出力例
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: "2020-02-21T20:19:28Z"
name: image-registry
namespace: default
resourceVersion: "32452"
selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/frontend
uid: 1a934a22-925d-431e-813a-d00461ad7521
spec:
maxReplicas: 7
minReplicas: 3
scaleTargetRef:
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
name: image-registry
targetCPUUtilizationPercentage: 75
status:
currentReplicas: 5
desiredReplicas: 0
以下の例は、image-registry DeploymentConfig オブジェクトの自動スケーリングを示しています。最初のデプロイメントでは 3 つの Pod が必要です。HPA オブジェクトは最小で 5 まで増加され、Pod 上の CPU 使用率が 75% に達すると、Pod を最大 7 まで増やします。
image-registryデプロイメントの現在の状態を表示します。$ oc get dc image-registry
出力例
NAME REVISION DESIRED CURRENT TRIGGERED BY image-registry 1 3 3 config
image-registryDeploymentConfigオブジェクトの自動スケーリングを実行します。$ oc autoscale dc/image-registry --min=5 --max=7 --cpu-percent=75
出力例
horizontalpodautoscaler.autoscaling/image-registry autoscaled
デプロイメントの新しい状態を表示します。
$ oc get dc image-registry
デプロイメントには 5 つの Pod があります。
出力例
NAME REVISION DESIRED CURRENT TRIGGERED BY image-registry 1 5 5 config