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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kaita
September 02, 2025
Technology
3
460
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
47
EKS Pod Identity における推移的な session tags
z63d
1
360
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
2
610
Other Decks in Technology
See All in Technology
ファイルシステムの不整合
sat
PRO
2
110
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
57
47k
30分でわかる「ネットワーク図の描き方入門」/infraengbooks56
corestate55
1
350
LiDARが変えたARの"距離感"
zozotech
PRO
0
270
今、求められるデータエンジニア
waiwai2111
2
1.1k
AI時代のAPIファースト開発
nagix
1
230
EKSで実践する オブザーバビリティの現在地
honmarkhunt
2
280
Goで実現する堅牢なアーキテクチャ:DDD、gRPC-connect、そしてAI協調開発の実践
fujidomoe
3
400
バイブコーディングで作ったものを紹介
tatsuya1970
0
150
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
1
250
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
340
AIエージェントのメモリについて
shibuiwilliam
0
320
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How GitHub (no longer) Works
holman
316
140k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
62
It's Worth the Effort
3n
188
29k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Music & Morning Musume
bryan
47
7.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
120
Statistics for Hackers
jakevdp
799
230k
Context Engineering - Making Every Token Count
addyosmani
9
680
Mobile First: as difficult as doing things right
swwweet
225
10k
ラッコキーワード サービス紹介資料
rakko
1
2.4M
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
最後に