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
3
470
Kubernetes における cgroup driver のしくみ: runwasi の bugfix より
Kubernetes Meetup Tokyo #71
kaita
September 02, 2025
Tweet
Share
More Decks by kaita
See All by kaita
【SLO】"多様な期待値" と向き合ってみた
z63d
2
340
Raycast Community Japan (CloudNative Days Winter 2025)
z63d
0
56
EKS Pod Identity における推移的な session tags
z63d
1
380
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
2
620
Other Decks in Technology
See All in Technology
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
160
元エンジニアPdM、IDEが恋しすぎてCursorに全業務を集約したら、スライド作成まで爆速になった話
doiko123
1
600
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
3
270
親子 or ペアで Mashup for the Future! しゃべって楽しむ 初手AI駆動でものづくり体験
hiroramos4
PRO
0
110
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
150
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
5
1.1k
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.6k
タスク管理も1on1も、もう「管理」じゃない ― KiroとBedrock AgentCoreで変わった"判断の仕事"
yusukeshimizu
5
2.6k
OCI Security サービス 概要
oracle4engineer
PRO
2
13k
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
620
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
290
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
1.3k
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
The browser strikes back
jonoalderson
0
780
Mind Mapping
helmedeiros
PRO
1
120
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
From π to Pie charts
rasagy
0
150
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
820
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
470
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Paper Plane
katiecoart
PRO
0
48k
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
最後に