解決overlay2儲存驅動的磁碟配額問題

安全劍客發表於2019-05-15
為啥要用overlay2

docker  (核心3.10)上預設儲存驅動是devicemapper 的loop-lvm模式,這種模式是用檔案模擬塊裝置,不推薦生產使用direct lvm又不是一個開箱即用的模式,懶得配置,最關鍵的是 docker in docker的情況下 device mapper是行不通的,典型的場景就是用drone時,構建docker映象就不能正常工作,overlay儲存驅動層數過多時會導致檔案連結數過多可能會耗盡inode,所以當前overlay2是個比較好的選擇。

核心

你需要一個高版本的核心推薦4.9以上,我們用的是4.14,如果使用低核心可能你一些FROM別的基礎映象就跑不了,如用overlay2在centos系統上跑FROM ubuntu的映象(不是必現)。

我們這裡提供了一個免費的核心rpm包 這個在我們生產環境跑了將近一年沒出任何問題。

監控

overlay2如果不做一些特殊操作,cadvisor是監控不到容器內實際使用多少磁碟的,經過xfs和配額配置才能正常監控到

使用xfs檔案系統

不使用xfs就無法做到給每個容器限制10G的大小,就可能出現一個容器的誤操作導致把機器盤全佔完,我們使用了lvm去弄個分割槽出來做xfs檔案系統,當然你也可以不用lvm。

if which lvs &>/dev/null; then
  echo ""; echo -e "Remove last docker lv and mount ......"
  lvremove k8s/docker -y
  lvcreate -y -n docker k8s -L 100G
  mkfs.xfs -n ftype=1 -f /dev/mapper/k8s-docker
  mkdir -p /var/lib/docker
  mount -o pquota,uqnoenforce /dev/mapper/k8s-docker /var/lib/docker
  echo -e "/dev/mapper/k8s-docker                                  /var/lib/docker         xfs     defaults,pquota        0 0" >> /etc/fstab
fi
配置使用overlay2
# cat /etc/docker/daemon.json
{
  "storage-opts": [
    "overlay2.override_kernel_check=true",
    "overlay2.size=10G"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m"
  }
}
systemctl daemon-reload systemctl restart docker

這樣就可以把每個容器磁碟大小限制在10G了


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2644402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章