Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決

Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決

Kubernetes v1.28 への更新後、PFN でジョブが OOM で終了するという問題に直面しました。本発表ではこの問題についての詳細な説明と解決した方法について説明します。本問題は upstream でも取り上げられ、kubelet に singleProcessOOMKill という設定を追加しました。
https://github.com/kubernetes/kubernetes/pull/126096
これらの実装についての苦労話や実装の詳細について説明します。

イベントサイト: https://k8sjp.connpass.com/event/365262/

Avatar for Preferred Networks

Preferred Networks PRO

September 02, 2025
Tweet

More Decks by Preferred Networks

Other Decks in Technology

Transcript

  1. Kubernetes における cgroup v 2 での Out-Of-Memory 問題の解決 Kubernetes Meetup

    Tokyo # 71 Preferred Networks, Inc. Toru Komatsu(@utam 0 k)
  2. 2 Preferred Networks, Inc. ΦϯϓϨMLج൫ͷ։ൃɾӡ༻ OSS Activities Maintainer opencontainers/runtime-spec youki-dev/youki

    Reviewer Kubernetes SIG-Scheduling containerd/runwasi Community CNCF Ambassador, CNCJ Board Member @utam0k Toru Komatsu
  3. 5 突然の OOM Killer OOM Killer ͸ಥવʹ ‣クラスタのアップグレード後に OOM Killer

    の挙動に変化 ‣Pod 内に複数のプロセスがいる • いままではメモリを 食 い潰していた 子 プロセスだけ Kill されていた • アップグレード後は親プロセスごと Kill されている
  4. 6 突然の OOM Killer ࣌ܥྻ ユーザーのワークロードA は順調に動いている Kubernetes を v

    1 . 2 7 → v 1 . 28 へバージョンアップ ワークロードA が OOMKilled で消去される リリースノートを読んで関連する変更点を探す旅へ
  5. kubernetes/kubernetes# 1177 93 > Sets the oom.memory.group bit for contianer

    cgroups on kernels with cgroup v 2 突然の OOM Killer ݪҼ 7
  6. 8 ࣌ܥྻ ユーザーのワークロードA は順調に動いている Kubernetes を v 1 . 2

    7 → v 1 . 28 へバージョンアップ ワークロードA が OOMKilled で消去される Kubernetes を v 1 . 2 4 → v 1 . 25 へバージョンアップ + cgroup v 1 → v 2 kubernetes/kubernetes# 1 1779 3 がマージされる
  7. kubernetes/kubernetes# 1177 93 > Sets the oom.memory.group bit for contianer

    cgroups on kernels with cgroup v 2 突然の OOM Killer ݪҼ 9
  8. 実験1: OOM Group が無効な場合の挙動 (= cgroups v 1 の挙動) 1

    . oom-test という名前の cgroup を作成 2 . OOM を引き起こすために swap を利 用 できないようにする 3 . oom-test での最 大 のメモリ使 用 量を 128 MiB に設定する 4 . oom-test 内で2つのプロセスを 立 ち上げ、それぞれのプロセスで 200 MiB 使 用 する 実験2: OOM Group が有効な場合の挙動 1 . oom-test という名前の cgroup を作成 2 . OOM Group を有効にする 3 . 以降は実験1と同様 OOM Group ࣮ݧ 12
  9. 16 OOM Group OOM ͷڍಈ P ▪cgroups v 1 P

    P cgroup v1 ▪Enabled OOM Group P P P cgroup v2 ▪Disabled OOM Group P P P cgroup v2
  10. kubernetes/kubernetes# 1177 93 > Sets the oom.memory.group bit for contianer

    cgroups on kernels with cgroup v 2 17 OOM Group OOM ͷڍಈ
  11. 18 OOM Group OOM ͷڍಈ P ▪cgroups v 1 P

    P cgroup v1 ▪Enabled OOM Group P P P cgroup v2 ▪Disabled OOM Group P P P cgroup v2 v 1 . 28 からの デフォルトの挙動
  12. 19 OOM Group ͭ·Γ... P ▪cgroups v 1 / Disabled

    OOM Group P P Pod Container P P Pod Container OK
  13. 20 OOM Group ͭ·Γ... P ▪cgroups v 2 & Enabled

    OOM Group P P Pod Container Pod Container OK OOM Killed v 1 . 28 からの デフォルトの挙動
  14. `make -j 20 || make -j 10` ‣OOM Ͱࣦഊͯ͠΋ࣗಈతʹϑΥʔϧόοΫ͍ͯͨ͠ ࢠϓϩηεͷ

    OOM Λར༻ͨ͠ϫʔΫϩʔυ ‣࣮ࡍʹ૸ΒͤΔ·ͰͲͷ͘Β͍ϝϞϦΛར༻͢Δ͔ෆ໌ ‣ͱΓ͋͑ͣ૸Βͤͯ OOM ʹͳͬͨΒରԠ OOM Group PFN Ͱ࣮ࡍʹࠔͬͨέʔε 21 子 プロセスが OOM になる前提のワークロード
  15. Kubelet への実装 Kubelet ͷ࣮ߦͷྲྀΕ 24 Kubelet Container Container Runtime High-Level

    Low-Level OCI Runtime Spec Container Runtime I nterface 今回の実装範囲
  16. Kubelet でフラグをセット可能 ‣ Node 単位での設定となる ‣ クラスタ管理者のみが設定可能 Kubelet への実装 Kubelet

    ͷઃఆ - singleProcessOOMKill 27 https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/
  17. 30 現実 ଟ༷ͳ࣮ߦ؀ڥ΁ͷରԠ ,VCFMFU࣮ߦ؀ڥ TJOHMF1SPDFTT00.,JMM ,VCFMFUىಈͷڍಈ 1PEͷৼΔ෣͍ DHSPVQTW 5SVF ىಈʹ੒ޭ͢Δ

    00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ DHSPVQTW 'BMTFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε Ϋ͕ଘࡏ͢ΔDHSPVQશମΛఀ ࢭͤ͞Δ DHSPVQTW 'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  DHSPVQTW 5SVFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ 8JOEPXT 5SVF'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ 
  18. 31 現実 ଟ༷ͳ࣮ߦ؀ڥ΁ͷରԠ ,VCFMFU࣮ߦ؀ڥ TJOHMF1SPDFTT00.,JMM ,VCFMFUىಈͷڍಈ 1PEͷৼΔ෣͍ DHSPVQTW 5SVF ىಈʹ੒ޭ͢Δ

    00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ DHSPVQTW 'BMTFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε Ϋ͕ଘࡏ͢ΔDHSPVQશମΛఀ ࢭͤ͞Δ DHSPVQTW 'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  DHSPVQTW 5SVFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ 8JOEPXT 5SVF'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  大 量の議論と 3 回の作り直し
  19. 32 現実 ଟ༷ͳ࣮ߦ؀ڥ΁ͷରԠ ,VCFMFU࣮ߦ؀ڥ TJOHMF1SPDFTT00.,JMM ,VCFMFUىಈͷڍಈ 1PEͷৼΔ෣͍ DHSPVQTW 5SVF ىಈʹ੒ޭ͢Δ

    00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ DHSPVQTW 'BMTFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε Ϋ͕ଘࡏ͢ΔDHSPVQશମΛఀ ࢭͤ͞Δ DHSPVQTW 'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  DHSPVQTW 5SVFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ 8JOEPXT 5SVF'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  考慮しないといけない環境が多すぎる → 手 元に実 行 環境がない
  20. 33 現実 ଟ༷ͳ࣮ߦ؀ڥ΁ͷରԠ ,VCFMFU࣮ߦ؀ڥ TJOHMF1SPDFTT00.,JMM ,VCFMFUىಈͷڍಈ 1PEͷৼΔ෣͍ DHSPVQTW 5SVF ىಈʹ੒ޭ͢Δ

    00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ DHSPVQTW 'BMTFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε Ϋ͕ଘࡏ͢ΔDHSPVQશମΛఀ ࢭͤ͞Δ DHSPVQTW 'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  DHSPVQTW 5SVFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ 8JOEPXT 5SVF'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  デフォルト値をどうするべきか…
  21. 34 現実 ଟ༷ͳ࣮ߦ؀ڥ΁ͷରԠ ,VCFMFU࣮ߦ؀ڥ TJOHMF1SPDFTT00.,JMM ,VCFMFUىಈͷڍಈ 1PEͷৼΔ෣͍ DHSPVQTW 5SVF ىಈʹ੒ޭ͢Δ

    00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ DHSPVQTW 'BMTFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε Ϋ͕ଘࡏ͢ΔDHSPVQશମΛఀ ࢭͤ͞Δ DHSPVQTW 'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  DHSPVQTW 5SVFͱσϑΥϧτ஋ ىಈʹ੒ޭ͢Δ 00.,JMMFS͕00.ͨ͠λε ΫΛఀࢭͤ͞Δ 8JOEPXT 5SVF'BMTF *OWBMJEͱͯ͠ىಈʹࣦഊ  Warning ログ or 起動させない
  22. 35 現実 Pull Request ͷҾ͖ܧ͗ PFN から OOM Group がデフォルトで有効なのは困るケースを報告

    sig-node での MTG で Kubelet の設定でやる合意が取られる PR が作成される cgroups v 2 で OOM Group が常に有効になる PR がマージされる Kubernetes/kubernetes# 11779 3 PR に /lgtm がつく
  23. 36 現実 Pull Request ͷҾ͖ܧ͗ PR の作者が PR を Close

    する 「Closing this for now as I don't have time at the moment.」 utam 0 k が PR を引き継ぐ v 1 . 32 でリリースされる 「コンテナレベルで設定するべきでは?」と議論が巻き起こる → PodSpec レベルでの改良が必要となる
  24. 38 現実 కΊ੾Γۦಈ։ൃ T 生 産性 CodeFreeze KubeCon NA CI

    待ち時間 2 h ? リリースチームからのリマインダー
  25. • KEP- 550 7 : Container-level OOM kill mode configuration

    • Kubelet での設定だとノードレベルでクラスタ管理者しか変更できない Future ίϯςφϨϕϧͰͷ OOM Group ͷઃఆʹ޲͚ͯ 40
  26. まとめ memory.oom.group ‣OOM が起きたときに、cgroup(Pod/Container) 全体で OOM Killed singleProcessOOMKill ‣Kubelet の設定、ノードレベルで

    OOM Group の挙動を設定可能 実装の現実 ‣多様な環境への対応 ‣コミュニティでの合意形成の難しさ ‣CodeFreeze 前のなだれ込み KEP- 550 7 : Container-level OOM kill mode configuration ‣将来的にはコンテナごとに OOM Group の設定が可能になるかも
  27. We’re hiring! Preferred Networks では採 用 を実施中です! • 機械学習プラットフォームエンジニア Kubernetes,

    社内向け機械学習プラットフォーム、外販クラウドサービスの開発運 用 キーワード: K 8 s, オンプレ, GPU, Observability, MLOps, HPC, スケジューラ, AWS,        Front/Backend, コンテナネットワーク, データセンタネットワーク,        キーワード: RDMA, RoCE v 2 • ストレージエンジニア ストレージの企画設計管理運 用 • 大 規模計算基盤エンジニア/ネットワーク ・ インフラ運 用 エンジニア クラスタの物理設計、MN-Core™ を含めた先端システム設計等 43 カジュアル 面 談にお気軽にご応募ください