Alibaba Cloud Container Service は、コンテナーリソースの自動スケーリング実現のために、コンソール上で HPA を有効化したアプリケーションの迅速な作成をサポートしています。 HPA (Horizontal Pod Autoscaling) の yaml 設定を定義して、HPA を有効化したアプリケーションを設定することもできます。

前提条件

  • Kubernetes クラスターが作成されている必要があります。 詳細は、「Kubernetes クラスターの作成」をご参照ください。
  • Kubernetes クラスターのマスターノードに正常に接続されている必要があります。

方法 1: Container Service コンソールでの HPA アプリケーションの作成

HPA は Alibaba Cloud Container Service と連携しています。 Container Service コンソールを使用して HPA を簡単に作成できます。

  1. Container Service コンソール にログインします。
  2. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイメント] を選択します。 右上隅の [イメージによる作成] をクリックします。
  3. アプリケーション名を入力し、クラスターおよび名前空間を選択して、[次へ] をクリックします。
  4. アプリケーションを設定します。 次に、レプリカ数を設定します。自動スケーリングの [有効化] チェックボックスを選択し、スケールリングの設定を行います。
    • メトリック: CPU およびメモリーです。 必要に応じて、リソースタイプを設定します。
    • トリガ条件: リソース使用率のパーセンテージの値です。 コンテナーは、リソース使用率がこの値を上回ったときに拡張を始めます。
    • 最大レプリカ: デプロイが拡張できるレプリカの最大数です。
    • 最小レプリカ: デプロイが縮小できるレプリカの最少数です。
  5. コンテナーを設定します。 イメージを選択し、必要なリソースを設定します。 [次へ] をクリックします。
    デプロイに関する必要なリソースを設定する必要があります。 設定しない場合、コンテナーの自動スケーリングは行われません。
  6. [アクセス制御] ページで、このページの例の設定をしないでください。 直接 [作成] をクリックします。

    これで、HPA をサポートするデプロイが作成されました。 デプロイの詳細から、自動スケーリンググループを参照できます。

  7. 実際の環境では、アプリケーションは CPU 負荷によりスケーリングされます。 テスト環境で自動スケーリングを確認することもできます。 ポッドで CPU 負荷テストを実行することで、ポッドが 30 秒以内に水平拡張を完了できることがわかります。

方法 2: kubectl コマンドを使用したコンテナーの自動スケーリングの設定

オーケストレーションテンプレートを使用して手動で HPA を作成し、作成した HPA を、スケーリングするデプロイオブジェクトにバインドできます。 kubectl コマンドを使用して、コンテナー自動スケーリング設定を完了します。

Nginx アプリケーションの例は、以下のとおりです。 kubectl create -f xxx.yml コマンドを実行し、以下のようなデプロイ用のオーケストレーションテンプレートを作成します。

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx  
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80
        resources:
          requests:                         ##This parameter must be configured. Otherwise, the HPA cannot operate.
            cpu: 500m

HPA を作成します。 scaleTargetRef を使用して、現在の HPA がバインドされているオブジェクトを設定します。 このページの例では、オブジェクトは "nginx" という名称のデプロイです。

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:                             ##Bind the HPA to a deployment named nginx
    apiVersion: apps/v1beta2
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
HPA では、ポッドに関するリクエストリソースの設定が必要です。リクエストリソースなしでは HPA は動作しません。
kubectl describe hpa [name] の実行時、以下と同様の警告が表示されます。
Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

HPA の作成後、kubectl describe hpa [name] コマンドをもう一度実行します。 以下のようなメッセージを確認できます。これは、HPA が正常に実行していることを示しています。

Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target

Nginx ポッドの使用率がこのページの例で設定した 50% に達した場合、コンテナーは水平的に拡張します。 Nginx ポッドの使用率が 50% を下回った場合、コンテナーは縮小します。