Menu Close

2.4.3. CLI を使用した CPU 使用率向けの Horizontal Pod Autoscaler の作成

OpenShift Container Platform CLI を使用して、既存のDeploymentDeploymentConfigReplicaSetReplicationController、または StatefulSet オブジェクトを自動的にスケールする水平 Pod オートスケーラー (HPA) を作成することができます。HPA は、指定された CPU 使用率を維持するために、そのオブジェクトに関連する Pod をスケーリングします。

注記

他のオブジェクトが提供する特定の機能や動作が必要な場合を除き、Deployment オブジェクトまたは ReplicaSet オブジェクトを使用することをお勧めします。

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 の下にある CpuMemory のように表示されます。

$ 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 を作成するには、以下を実行します。

  1. 以下のいずれかの手順を実行します。

    • CPU使用率のパーセントに基づいてスケーリングするには、既存のオブジェクトとしてHorizontalPodAutoscalerオブジェクトを作成します。

      $ oc autoscale <object_type>/<name> \1
        --min <number> \2
        --max <number> \3
        --cpu-percent=<percent> 4
      1
      自動スケーリングするオブジェクトのタイプと名前を指定します。オブジェクトが存在し、 DeploymentDeploymentConfig/dcReplicaSet/rsReplicationController/rc 、またはStatefulSetである必要があります。
      2
      オプションで、スケールダウン時のレプリカの最小数を指定します。
      3
      スケールアップ時のレプリカの最大数を指定します。
      4
      要求された CPU のパーセントで表示された、すべての Pod に対する目標の平均 CPU 使用率を指定します。指定しない場合または負の値の場合、デフォルトの自動スケーリングポリシーが使用されます。

      たとえば、以下のコマンドは image-registry Deployment オブジェクトの自動スケーリングを示しています。最初のデプロイメントでは 3 つの Pod が必要です。HPA オブジェクトは、最小値を 5 に増やします。Pod の CPU 使用率が 75% に達すると、Pod は 7 まで増加します。

      $ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
    • 特定のCPU値に合わせてスケーリングするには、既存のオブジェクトに対して次のようなYAMLファイルを作成します。

      1. 以下のような YAML ファイルを作成します。

        apiVersion: autoscaling/v2beta2 1
        kind: HorizontalPodAutoscaler
        metadata:
          name: cpu-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: Resource
            resource:
              name: cpu 9
              target:
                type: AverageValue 10
                averageValue: 500m 11
        1
        autoscaling/v2beta2 API を使用します。
        2
        この Horizontal Pod Autoscaler オブジェクトの名前を指定します。
        3
        スケーリングするオブジェクトの API バージョンを指定します。
        • DeploymentReplicaSetStatefulsetオブジェクトの場合は、apps/v1を使用します。
        • ReplicationControllerの場合は、 v1を使用します。
        • DeploymentConfigの場合は、 apps.openshift.io/v1を使用します。
        4
        オブジェクトのタイプを指定します。オブジェクトは、 DeploymentDeploymentConfig/dcReplicaSet/rsReplicationController/rc 、またはStatefulSetである必要があります。
        5
        スケーリングするオブジェクトの名前を指定します。オブジェクトが存在する必要があります。
        6
        スケールダウン時のレプリカの最小数を指定します。
        7
        スケールアップ時のレプリカの最大数を指定します。
        8
        メモリー使用率に metrics パラメーターを使用します。
        9
        CPU 使用率に cpu を指定します。
        10
        AverageValue に設定します。
        11
        ターゲットに設定された CPU 値で averageValue に設定します。
      2. Horizontal Pod Autoscaler を作成します。

        $ oc create -f <file-name>.yaml
  2. Horizontal Pod Autoscaler が作成されていることを確認します。

    $ oc get hpa cpu-autoscale

    出力例

    NAME            REFERENCE            TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    cpu-autoscale   Deployment/example   173m/500m       1         10        1          20m