gashirar's blog

ウイスキーがすき/美味しいものがすき/k8sがすき

kubectl top podとdocker statsの結果が違うのはなぜ?

何故かkubectl top poddocker statsの結果は同じになると思い込んでいたが、やってみると異なる値が。 気になったのでざっと調べてみた。

www.ibm.com

詳細は上記を読んでもらうとして、ざっくり言うと

  • (当たり前だが)計算の仕方が異なる
    • kubectl top podはcAdvisorが収集するcontainer_memory_working_set_bytes
    • docker stats/sys/fs/cgroup/memoryにある項目のusage_in_bytes-cacheの値

cAdvisorのソースをみてみると、workingSetは下記で計算をしている。 多分こちらも/sys/fs/cgroup/memoryの項目から計算している模様。 (そもそもWorkingSetってどういう意味?みたいな議論もあるが、それは一旦置いておくことにする。)

cadvisor/handler.go at master · google/cadvisor · GitHub

コンテナランタイムごとにstats系の結果が異なることはあるのだろうか。 標準化されていそうな気はするが。