本記事について
本記事では、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 での設定方法
スケーリング(スケールルール)の設定は、リビジョンの作成から行います。スケーリングタブでスケールルールを追加します。
スケールルールで、「+追加」を押して、設定値を入れていきます。CPUでスケールさせる場合は、下記のような設定を入れます。
type には、Utilization と AverageValue の2つの選択肢があります。シンプルに利用量で考える場合は Utilization を選択します。Utilization を選択した場合は、value に CPU 利用量 (割合 [%]) を入れます。例えば、コンテナーアプリで、動いているコンテナーアプリの平均 CPU 利用率が60% を超えたらレプリカを増やしたいという場合は、60 [%] という値を入れます。
なお、CPUでスケールさせる場合は、最小レプリカ数は1となりますのでご注意ください。また、クーリングタイム(スケールインさせるための基準となる時間)は5分 (300秒) となっています。
ルール名: <任意の名前>
種類: カスタム
カスタムルールの種類: cpu
メタデータ:
type: <Utilization | AverageValue>
value: <閾値となる CPU 利用量 (割合 [%])>
実際に入力する画面は以下のような感じになります。
スケールのテスト
せっかくなので、コンテナーのCPU負荷を無理やりあげて、ちゃんとスケールするかテストしてみます。Ubuntuベースのコンテナーでコンソールに入り、下記コマンドを実行します。
apt update
apt install stress
stress --cpu 1 --timeout 5m
最初、レプリカは1個立っています。
負荷をかけて少し待つと、下記のように新しいレプリカが1個立ち上がってきます。
メトリックで見ると下記のようにレプリカの増減とCPUの利用量を確認できます。CPU負荷が16:58-17:03でかけられており、それが終わると5分のクールダウンピリオドを経て、17:08 あたりでスケールインされています。
Cron によるスケーリング
次に、Cron を利用して、指定時間に起動・停止させる方法を見ていきます。
利用する KEDA のスケーラー
Custom スケーリングで type として cron を選ぶとき、下記の KEDA スケーラーを使うことになります。
Azure Container Apps での設定方法
スケールルールの設定で下記のように設定します。start と end の値は Cron の記法に従います。timezone の値は、この Wikipedia 記事をご参照ください。
ルール名: <任意の名前>
種類: カスタム
カスタムルールの種類: cron
メタデータ:
desiredReplicas: <増やしたい台数>
start: <時間の指定>
end: <時間の指定>
timezone: <タイムゾーンの指定>
たとえば、下記の指定だと、毎時45分に3台のコンテナーレプリカが立ち上がり、毎時50分にそれらが停止される指定になります。
スケールのテスト
特にユーザー側で何もしなくても、cron の設定に従い、コンテナーが立ち上がります。
最初は0個のレプリカがある状態です。
45分になると、3つのレプリカが立ち上がってきました。
時間が過ぎると元に戻ります。
メトリックを確認すると下記のようになっていました。5分のクールダウンピリオドがこちらも効いているようです。
最後に
本記事では、Azure Container Apps のカスタムスケーリングについて、CPU と Cron を利用するときの具体的な使い方について見ていきました。本稿が、Azure Container Apps 活用の一助になれば幸いです。
*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。