🤖

kubernetes障害記録:podにはできるだけrequestsに使用するメモリ量を書いた方が良い

2021/08/11に公開

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