すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:Knative で HPA を使用して CPU およびメモリメトリクスに基づく自動スケーリングを実装する

最終更新日:Dec 28, 2024

Alibaba Cloud Knative は、Horizontal Pod Autoscaler (HPA) と統合して、リソース負荷に基づく自動スケーリングを有効にすることができます。Knative はネイティブでリクエスト数に基づく自動スケーリングをサポートしていますが、HPA と統合することで、CPU 使用率やメモリ使用率などの追加メトリクスを使用したきめ細かいスケーリングが可能になります。

前提条件

ステップ 1: Knative サービスをデプロイする

  1. ACS コンソールにログインします。左側のナビゲーションペインで、クラスタをクリックします。

  2. クラスタページで、管理するクラスタを見つけ、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、アプリケーション > Knative を選択します。

  3. サービスタブのKnativeページで、名前空間ドロップダウンリストからdefaultを選択し、テンプレートから作成をクリックし、次の YAML コンテンツをコードエディタにコピーして、作成をクリックします。

    次のサンプルコードは、helloworld-go-hpa という名前の Knative サービスを作成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go-hpa # Knative サービスの名前を指定します。
    spec:
      template:
        metadata:
          labels:
            app: helloworld-go-hpa
          annotations:
            autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev" # スケーラーとして HPA を指定します。
            autoscaling.knative.dev/metric: "cpu" # HPA でサポートされているメトリクスには、CPU 使用率とメモリ使用率が含まれます。この例では、HPA は CPU 使用率に基づいて動作するように構成されています。
            autoscaling.knative.dev/target: "30" # CPU 使用率のしきい値を指定します。HPA は、しきい値を超えると、Knative サービスのポッドを自動的にスケーリングします。
            autoscaling.knative.dev/minScale: "1" # 保証する必要があるポッドの最小数を指定します。
            autoscaling.knative.dev/maxScale: "4" # 許可されるポッドの最大数を指定します。
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:v1024
              resources:
                requests:
                  cpu: '200m'
  4. 次のコマンドを実行して、Knative サービスが想定どおりに実行されているかどうかを確認します。

    kubectl get ksvc

    期待される出力:

    NAME                   URL                                               LATESTCREATED                LATESTREADY                  READY   REASON
    helloworld-go-hpa      http://helloworld-go-hpa.default.example.com      helloworld-go-hpa-00001      helloworld-go-hpa-00001      True        

    READY列にTrueと表示されている場合、Knative サービスは想定どおりに実行されています。

ステップ 2: CPU メトリクスに基づく自動スケーリングを実装する

  1. 負荷テストツール hey をインストールします。

    hey の詳細については、Hey を参照してください。

  2. 次のコマンドを実行して、1 秒あたり 100 クエリ (QPS) を 60 秒間送信することで負荷テストを実行します。

    説明

    121.XX.XX.10 をゲートウェイの IP アドレスまたはドメイン名に置き換えます。

    hey -z 60s -q 100   -host "helloworld-go-hpa.default.example.com"   "http://121.XX.XX.10?prime=40000000" # 121.199.XXX.XXX はゲートウェイの IP アドレスまたはドメイン名です。

    負荷テスト中に、次のコマンドを実行して、ポッドがリアルタイムでスケーリングされているかどうかを確認できます。

    kubectl get pods --watch

    期待される出力:

    NAME                                                     READY   STATUS    RESTARTS   AGE
    # ポッドは想定どおりに実行されており、コンテナはレディ状態です。
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxfl5      2/2     Running   0          101m
    # ポッドの数が 4 つにスケールアウトされています。READY 列には各ポッドに 0/2 と表示され、STATUS 列には各ポッドに Pending と表示されます。これは、ポッドが保留中で、リソースがポッドに割り当てられていないことを意味します。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     Pending   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     Pending   0          0s
    # READY 列には各ポッドに 0/2 と表示され、STATUS 列には各ポッドに ContainerCreating と表示されます。これは、ポッド内のコンテナが作成されていることを意味します。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      0/2     ContainerCreating   0          0s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      0/2     ContainerCreating   0          0s
    # READY 列には 2 つのポッドに 1/2 と表示され、2 つのポッドに 2/2 と表示され、STATUS 列には各ポッドに Running と表示されます。これは、各ポッドに対して少なくとも 1 つのコンテナが作成され、想定どおりに実行されていることを意味します。
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      1/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj      2/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      1/2     Running             0          1s
    helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85      2/2     Running             0          1s

    出力は、HPA が Knative サービスのポッドを自動的にスケーリングできることを示しています。負荷が増加すると、HPA は Knative サービスの処理能力とスループットを向上させるために、ポッドの数を 1 から 4 にスケーリングします。

(オプション) ステップ 3: Knative 監視ダッシュボードを表示する

Knative は、すぐに使える監視機能を提供します。Knativeページで、監視ダッシュボードタブをクリックして、指定されたサービスの監視データを表示します。Knative ダッシュボードの詳細については、Knative ダッシュボードの表示を参照してください。

image.png

関連情報

  • Alibaba Cloud Knative は、コンテナ (または関数) の作成、ワークロード管理 (自動スケーリング)、イベントモデルを統合することにより、Kubernetes ベースのサーバーレスフレームワークを実装します。Alibaba Cloud Knative の詳細については、Knative の概要を参照してください。

  • Alibaba Cloud Knative の機能の詳細については、Alibaba Cloud Knative とオープンソース Knative の比較を参照してください。