2.4.6.4. 特定のメモリー使用のための Horizontal Pod Autoscaler オブジェクトの作成
OpenShift Container Platform CLI を使用すると、既存のオブジェクトを自動的にスケーリングする Horizontal Pod Autoscaler (HPA) を作成できます。HPA は、指定した平均メモリー使用量を維持するために、そのオブジェクトに関連付けられた Pod をスケーリングします。
他のオブジェクトによって提供される特定の機能または動作が必要でない限り、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用します。
Pod の最小数と最大数、および Pod がターゲットとする平均メモリー使用量を指定できます。最小値を指定しない場合、Pod には OpenShift Container Platform サーバーからのデフォルト値が付与されます。
前提条件
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>
手順
既存のオブジェクトに対して、次のような
HorizontalPodAutoscalerオブジェクトを作成します。apiVersion: autoscaling/v21 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory2 namespace: default spec: scaleTargetRef: apiVersion: apps/v13 kind: Deployment4 name: example5 minReplicas: 16 maxReplicas: 107 metrics:8 - type: Resource resource: name: memory9 target: type: AverageValue10 averageValue: 500Mi11 behavior:12 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Pods value: 4 periodSeconds: 60 - type: Percent value: 10 periodSeconds: 60 selectPolicy: Max- 1
autoscaling/v2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
Deployment、ReplicaSet、またはStatefulsetオブジェクトの場合は、apps/v1を使用します。 -
ReplicationControllerの場合は、v1を使用します。 -
DeploymentConfigの場合は、apps.openshift.io/v1を使用します。
-
- 4
- オブジェクトのタイプを指定します。オブジェクトは、
Deployment、DeploymentConfig、ReplicaSet、ReplicationController、またはStatefulSetである必要があります。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用量には、
metricsパラメーターを使用します。 - 9
- メモリー使用量には、
memoryを指定します。 - 10
- タイプを
AverageValueに設定します。 - 11
averageValueおよび特定のメモリー値を指定します。- 12
- オプション: スケールアップまたはスケールダウンのレートを制御するスケーリングポリシーを指定します。
次のようなコマンドを使用して、Horizontal Pod Autoscaler を作成します。
$ oc create -f <file-name>.yaml以下に例を示します。
$ oc create -f hpa.yaml出力例
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
検証
次のようなコマンドを使用して、Horizontal Pod Autoscaler が作成されたことを確認します。
$ oc get hpa hpa-resource-metrics-memory出力例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m次のようなコマンドを使用して、Horizontal Pod Autoscaler の詳細を確認します。
$ oc describe hpa hpa-resource-metrics-memory出力例
Name: hpa-resource-metrics-memory Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Wed, 04 Mar 2020 16:31:37 +0530 Reference: Deployment/example Metrics: ( current / target ) resource memory on pods: 2441216 / 500Mi Min replicas: 1 Max replicas: 10 ReplicationController pods: 1 current / 1 desired Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource ScalingLimited False DesiredWithinRange the desired count is within the acceptable range Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 6m34s horizontal-pod-autoscaler New size: 1; reason: All metrics below target