Docker

了解 Docker 和 Kubernetes 記憶體使用情況

  • June 19, 2019

我正在執行一個帶有一個主節點和兩個工作節點的小型 Kubernetes 集群。我正在嘗試了解它的記憶體使用情況以及我是否已經耗盡了資源……如果是這樣,我應該如何準確地檢測到這一點。

每個節點都有 4 GB 的記憶體並且沒有交換(根據最佳實踐)。根據 Docker,查看其中一個節點,容器使用 16 GB 記憶體。這怎麼可能?

khost1:~$ docker stats --no-stream --format 'table {{.MemUsage}}' | sed 's/\.\([0-9]*\)GiB/\1MiB/g' | sed 's/[A-Za-z]*//g' | awk '{sum += $1} END {print sum "MB"}'
16436.8MB
khost1:~$ free
             total        used        free      shared  buff/cache   available
Mem:        4039552     3255808      234400       54336      549344      473648
Swap:             0           0           0

此外,我在 Kubernetes 儀表板上看到的只是 11.3 GB 的 3.6 GB(跨所有三個節點?)已被保留。我認為這是因為我的 pod 大部分都沒有指定請求和限制。我是否需要這樣做才能讓 Kubernetes 有效地管理記憶體?

docker stats 報告用於磁碟記憶體和使用的頁面,這有點誤導。

如果您的項目對資源利用敏感,則絕對應該使用資源請求和限制參數。

為了保護您的集群資源耗盡,您可能還需要啟用資源配額

一旦啟用它,您就可以通過命名空間中的 pod 來檢查實際資源使用情況

kubectl describe quota

引用自:https://serverfault.com/questions/971827