2.4.6.3. メモリー使用量のパーセンテージに対する 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: memory-autoscale2 namespace: default spec: scaleTargetRef: apiVersion: apps/v13 kind: Deployment4 name: example5 minReplicas: 16 maxReplicas: 107 metrics:8 - type: Resource resource: name: memory9 target: type: Utilization10 averageUtilization: 5011 behavior:12 scaleUp: stabilizationWindowSeconds: 180 policies: - type: Pods value: 6 periodSeconds: 120 - type: Percent value: 10 periodSeconds: 120 selectPolicy: Max- 1
autoscaling/v2API を使用します。- 2
- この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
- 3
- スケーリングするオブジェクトの API バージョンを指定します。
-
ReplicationController の場合は、
v1を使用します。 -
DeploymentConfig については、
apps.openshift.io/v1を使用します。 -
Deployment、ReplicaSet、Statefulset オブジェクトの場合は、
apps/v1を使用します。
-
ReplicationController の場合は、
- 4
- オブジェクトのタイプを指定します。オブジェクトは、
Deployment、DeploymentConfig、ReplicaSet、ReplicationController、またはStatefulSetである必要があります。 - 5
- スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
- 6
- スケールダウン時のレプリカの最小数を指定します。
- 7
- スケールアップ時のレプリカの最大数を指定します。
- 8
- メモリー使用量には、
metricsパラメーターを使用します。 - 9
- メモリー使用量には、
memoryを指定します。 - 10
Utilizationに設定します。- 11
averageUtilizationおよびターゲットに設定する平均メモリー使用率をすべての Pod に対して指定します (要求されるメモリーのパーセンテージで表す)。ターゲット Pod にはメモリー要求が設定されている必要があります。- 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