docker-ce-17.07.0 版本开始支持overlay2的磁盘配额,该版本 8月29号release了,现在可以使用edge版本:
overlay2的配额限制是有条件的:
- 基于xfs文件系统(如果不开启配额的话,ext4上也能支持,如果内核版本够高的话,btrfs也能支持)
- xfs文件系统挂载时使用pquota选项(pquota和gquota 不能同时出现)
1mount -o pquota,uqnoenforce /dev/rbd2 /xfs - xfs 格式化时需要ftype=1,用于enable d_type
xfs的pquota是个啥东西: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/xfsquota.html
XFS quotas are enabled at mount time, with specific mount options. Each mount option can also be specified as
noenforce
; this will allow usage reporting without enforcing any limits. Valid quota mount options are:-
uquota
/uqnoenforce
– User quotas -
gquota
/gqnoenforce
– Group quotas -
pquota
/pqnoenforce
– Project quota
注意:
pquota和gquota 不能同时出现
- uquota: 强制限制,绝对不能超限
- uqnoenforce:可以超限,但是会贴罚单
如果是kickstart 安装的系统,用如下命令:
1 |
logvol / --fstype xfs --mkfsoptions='-n ftype=1' |
mkfs.xfs 还有很多选项,专门研究存储的话,还是要了解的
参考: http://foxhound.blog.51cto.com/1167932/1841487
docker-ce-17.07.0 关于xfs上的overlay2存储驱动的磁盘限额,使用效果如下:
注意:
- –storage-opt时, 使用的是size,而不是overlay2.size;关键是多处文档描述的都是overlay2.size=1g,而实际上却不识别overlay2.size,识别的却是size
- 做磁盘限额的时候,基础镜像的大小显然没有计算在内; 不做磁盘限额的时候,显示的是整个overlay文件系统的使用情况
- 据说daemon.json 中也是可以定义存储选项的,但是测试发现不管使用overlay2.size还是size都不报错,也都不生效(但是源码上确实都是overlay2.size呢)
- docker info中不显示默认的存储配额
- 关于存储选项: overlay2.override_kernel_check, 文档 要求必须设置为true,实际情况是:
- 如果设置为true,docker会帮忙检查内核版本够不够高,不够高就直接报错了
- 如果设置为false,docker依然会帮忙检查内核版本够不够高,不够包就记录一个警告日志
阿里云提供的centos7镜像的文件系统类型似乎都是ext4的
并非所有的D状态的进程都是kill不掉的:
docker 的磁盘限额是可以通过xfs_quota 查看到的(kernel内核版本要求4.6以上才能查看到,小于4.6的内核版本上不是不支持限额,只是通过xfs_quota 看不到而已)