メモリ、CPUについて
コンテナのリソース使用量を求める:Resource requests
確保したいリソースの最低使用量を指定。これを満たすNodeを調べてスケジュールするが、どのNodeも満たさない場合、Podはスケジュールされない。
マニフェスト例
resource:
requests:
memory: "64Mi"
cpu: "10m"
コンテナのリソース使用量を制限する:Resource limits
コンテナの使えるリソースの上限を指定。
もしメモリが使用量を超えると OOM > podがkillされてしまう
もしCPUが超えると アプリが止まることはないが、スロットリングが発生しアプリの動作が低下する。
マニフェスト例
resource:
limits:
memory: "64Mi"
cpu: "10m"
リソースの単位
メモリ
指定しない場合、1は1Byteを意味する. K,Mはそれぞれキロ、メガ。
Kiっていうのもあってこれは2^10=1024。他の単位も調べてみてね。
CPU
単位を指定しない場合、1はCPUの1コアを意味する。1m=0.001コアなので、通常整数もしくはミリコアで指定する。
QoSっていう考え
これ天才。
Nodeのメモリが完全に枯渇するとその上のコンテナが動かなくなってアプリが停止してしまう。それを防ぐためにQoS(Quality of Service)に応じてOOM Killerが働いて優先度の低い順にPodを◯していくという仕組み。
Qos class を簡単に紹介
Guaranteed: Pod内のコンテナ全てのリソースにrequests,limitsが設定されている。さらにreq=limの値となっている(メモリ、CPUともに)
Burstable: Pod内のコンテナの内少なくとも一つにメモリかCPUのリソースのreq/limが設定されている。
BestEffort: 上のどちらでもないもの。
上から順に優先順位が高いぞ。軽く覚えておいて損はないでしょう。
終わり