Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetes における cgroup driver のしくみ: runwasi の b...
Search
kaita
September 02, 2025
Technology
2
390
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
Kubernetes Meetup Tokyo #71
kaita
September 02, 2025
Tweet
Share
More Decks by kaita
See All by kaita
Raycast Community Japan (CloudNative Days Winter 2025)
z63d
0
33
EKS Pod Identity における推移的な session tags
z63d
1
320
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
2
590
Other Decks in Technology
See All in Technology
Modern Data Stack大好きマンが語るSnowflakeの魅力
sagara
0
300
シンプルを極める。アンチパターンなDB設計の本質
facilo_inc
2
1.6k
MS Ignite 2025で発表されたFoundry IQをRecap
satodayo
3
250
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
130
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
0
540
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
190
Design System Documentation Tooling 2025
takanorip
2
980
Oracle Technology Night #95 GoldenGate 26ai の実装に迫る1
oracle4engineer
PRO
0
110
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
650
Agents IA : la nouvelle frontière des LLMs (Tech.Rocks Summit 2025)
glaforge
0
460
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
120
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Raft: Consensus for Rubyists
vanstee
141
7.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Automating Front-end Workflow
addyosmani
1371
200k
A Modern Web Designer's Workflow
chriscoyier
697
190k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Transcript
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より Kubernetes
Meetup Tokyo #71
自己紹介 中村 海太(なかむら かいた) 株式会社 primeNumber / SRE 普段は EKS
を使っています X (Twitter): @z63d_
アジェンダ cgroup driver に関する runwasi の bugfix の話と KEP の話をそれぞれ少しづつします
cgroup driver について runwasi とは 対応した Issue について バグの修正 気になったこと / KEP-4033 について
cgroup driver について
cgroup とは リソースの分離、使用状況の監視、制限を行う Linux プロセスのグループ。 cgroup は Linux カーネルの機能であり、一連のプロセスに対して、リソース使用量(CPU、メ モリー、ディスク
I/O、ネットワーク)を制限、監視、分離するものです。 https://github.com/kubernetes/website/blob/snapshot-initial- v1.34/content/ja/docs/reference/glossary/cgroup.md
Kubernetes で利用可能な 2 種類の cgroup driver cgroup を操作する cgroup driver
は 2 種類ある systemd OCI runtime が dbus 経由で systemd と やりとりをして cgroup を設定 cgroupfs OCI runtime が mkdir でパスを作成 使い分け systemd が init システムである場合、cgroupfs は非推奨 cgroup v2 を使用する場合は、systemd を使うように記載されている https://github.com/kubernetes/website/blob/snapshot-initial- v1.34/content/en/docs/concepts/architecture/cgroups.md#requirements ※ OCI runtime: runc, youki など
cgroup のパスについて /sys/fs/cgroup 以下のディレクトリ・ファイルにリソース制限などの cgroup の設定が反映される cgroup のパス設定の流れ 1. containerd
(CRI runtime) から OCI runtime に config.json が渡される 2. config.json の cgroupsPath (cgroup driver によってフォーマットが異なる)を OCI runtime が処理してパスを決定する https://github.com/opencontainers/runtime-spec/blob/v1.2.0/config-linux.md#cgroups-path systemd cgroupsPath を変換したものが /sys/fs/cgroup 以下のパスになる cgroupfs cgroupsPath がそのまま /sys/fs/cgroup 以下のパスになる
Kubernetes における cgroup driver の設定方法 kubelet と containerd それぞれで cgroup
driver の設定が独立して存在する containerd の設定が OCI runtime に伝搬される 最終的に kubelet と OCI runtime の cgroup driver の設定が一致する必要がある 💡 kubelet は Pod レベルの cgroups、CRI runtime は container レベルの cgroups を管理 独立した設定 ⋯⋯ kubelet --cgroup-driver (systemd / cgroupfs) containerd (CRI runtime) SystemdCgroup (true / false) SystemdCgroup を伝搬 runc, youki など (OCI runtime) --systemd-cgroup (flag)
runwasi とは
runwasi https://github.com/containerd/runwasi containerd のサブプロジェクト WebAssembly を Kubernetes 上で動かすための containerd-shim をつくるライブラリ
Spin で利用されている Spin は AKS、EKS で使えるらしい OCI runtime の機能をサポートするために youki libcontainer を利用している
対応した Issue について
Pod level metrics are not being surfaced #821 https://github.com/containerd/runwasi/issues/821 現象:
containerd-shim-spin(runwasi ベースの shim)を利用している Spin アプリケーションの Pod レベルのメトリクスが取得できない 原因: kubelet が systemd cgroup driver の設定だったが、 runwasi (youki) が cgroupfs cgroup driver で動作していた
cgroup driver の設定の不一致 独立した設定 ⋯⋯ containerd の設定が youki に伝搬されていなかった cgroupfs
を使うようにハードコーディングされていた kubelet と youki の cgroup driver の設定の不一致 kubelet --cgroup-driver (systemd / cgroupfs) systemd containerd (CRI runtime) SystemdCgroup (true / false) ✗ SystemdCgroup 伝搬されない youki libcontainer (OCI runtime) --systemd-cgroup (flag) cgroupfs
バグの詳細 systemd cgroupsPath: kubepods-besteffort-pod012abc.slice:cri-containerd:345def 実際のパス: /sys/fs/cgroup/kubepods.slice/kubepods-besteffort.slice/kubepods- besteffort-pod012abc.slice/cri-containerd-345def.scope cgroupfs cgroupsPath: /kubepods/besteffort/pod012abc/345def
実際のパス: /sys/fs/cgroup/kubepods/besteffort/pod012abc/345def 今回のバグ systemd 形式の cgroupsPath を cgroupfs で処理していた cgroupsPath: kubepods-besteffort-pod012abc.slice:cri-containerd:345def 実際のパス: /sys/fs/cgroup/kubepods-besteffort-pod012abc.slice:cri-containerd:345def cgroupsPath: https://github.com/opencontainers/runtime-spec/blob/v1.2.1/config-linux.md#cgroups-path
バグの修正
containerd の設定が youki に伝搬されるようにした https://github.com/containerd/runwasi/pull/864 containerd の config.toml で渡される情報をデシリアライズして SystemdCgroup
設定を取得 youki が SystemdCgroup 設定を使って cgroup driver を動的に設定できるようにした 独立した設定 ⋯⋯ kubelet --cgroup-driver (systemd / cgroupfs) containerd (CRI runtime) SystemdCgroup (true / false) SystemdCgroup を伝搬 youki libcontainer (OCI runtime) --systemd-cgroup (flag) 動的に設定可能に
気になったこと / KEP-4033 について
気になったこと containerd - OCI runtime 間の設定は自動的に同じになる kubelet - containerd 間では
2 つの独立した cgroup driver の設定があるため、 2 つを手動で合わせる必要がある 🤔 イケてない 独立した設定 ⋯⋯ kubelet --cgroup-driver (systemd / cgroupfs) containerd (CRI runtime) SystemdCgroup (true / false) SystemdCgroup を伝搬 youki libcontainer (OCI runtime) --systemd-cgroup (flag)
KEP-4033: Discover cgroup driver from CRI https://github.com/kubernetes/enhancements/issues/4033 課題 cgroup driver
に対して 2 つの独立した設定(kubelet、containerd)がある 2 つの設定は同期している必要があり、これは手動で行う必要がある 解決策 CRI API を拡張して、kubelet が containerd から cgroup driver の設定を 自動検出 できるようにする これにより、kubelet と containerd 間で手動で設定を合わせる必要がなくなる
KEP-4033 の現状 先週リリースの v1.34.0 で GA
kubelet と containerd 間で cgroup driver の設定が自動的に同期されるようになった kubelet --cgroup-driver (systemd
/ cgroupfs) 自動で同期 containerd (CRI runtime) SystemdCgroup (true / false) SystemdCgroup を伝搬 youki libcontainer (OCI runtime) --systemd-cgroup (flag)
Issue の調査内容 ↓ runwasi の cgroup に関する Issue 調査: https://zenn.dev/z63d/articles/48eb53ca4e8467
最後に