# ubuntu 22.04 & containerd 踩坑測試 ## 緣由: 主機安裝好 k8s 叢集 (使用 rke2) 後,部署 .net 6 web api 服務時發生以下問題 ``` Unhandled exception. System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open file descriptors has been reached. at System.IO.FileSystemWatcher.StartRaisingEvents() at System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed() at System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean value) at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher() at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(String filter) at Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(String filter) at Microsoft.Extensions.Configuration.FileConfigurationProvider.<.ctor>b__1_0() at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer) at Microsoft.Extensions.Configuration.FileConfigurationProvider..ctor(FileConfigurationSource source) at Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(IConfigurationBuilder builder) at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build() at Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration() at Microsoft.Extensions.Hosting.HostBuilder.Build() at WebService.Program.Main(String[] args) in /src/WebService/Program.cs:line 00 ``` ## 測試方式 ```bash # 確認主機上有沒有裝 lsof 這個套件 sudo dpkg -l | grep lsof # 如果沒有裝的話需要安裝一下 # sudo apt-get install lsof # 查詢 inotify + container lsof -l | grep inotify | grep container # 可以用這個命令對照 PID ps aux ``` 查詢後,在 ubuntu 22.04 上可以發現 inotify + container 的執行緒資料特別多,但是回頭使用 20.04 則沒有這個問題。 因此,如果是使用 .net 建立服務的話,建議暫時不使用 ubuntu 22.04 來建立 k8s 叢集,或是需要針對 appsettings.json 的 hot reload 行為進行調整。 (因為 .net 的 appsettings.json 的 hot reload 行為需要使用 inotify 資源) ## 各項參考資料 1. http://blog.travisgosselin.com/configured-user-limit-inotify-instances/ 2. https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?source=recommendations&view=aspnetcore-7.0 3. https://stackoverflow.com/a/67111195 4. https://github.com/dotnet/aspnetcore/issues/3475#issuecomment-491702858 5. https://blackie1019.gitlab.io/2022/02/22/qemu-exception-throwing-on-x64-emulator-for-docker-with-NET6-NET-Core-on-the-Apple-M1-chip/ 6. https://github.com/dotnet/AspNetCore.Docs/issues/19814#issue-697147144 7. https://blog.gtwang.org/linux/linux-lsof-command-list-open-files-tutorial-examples/