こんにちは、event大好きマンです。
こんなツールを使ったりして快適イベント監視生活を送っています。
しかしこのeventというもの、完全に信頼するには少し足りなかったようです。
eventは省略される
livenessのfailによりコンテナが再起動しているはずなのにeventには見当たらない、ということがたまにありました。
調べてみたところ、eventが大量発生した場合は一部省略されるようになっているようです。
どういうことなの
tl;dr
https://github.com/kubernetes/client-go/blob/kubernetes-1.13.4/tools/record/events_cache.go#L44-L49
kubernetesの各コンポーネントはeventのハンドリングにこの辺りの仕組み
https://github.com/kubernetes/client-go/blob/kubernetes-1.13.4/tools/record
を使っていますが、これには大量に出されたeventを適度にフィルタする仕組みが入っています。
そしてそのフィルタの基準がtl;drで貼ったリンクの部分、定数で決められています。
- 各コンポーネントはeventハンドリング用のthread(便宜上Recorderと呼ぶ)を作る
- Recorderは25回eventを送ることができ、それを超えるとコンポーネント側でeventを発生させてもRecorderでフィルタされてしまう
- 5分毎に1回ぶん回復する
- 別々のeventでもRecorderを共有していればフィルタの対象になる
といったような感じになってます。
どうすればいいの
そういうものなのでeventを扱う時は頭に入れておきましょう。