3) 确认你的zfs模块成功安装并加载。
$ lsmod | grep zfs zfs 2813952 3 zunicode 331776 1 zfs zcommon 57344 1 zfs znvpair 90112 2 zfs,zcommon spl 102400 3 zfs,zcommon,znvpair zavl 16384 1 zfs 在Ubuntu 14.04 LTS上安装ZFS1) 停止Docker daemon。
$ sudo systemctl stop docker.service2) 安装software-properties-common包。
$ sudo apt-get install -y software-properties-common Reading package lists... Done Building dependency tree <output truncated>3) 添加zfs-native包。
$ sudo add-apt-repository ppa:zfs-native/stable The native ZFS filesystem for Linux. Install the ubuntu-zfs package. <output truncated> gpg: key F6B0FC61: public key "Launchpad PPA for Native ZFS for Linux" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK4) 获取最新包的列表。
$ sudo apt-get update Ign http://us-west-2.ec2.archive.ubuntu.com trusty InRelease Get:1 http://us-west-2.ec2.archive.ubuntu.com trusty-updates InRelease [64.4 kB] <output truncated> Fetched 10.3 MB in 4s (2,370 kB/s) Reading package lists... Done5) 安装ubuntu-zfs包。
$ sudo apt-get install -y ubuntu-zfs Reading package lists... Done Building dependency tree <output truncated>6) 加载zfs模块。
$ sudo modprobe zfs7) 确认模块是否正确加载。
$ lsmod | grep zfs zfs 2768247 0 zunicode 331170 1 zfs zcommon 55411 1 zfs znvpair 89086 2 zfs,zcommon spl 96378 3 zfs,zcommon,znvpair zavl 15236 1 zfs 在Docker中配置ZFS 一旦安装和加载了ZFS,就可以在Docker中配置ZFS了。
1) 创建一个新的zpool。
上面命令创建了一个名为“zpool-docker”的zpool。这个名称是随意的。
2) 检查zpool是否存在。
3) 在/var/lib/docker上创建和映射一个新的ZFS文件系统。
$ sudo zfs create -o mountpoint=/var/lib/docker zpool-docker/docker4) 检查前面的步骤是否正常工作。
$ sudo zfs list -t all NAME USED AVAIL REFER MOUNTPOINT zpool-docker 93.K 3.4G 9K /zpool-docker zpool-docker/docker 9K 3.4G 9K /var/lib/docker 可以看到,在/var/lib/docker上���射了一个ZFS文件系统,daemon启动后会自动加载zfs存储驱动。
5) 启动Docker daemon。
6) 确认daemon正在使用zfs存储驱动。
$ sudo docker info Containers: 0 Images: 0 Storage Driver: zfs Zpool: zpool-docker Zpool Health: ONLINE Parent Dataset: zpool-docker/docker Space Used By Parent: 27648 Space Available: 4128139776 Parent Quota: no Compression: off Execution Driver: native-0.2 [...] Docker中的ZFS性能 有以下一些因素会影响zfs存储驱动在Docker中的性能。
●内存。内存对ZFS性能影响很大,因为ZFS最初被设计成在拥有大量内存的Sun Solaris服务器上使用的。
●ZFS特性。使用ZFS特性,如重复删除技术,会增加ZFS的内存使用。就内存使用和效率原因而言,建议关闭FS的重复删除特性。
●ZFS缓存。ZFS将磁盘块缓存在被称作adaptive replacement cache(ARC)内存结构体中。ZFS的ARC单拷贝特性使得块的单个缓存拷贝可以被多个文件系统的克隆共享,也就是说多个运行着的容器可以共享缓存块的单个拷贝。这意味着对于PaaS或其他高密度用例来说,ZFS是一个不错的选择。
●存储碎片。碎片是诸如ZFS这种copy-on-write文件系统的副产品。不过,ZFS写128K的块时,会分配slab(多个128K的块)来进行CoW操作,从而尝试减少存储碎片。ZFS intent log(ZIL)和 coalescing of writes(delayed writes)也可以帮忙减少碎片。
●使用原生的Linux ZFS驱动。虽然Docker zfs存储驱动支持ZFS FUSE实现,但在高性能场景下不建议使用ZFS FUSE。原生的ZFS Linux驱动有着更好的性能。
●使用SSD。为了更好的性能,可以使用更快的存储介质(如SSD)。不过,如果你的SSD存储很有限,那么建议你关闭SSD上的ZIL特性。
如果你像实现对每个镜像的存储配额,那么你可以使用--storage-opt选项。
--storage-opt size=256M