Menu Close
2.4.4. CLI を使用したメモリー使用率向けの Horizontal Pod Autoscaler オブジェクトの作成
OpenShift Container Platform CLI を使用して、既存のDeployment
、DeploymentConfig
、ReplicaSet
、ReplicationController
、または StatefulSet
オブジェクトを自動的にスケールする水平 Pod オートスケーラー (HPA) を作成することができます。HPA は、指定した平均メモリー使用率 (直接値または要求メモリーに対する割合) を維持するように、そのオブジェクトに関連する Pod をスケーリングします。
他のオブジェクトが提供する特定の機能や動作が必要な場合を除き、Deployment
オブジェクトまたは ReplicaSet
オブジェクトを使用することをお勧めします。
HPA は、すべての Pod で指定のメモリー使用率を維持するために、最小数と最大数の間のレプリカ数を増減します。
メモリー使用率については、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-129-223.compute.internal -n openshift-kube-scheduler
出力例
Name: openshift-kube-scheduler-ip-10-0-129-223.compute.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Cpu: 0 Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2020-02-14T22:21:14Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-129-223.compute.internal Timestamp: 2020-02-14T22:21:14Z Window: 5m0s Events: <none>
手順
メモリー使用率の Horizontal Pod Autoscaler を作成するには、以下を実行します。
以下のいずれか 1 つを含む YAML ファイルを作成します。
特定のメモリー値についてスケーリングするには、既存のオブジェクトについて以下のような
HorizontalPodAutoscaler
オブジェクトを作成します。apiVersion: autoscaling/v2beta2 1 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory 2 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 3 kind: Deployment 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Resource resource: name: memory 9 target: type: AverageValue 10 averageValue: 500Mi 11 behavior: 12 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Pods value: 4 periodSeconds: 60 - type: Percent value: 10 periodSeconds: 60 selectPolicy: Max
- 1
autoscaling/v2beta2
API を使用します。- 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
- オプション: スケールアップまたはスケールダウンのレートを制御するスケーリングポリシーを指定します。
パーセンテージでスケーリングするには、既存のオブジェクトに対して、次のような
HorizontalPodAutoscaler
オブジェクトを作成します。apiVersion: autoscaling/v2beta2 1 kind: HorizontalPodAutoscaler metadata: name: memory-autoscale 2 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 3 kind: Deployment 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Deployment resource: name: memory 9 target: type: Utilization 10 averageUtilization: 50 11 behavior: 12 scaleUp: stabilizationWindowSeconds: 180 policies: - type: Pods value: 6 periodSeconds: 120 - type: Percent value: 10 periodSeconds: 120 selectPolicy: Max
- 1
autoscaling/v2beta2
API を使用します。- 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
$ 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