剑客
关注科技互联网

Docker存储空间扩容(DeviceMapper Driver)

背景

Docker默认由稀疏文件文件构成Devicemapper存储池,结构图大致如下:

Docker存储空间扩容(DeviceMapper Driver)

一般稀疏文件大小为100GB,所以Docker本地存储空间上限也就是100GB,当这个空间满了,怎样扩容呢?

步骤

根据上面的结构图,扩容是从下至上,分层进行的

1.确认Docker存储空间及构成

Docker存储空间扩容(DeviceMapper Driver)

loop设备

Docker存储空间扩容(DeviceMapper Driver)

稀疏文件

Docker存储空间扩容(DeviceMapper Driver)

2. 扩容稀疏文件

Docker存储空间扩容(DeviceMapper Driver)

这个时候,稀疏文件被“扩大”了,稀疏文件模拟的loop设备还没有扩大

Docker存储空间扩容(DeviceMapper Driver)

就像这样

Docker存储空间扩容(DeviceMapper Driver)

3. 扩容Loop设备

Docker存储空间扩容(DeviceMapper Driver)

这个时候,稀疏文件和Loop设备都被扩大了,由Loop设备构成的thin pool还没有扩大(这里说明一下, 0 209715200 thin-pool 中的单位是512bytes-sector,所以0 209715200代表100GB的空间)

Docker存储空间扩容(DeviceMapper Driver)

就像这样

Docker存储空间扩容(DeviceMapper Driver)

4. 扩容thin pool

Docker存储空间扩容(DeviceMapper Driver)

经过suspend/load/resume三个步骤,thin pool的空间也被扩大了;需要说明的是,suspend和resume动作之间,pool是不接受I/O的,也就是说container的I/O或其他对于thin pool的I/O都会被hung住

5. 再次确认Docker存储空间

Docker存储空间扩容(DeviceMapper Driver)

这时候,整体扩容已完成,小鲸鱼又可以任性遨游了

Docker存储空间扩容(DeviceMapper Driver)

补充

实际上,稀疏文件-Loop设备够成DeviceMapper Thin Pool这个方法,官方是不推荐在生产环境使用的:

"The default mode for Docker running the devicemapper storage driver is loop-lvm. This mode uses sparse files and suffers from poor performance. It is not recommended for production. The recommended mode for production environments is direct-lvm where the storage driver writes directly to raw block devices."

https://docs.docker.com/engine … iver/

对于direct-lvm mode的配置文档很多,比如: http://blog.opskumu.com/docker-storage-setup.html 这里就不再赘述

direct-lvm mode只是把loop device换成raw block device:

Docker存储空间扩容(DeviceMapper Driver)

其中,raw block device可以由docker的cloud provider(比如OpenStack的Cinder)提供,届时Docker存储空间的扩容、备份、迁移都会非常方便

参考

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址