SlideShare a Scribd company logo
Kubernetes Meetup Tokyo #56 (2023/03/16)
SUDA Kazuki, Preferred Networks, Inc. (@superbrothers)
Kubernetes + containerd で cgroup v2 に移⾏したら
“failed to create fsnotify watcher” エラーが
発⽣する原因と対策
@superbrothers

SUDA Kazuki / @superbrothers
▶ Preferred Networks, Inc. / エンジニア
▶ Scalar, Inc., Datachain, Inc. / 技術アドバイザ
▶ Kubernetes Meetup Tokyo, K8s@home 共同主催者
▶ 技術評論社「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書
▶ オライリー「⼊⾨ Prometheus」、「Kubernetes で実践するクラウドネイティブ DevOps」監訳書
▶ stern ツールメンテナ(https://github.com/stern/stern)
2
@superbrothers

cgroup v2 に移⾏したらエラーが発⽣した
3
$ journalctl -u kubelet -f
Insufficient watch descriptors available. Reverting to -n.
$ kubectl logs -f deploy/nginx
failed to create fsnotify watcher: too many open files
@superbrothers

そもそも cgroup v2 に移⾏すると何がうれしいの(利⽤者視点)
Pod のメモリ要求が保証され、メモリ使⽤量が増加した際の Pod の安定性が向上する。
▶ requests.memory を下回ってシステムにメモリを回収されることがなくなる
▶ limits.memory の80%を超えて使⽤するとシステムがメモリを回収してできる限り OOM Kill を発⽣
しにくくする
4
* Quality-of-Service for Memory Resources | Kubernetes
これまでは Podスケジューリングと
Node MemoryPressure時に
どの Pod をevict するかの
判断に使われていました
@superbrothers

原因調査 (1/3)
containerd-shim processes are leaking inotify instances with cgroups v2 · issue #5670 · containerd/
containerd
▶ cgroup v2 使⽤時にメモリイベント監視⽤の inotify instances がリークしているという報告
+ 調査時点ですでに上記が修正済みの containerd バージョンを使⽤していた
▶ しかし、ここで containerd は cgroup v2 使⽤時に inotify instances を使うようになったことを知る
▶ Ubuntu 20.04/22.04 はデフォルトの上限が 128 なので、上限に達している😅
5
$ sudo find /proc/*/fd -lname anon_inode:inotify | wc -l
128
@superbrothers

原因調査 (2/3)
▶ containerd-shim プロセスあたり2つ以上の inotify instances を使⽤していることが分かる
6
$ sudo find /proc/*/fd -lname anon_inode:inotify | cut -d/ -f3 | xargs -I '{}' -- ps --
no-headers -o '%p %U %c %a %P' -p '{}' | uniq -c | sort -nr | grep containerd-shim
7 2855 root containerd-shim /usr/local/bin/containerd-s 1
5 2737 root containerd-shim /usr/local/bin/containerd-s 1
4 2694 root containerd-shim /usr/local/bin/containerd-s 1
3 8229 root containerd-shim /usr/local/bin/containerd-s 1
3 7982 root containerd-shim /usr/local/bin/containerd-s 1
3 7859 root containerd-shim /usr/local/bin/containerd-s 1
3 7117 root containerd-shim /usr/local/bin/containerd-s 1
2 7720 root containerd-shim /usr/local/bin/containerd-s 1
2 7660 root containerd-shim /usr/local/bin/containerd-s 1
2 7569 root containerd-shim /usr/local/bin/containerd-s 1
2 7494 root containerd-shim /usr/local/bin/containerd-s 1
2 7433 root containerd-shim /usr/local/bin/containerd-s 1
2 4260 root containerd-shim /usr/local/bin/containerd-s 1
1つの Pod に相当
@superbrothers

原因調査 (3/3)
▶ Ubuntu 20.04/22.04 ではデフォルトで inotify instances の上限が 128
▶ containerd は cgroup v2 使⽤時に Pod あたり2つの inotify instances を使⽤する
▶ 1ノード上に作成できる Pods 数は 110 (デフォルト)なので、64の Pod が作成されると
それだけで inotify instances の上限に達してしまいエラーが発⽣する
7
@superbrothers

対策
inotify instances の上限を上げる
▶ 値は⼗分に⼤きければよい
+ inotify instances は実際に作成されなければリソースを消費しない
8
# /etc/sysctl.conf
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
@superbrothers

で、containerd は何のために inotify を使ってるの
コンテナの OOM イベントを知るため
▶ Inotify は Linux カーネルでサポートされているファイルシステムイベント通知システムで、
ファイルシステム上のファイルやディレクトリに対するさまざまなアクション(作成、変更、
削除、移動など)に対して、カーネルがユーザースペースに通知できる
▶ OOM を含むメモリイベントを知るのに cgroup v2 の memory サブシステムで使⽤され
る ”memory.events” ファイルを監視するのに inotify を使⽤している
▶ Pod あたり2つの inotify instances を使⽤するのは、
Pod が少なくともアプリケーションコンテナと pause コンテナの2つから構成されるため
9
内部的にすべての Pod に必ず存在する特殊なコンテナで、
Pod のコンテナ間で名前空間を共有するためなどに使われる
@superbrothers

より詳しくは
▶ Kubernetes: cgroup v2 使⽤時に "failed to create fsnotify watcher: too many open
fi
les" エラーが発
⽣する問題の対策 - Qiita
10
環境情報
▶ OS: Ubuntu 22.04.1 LTS
▶ Kubernetes: v1.25.5
▶ containerd: v1.6.12
機械学習プラットフォームエンジニア
We're hiring! https://www.preferred.jp/ja/careers/
▶ ⾃由度・拡張性・使いやすさのトレードオフが取れた⼤規模機械学習プラットフォームの機能設計と開発
+ 例: 機械学習ワークフローツール、実験管理ツール、GPUやMN-Core向け統合開発環境の構築
▶ ⼤規模機械学習プラットフォームの運⽤と運⽤改善(⾃動化等)
+ 例: ⾃動サーバプロビジョニング、パブリッククラウド連携による運⽤効率化、
インフラ健全性の⾃動診断と保守省⼒化
▶ ⼤規模機械学習プラットフォーム上での計算資源(GPU, MN-Coreを含む)配分の最適化
+ 例: Kubernetes Schedulerの機能拡張、リソース利⽤量制限拡張の開発
▶ 最先端の分散計算基盤技術の Proof of Concept 構築及びプラットフォームでの実⽤化
+ 例: Kubernetes上での分散強化学習実⾏ツール

More Related Content

Similar to Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher" エラーが発生する原因と対策 / Kubernetes Meetup Tokyo #56

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 
Traffic Management with Istio
Traffic Management with IstioTraffic Management with Istio
Traffic Management with Istio
ロフト くん
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
Masahito Zembutsu
 
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
Takahiro Nagasaki
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
Masahito Zembutsu
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Naoki Nagazumi
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656
 
2015-01-27 Introduction to Docker
2015-01-27 Introduction to Docker2015-01-27 Introduction to Docker
2015-01-27 Introduction to Docker
Shuji Yamada
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
Shuntaro Saiba
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
Masahito Zembutsu
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
Akihiro Suda
 
Hack for Docker's Network
Hack for Docker's NetworkHack for Docker's Network
Hack for Docker's Network
Masahito Yoshida
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Preferred Networks
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
OSSラボ株式会社
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Midori Oge
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
 

Similar to Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher" エラーが発生する原因と対策 / Kubernetes Meetup Tokyo #56 (20)

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Traffic Management with Istio
Traffic Management with IstioTraffic Management with Istio
Traffic Management with Istio
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
OpenContrail勉強会資料 - HelmによるOpenContrail構築の概要と勘所 -
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
2015-01-27 Introduction to Docker
2015-01-27 Introduction to Docker2015-01-27 Introduction to Docker
2015-01-27 Introduction to Docker
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
 
Hack for Docker's Network
Hack for Docker's NetworkHack for Docker's Network
Hack for Docker's Network
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 

More from Preferred Networks

PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
Preferred Networks
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
 
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
Preferred Networks
 
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
Preferred Networks
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Preferred Networks
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
Preferred Networks
 
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
Preferred Networks
 
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るKubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Preferred Networks
 
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Preferred Networks
 
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
Preferred Networks
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Preferred Networks
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
Preferred Networks
 
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
Preferred Networks
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
Preferred Networks
 
Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50
Preferred Networks
 
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
Preferred Networks
 

More from Preferred Networks (20)

PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
 
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
 
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
 
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
 
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るKubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
 
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
 
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
 
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
 
Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50
 
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
PFN Summer Internship 2021 / Kohei Shinohara: Charge Transfer Modeling in Neu...
 

Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher" エラーが発生する原因と対策 / Kubernetes Meetup Tokyo #56

  • 1. Kubernetes Meetup Tokyo #56 (2023/03/16) SUDA Kazuki, Preferred Networks, Inc. (@superbrothers) Kubernetes + containerd で cgroup v2 に移⾏したら “failed to create fsnotify watcher” エラーが 発⽣する原因と対策
  • 2. @superbrothers  SUDA Kazuki / @superbrothers ▶ Preferred Networks, Inc. / エンジニア ▶ Scalar, Inc., Datachain, Inc. / 技術アドバイザ ▶ Kubernetes Meetup Tokyo, K8s@home 共同主催者 ▶ 技術評論社「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書 ▶ オライリー「⼊⾨ Prometheus」、「Kubernetes で実践するクラウドネイティブ DevOps」監訳書 ▶ stern ツールメンテナ(https://github.com/stern/stern) 2
  • 3. @superbrothers  cgroup v2 に移⾏したらエラーが発⽣した 3 $ journalctl -u kubelet -f Insufficient watch descriptors available. Reverting to -n. $ kubectl logs -f deploy/nginx failed to create fsnotify watcher: too many open files
  • 4. @superbrothers  そもそも cgroup v2 に移⾏すると何がうれしいの(利⽤者視点) Pod のメモリ要求が保証され、メモリ使⽤量が増加した際の Pod の安定性が向上する。 ▶ requests.memory を下回ってシステムにメモリを回収されることがなくなる ▶ limits.memory の80%を超えて使⽤するとシステムがメモリを回収してできる限り OOM Kill を発⽣ しにくくする 4 * Quality-of-Service for Memory Resources | Kubernetes これまでは Podスケジューリングと Node MemoryPressure時に どの Pod をevict するかの 判断に使われていました
  • 5. @superbrothers  原因調査 (1/3) containerd-shim processes are leaking inotify instances with cgroups v2 · issue #5670 · containerd/ containerd ▶ cgroup v2 使⽤時にメモリイベント監視⽤の inotify instances がリークしているという報告 + 調査時点ですでに上記が修正済みの containerd バージョンを使⽤していた ▶ しかし、ここで containerd は cgroup v2 使⽤時に inotify instances を使うようになったことを知る ▶ Ubuntu 20.04/22.04 はデフォルトの上限が 128 なので、上限に達している😅 5 $ sudo find /proc/*/fd -lname anon_inode:inotify | wc -l 128
  • 6. @superbrothers  原因調査 (2/3) ▶ containerd-shim プロセスあたり2つ以上の inotify instances を使⽤していることが分かる 6 $ sudo find /proc/*/fd -lname anon_inode:inotify | cut -d/ -f3 | xargs -I '{}' -- ps -- no-headers -o '%p %U %c %a %P' -p '{}' | uniq -c | sort -nr | grep containerd-shim 7 2855 root containerd-shim /usr/local/bin/containerd-s 1 5 2737 root containerd-shim /usr/local/bin/containerd-s 1 4 2694 root containerd-shim /usr/local/bin/containerd-s 1 3 8229 root containerd-shim /usr/local/bin/containerd-s 1 3 7982 root containerd-shim /usr/local/bin/containerd-s 1 3 7859 root containerd-shim /usr/local/bin/containerd-s 1 3 7117 root containerd-shim /usr/local/bin/containerd-s 1 2 7720 root containerd-shim /usr/local/bin/containerd-s 1 2 7660 root containerd-shim /usr/local/bin/containerd-s 1 2 7569 root containerd-shim /usr/local/bin/containerd-s 1 2 7494 root containerd-shim /usr/local/bin/containerd-s 1 2 7433 root containerd-shim /usr/local/bin/containerd-s 1 2 4260 root containerd-shim /usr/local/bin/containerd-s 1 1つの Pod に相当
  • 7. @superbrothers  原因調査 (3/3) ▶ Ubuntu 20.04/22.04 ではデフォルトで inotify instances の上限が 128 ▶ containerd は cgroup v2 使⽤時に Pod あたり2つの inotify instances を使⽤する ▶ 1ノード上に作成できる Pods 数は 110 (デフォルト)なので、64の Pod が作成されると それだけで inotify instances の上限に達してしまいエラーが発⽣する 7
  • 8. @superbrothers  対策 inotify instances の上限を上げる ▶ 値は⼗分に⼤きければよい + inotify instances は実際に作成されなければリソースを消費しない 8 # /etc/sysctl.conf fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=524288
  • 9. @superbrothers  で、containerd は何のために inotify を使ってるの コンテナの OOM イベントを知るため ▶ Inotify は Linux カーネルでサポートされているファイルシステムイベント通知システムで、 ファイルシステム上のファイルやディレクトリに対するさまざまなアクション(作成、変更、 削除、移動など)に対して、カーネルがユーザースペースに通知できる ▶ OOM を含むメモリイベントを知るのに cgroup v2 の memory サブシステムで使⽤され る ”memory.events” ファイルを監視するのに inotify を使⽤している ▶ Pod あたり2つの inotify instances を使⽤するのは、 Pod が少なくともアプリケーションコンテナと pause コンテナの2つから構成されるため 9 内部的にすべての Pod に必ず存在する特殊なコンテナで、 Pod のコンテナ間で名前空間を共有するためなどに使われる
  • 10. @superbrothers  より詳しくは ▶ Kubernetes: cgroup v2 使⽤時に "failed to create fsnotify watcher: too many open fi les" エラーが発 ⽣する問題の対策 - Qiita 10 環境情報 ▶ OS: Ubuntu 22.04.1 LTS ▶ Kubernetes: v1.25.5 ▶ containerd: v1.6.12
  • 11. 機械学習プラットフォームエンジニア We're hiring! https://www.preferred.jp/ja/careers/ ▶ ⾃由度・拡張性・使いやすさのトレードオフが取れた⼤規模機械学習プラットフォームの機能設計と開発 + 例: 機械学習ワークフローツール、実験管理ツール、GPUやMN-Core向け統合開発環境の構築 ▶ ⼤規模機械学習プラットフォームの運⽤と運⽤改善(⾃動化等) + 例: ⾃動サーバプロビジョニング、パブリッククラウド連携による運⽤効率化、 インフラ健全性の⾃動診断と保守省⼒化 ▶ ⼤規模機械学習プラットフォーム上での計算資源(GPU, MN-Coreを含む)配分の最適化 + 例: Kubernetes Schedulerの機能拡張、リソース利⽤量制限拡張の開発 ▶ 最先端の分散計算基盤技術の Proof of Concept 構築及びプラットフォームでの実⽤化 + 例: Kubernetes上での分散強化学習実⾏ツール