Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetes における cgroup driver のしくみ: runwasi の b...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kaita
September 02, 2025
Technology
560
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
Kubernetes Meetup Tokyo #71
kaita
September 02, 2025
More Decks by kaita
See All by kaita
新しい SLO が良い感じにハマっている話
z63d
5
2.3k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
400
【FinOps】データドリブンな意思決定を目指して
z63d
4
760
【SLO】"多様な期待値" と向き合ってみた
z63d
2
590
Raycast Community Japan (CloudNative Days Winter 2025)
z63d
0
110
EKS Pod Identity における推移的な session tags
z63d
1
460
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
2
690
Other Decks in Technology
See All in Technology
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
8.8k
Introduction to Bill One Development Engineer
sansan33
PRO
0
480
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
VPCでもFloatingIPを使いたいんだ
y_kotani
1
130
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
120
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
380
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
3
950
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
8
1.6k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
370
分割40%キーボードにスムーズに入門するには
hoto17296
1
200
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
520
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
KATA
mclloyd
PRO
35
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Crafting Experiences
bethany
1
270
The Curious Case for Waylosing
cassininazir
1
480
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
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
最後に