EKS의 컨테이너에서 파일 모니터링 수의 상한을 늘립니다.

3214 단어 eksRailskubernetes
EKS의 컨테이너에서 Rails 애플리케이션을 실행하고 있습니다.
어느 날 컨테이너 내에서 rails console 가 일어나지 않게 되었기 때문에 조사했습니다.
$ rails c
FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.

htps : // 기주 b. 코 m / 구아 rd / ぃ s 텐 / ぃ き / ん c 르 아 신 g ぇ - 아몬 t-f-생명 fy-t t rs 를 보면fs.inotify.max_user_watches 의 상한을 바꾸어 주면 문제 없을 것 같습니다.

현재 설정을 확인합니다.
$ cat /proc/sys/fs/inotify/max_user_watches
8192

참고 사이트대로 변경할 수 있는지 시험해 봅니다.
$ echo fs.inotify.max_user_watches=524288 | tee -a /etc/sysctl.conf && sysctl -p
fs.inotify.max_user_watches=524288
sysctl: setting key "fs.inotify.max_user_watches": Read-only file system

하하응. 뭐, 어쩐지 알고 있었지만. . .
어떻게 하면 응이나.

이것은 NG



Docker 컨테이너이므로 궁극적으로 Image로 설정하고 싶습니다.
FROM ruby:2.6.2-slim-stretch
...
RUN echo "fs.inotify.max_user_watches=524288" | tee -a /etc/sysctl.conf
...

에서 build 는 통과하지만 실제 값은 변하지 않습니다.

이것은 OK



그들과 함께 고마운 기사를 찾았습니다.
"Docker는 Kernel 공유한다"고 자주 들었지만 그로 인해 무슨 일이 일어나는지 조사해 본 # 기사가 길기 때문에 먼저 결론

특히 커널 매개변수에서 상한값을 공유하는 경우 컨테이너 호스트간에 자원이 서로 충돌합니다.

즉, EC2의 설정을 컨테이너로 인계하고 있는 것은.
EKS의 노드(EC2) 내에서 설정해 봅니다.
$ echo "fs.inotify.max_user_watches = 524288" >> /etc/sysctl.conf && sysctl -p

컨테이너 내에서 재확인
$ cat /proc/sys/fs/inotify/max_user_watches
524288
$ rails c
Running via Spring preloader in process 194
Loading staging environment (Rails 5.2.3)
irb(main):001:0>

죄송합니다.

[2019-05-24 추가]
GKE에서도 마찬가지이므로 GCE에서 SSH로 설정을 변경하면 괜찮습니다.

좋은 웹페이지 즐겨찾기