6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Container Apps の Custom (KEDA) のスケーリングの設定方法 (CPU・Cron)

Last updated at Posted at 2023-06-26

本記事について

本記事では、Azure サーバーレスのコンテナーアプリの実行環境である Azure Container Apps における、Custom スケーリングの設定方法を見ていきます。Custom スケーリングは柔軟性が高く豊富なオプションがありますが、あまり公開情報が多くないため、本記事では基本的なところをご紹介していきます。特に良く利用されそうな、CPU の利用量ベースでのスケーリングと Cron を使った指定時刻での起動・停止をどのように設定すれば行えるかを確認したいと思います。

Azure Container Apps とは?

Azure Container Apps は、コンテナー化されたアプリケーションやマイクロサービス用のコンテナーを実行するのに最適化された、サーバーレスなコンテナーサービスです。HTTP/HTTPS のイングレスや、オートスケール、イベント駆動処理、カスタムドメインサポートや認証・認可 (Easy Auth) など、多くの機能を提供しています。

また、組み込みで Dapr が利用できるようになっており、マイクロサービスの実行基盤としても最適です。

KEDA とは?

Kubernetes Event-driven Autoscaling (KEDA) は、Kubernetes 環境のアプリケーションの自動スケーリングをシンプルにするためのコンポーネントであり、CNCF インキュベーションプロジェクトです。Azure Container Apps では、バックエンドに Kubernetes を採用しており、KEDA を利用してスケーリングの設定を行えるようになっています。

KEDA のスケーラーについて

KEDA では、50種類を超えるスケーラーと呼ばれるスケールの起点となるメトリックをサポートしています。

Azure Container Apps では、KEDA の多くのスケーラーを利用して、コンテナーアプリをスケールアウト・インさせることができます。

CPU によるスケーリング

最初に CPU の利用量に応じて、レプリカ数を増減させる方法について見ていきます。

利用する KEDA のスケーラー

Custom スケーリングで type として cpu を選ぶとき、下記の KEDA スケーラーを使うことになります。

Azure Container Apps での設定方法

スケーリング(スケールルール)の設定は、リビジョンの作成から行います。スケーリングタブでスケールルールを追加します。

image.png

スケールルールで、「+追加」を押して、設定値を入れていきます。CPUでスケールさせる場合は、下記のような設定を入れます。

type には、Utilization と AverageValue の2つの選択肢があります。シンプルに利用量で考える場合は Utilization を選択します。Utilization を選択した場合は、value に CPU 利用量 (割合 [%]) を入れます。例えば、コンテナーアプリで、動いているコンテナーアプリの平均 CPU 利用率が60% を超えたらレプリカを増やしたいという場合は、60 [%] という値を入れます。

なお、CPUでスケールさせる場合は、最小レプリカ数は1となりますのでご注意ください。また、クーリングタイム(スケールインさせるための基準となる時間)は5分 (300秒) となっています。

ルール名: <任意の名前>
種類: カスタム
カスタムルールの種類: cpu

メタデータ:
    type: <Utilization | AverageValue>
    value: <閾値となる CPU 利用量 (割合 [%])>

実際に入力する画面は以下のような感じになります。

image.png

スケールのテスト

せっかくなので、コンテナーのCPU負荷を無理やりあげて、ちゃんとスケールするかテストしてみます。Ubuntuベースのコンテナーでコンソールに入り、下記コマンドを実行します。

apt update
apt install stress
stress --cpu 1 --timeout 5m

image.png

最初、レプリカは1個立っています。

image.png

負荷をかけて少し待つと、下記のように新しいレプリカが1個立ち上がってきます。

image.png

メトリックで見ると下記のようにレプリカの増減とCPUの利用量を確認できます。CPU負荷が16:58-17:03でかけられており、それが終わると5分のクールダウンピリオドを経て、17:08 あたりでスケールインされています。

image.png

Cron によるスケーリング

次に、Cron を利用して、指定時間に起動・停止させる方法を見ていきます。

利用する KEDA のスケーラー

Custom スケーリングで type として cron を選ぶとき、下記の KEDA スケーラーを使うことになります。

Azure Container Apps での設定方法

スケールルールの設定で下記のように設定します。start と end の値は Cron の記法に従います。timezone の値は、この Wikipedia 記事をご参照ください。

ルール名: <任意の名前>
種類: カスタム
カスタムルールの種類: cron

メタデータ:
    desiredReplicas: <増やしたい台数>
    start: <時間の指定>
    end: <時間の指定>
    timezone: <タイムゾーンの指定>  

たとえば、下記の指定だと、毎時45分に3台のコンテナーレプリカが立ち上がり、毎時50分にそれらが停止される指定になります。

image.png

スケールのテスト

特にユーザー側で何もしなくても、cron の設定に従い、コンテナーが立ち上がります。

最初は0個のレプリカがある状態です。

image.png

45分になると、3つのレプリカが立ち上がってきました。

image.png

時間が過ぎると元に戻ります。

image.png

メトリックを確認すると下記のようになっていました。5分のクールダウンピリオドがこちらも効いているようです。

image.png

最後に

本記事では、Azure Container Apps のカスタムスケーリングについて、CPU と Cron を利用するときの具体的な使い方について見ていきました。本稿が、Azure Container Apps 活用の一助になれば幸いです。

*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?