【Azure】App Service Planの相乗りには気を付けよう
概要
- App Serviceには "ホスト ディスク領域" と呼ばれるコンテナイメージ専用のストレージがある
- ホストディスク領域はSKUによって最大容量は異なるが、15GBの最低容量が確保されている
- その容量を超過した場合、インスタンスの起動エラーやランタイム例外が発生する
ホスト ディスク領域とは?
ホスト ディスク領域: ホスト ディスク領域は、コンテナー イメージを格納するために使用されます。 これは、Docker ストレージ ドライバーを介してプラットフォームによって管理されます。
ホスト ディスク領域は、ファイル システムのストレージ クォータとは別です。 展開可能ではなく、インスタンスごとに 15 GB の制限があります。 これは、ワーカーにカスタム イメージを格納するために使用されます。 ホスト ディスク領域の正確な可用性によっては、15 GB を超える GB を使用できる場合がありますが、これは保証されません。
引用元: Linux でのAzure App Serviceに関する FAQ
記事の背景
ある日App Service PlanのCPU Percentageを対象とするメトリックアラート通知が大量発生した
また、関連付けアプリでは一部の処理でタイムアウトエラーが発生
アラート発生時期の一週間のCPU Percentageのグラフ
環境情報
- リージョン:東日本
- App Service Plan SKU:Premium v3 P0V3
- アプリ:functionapp,linux,container 計7リソース
事象の詳細
推定2~3GB程のサイズのコンテナーを、7つすべて同じPlanに関連付けして動かしていたため、ホストディスク領域の逼迫によるインスタンスの再起動が発生した。
また、下記のサイクルを繰り返していたことで、CPU Percentageの値がしきい値を反復横跳びした結果、アラートが大量発生した。
- ホストディスク領域の逼迫によりインスタンスが停止
- 停止したことでCPU Percentageの値は低下
- 停止を検知してインスタンスが再起動
- 再起動に伴いインスタンスのCPU Percentageが上昇
- 順次コンテナーが立ち上がっていき、ホストディスク領域の逼迫するようになる
-
- に戻る
対処方
対応策ついては単純で、ホストディスク領域を逼迫しないように変更をかければ良い。
具体的には次の2点があげられる。
- App Service Planの分割
- コンテナーイメージ自体の見直し(サイズ縮小)
※Azure Portal の [<WebApps> or <Functions>リソース] > [問題の診断と解決] > [Linux - ホストのディスク容量使用量]から、インスタンス毎の使用量が確認可能なのでチューニングする際は参照すること
Linux - ホストのディスク容量使用量の表示例
あとがき
あって然るべき制限ではありますが、見落としやすい点だなと思ったので記事にしました。
「なんで急に事象が発生したの?」は本筋とずれるので割愛。
Discussion