🤖
kubernetes障害記録:podにはできるだけrequestsに使用するメモリ量を書いた方が良い
tl;dr;
- pod に requests を書いた方がいい。特にメモリ量。
- さもないと、Out Of Memory(OOM)が発生してエライことになる可能性がある。
事故事例
requests が書かれていない状態で起きた。
- requests がないのでメモリが逼迫したノードに新しいコンテナが配置された
- OOM が発生してワーカーノードがマスターノードと疎通できなくなった
- OOM でプロセスがkillされたが回復出来ずワーカーノードが応答不能状態に
- ワーカーノードがダウンしたと判断され、他のノードに pod が移動を始めた
- 他のノードもメモリ量がそれほどあるわけではないので OOM 発生
- ギリギリだったノードにさらに割り振られて OOM 発生
- ワーカーノード全滅
requests に書くメモリ量が分からない
とりあえず稼働させてみて、その pod が動作している pod に SSH でログインし、
docker stats [containerID]
を実行することで使用中のメモリ量がわかる。
記述例
Deployments、ReplicaSet、DaemonSet、StatefulSet 等の conteiners の定義に書くことができる。
requests
はスケジューリングに使用されるが、制限はされない参考情報なので多すぎる分には問題だが
少なくても問題は起きない(OOM が起きる可能性はあるが)のでちょっと多いくらいの数値が良いと思われる。
※ 未確認ですが、リソースがどのノードでも不足する場合は、pod が作成されずに Pending
されるそうです。
containers:
- name: db
image: postgres:11
resources:
requests:
cpu: 1000m # CPU使用量の見込み
memory: "500M" # メモリ使用量の見込み
limits:
cpu: 2000m # CPU使用量の上限
memory: "700M" # メモリ使用量の上限
Discussion