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
kaita
September 02, 2025
Technology
2
320
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
Kubernetes Meetup Tokyo #71
kaita
September 02, 2025
Tweet
Share
More Decks by kaita
See All by kaita
EKS Pod Identity における推移的な session tags
z63d
1
290
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
2
560
Other Decks in Technology
See All in Technology
stupid jj tricks
indirect
0
7.7k
AWSにおけるTrend Vision Oneの効果について
shimak
0
110
Modern_Data_Stack最新動向クイズ_買収_AI_激動の2025年_.pdf
sagara
0
180
GopherCon Tour 概略
logica0419
2
160
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
10
4.1k
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
4
2.7k
いま注目しているデータエンジニアリングの論点
ikkimiyazaki
0
570
Sidekiq その前に:Webアプリケーションにおける非同期ジョブ設計原則
morihirok
17
7k
Function calling機能をPLaMo2に実装するには / PFN LLMセミナー
pfn
PRO
0
810
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
130
Windows で省エネ
murachiakira
0
150
Flaky Testへの現実解をGoのプロポーザルから考える | Go Conference 2025
upamune
1
390
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Gamification - CAS2011
davidbonilla
81
5.5k
Side Projects
sachag
455
43k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How STYLIGHT went responsive
nonsquared
100
5.8k
Fireside Chat
paigeccino
40
3.7k
It's Worth the Effort
3n
187
28k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Designing for Performance
lara
610
69k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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
最後に