更改docker中默认的存储方式

安装docker时如果不指定docker的存储方式,默认是使用devicemapper类型下的loop-lvm模式,它使用OS层面离散的文件来构建精简池(thin pool)。该模式主要是方便Docker能够简单的被”开箱即用(out-of-the-box)”而无需额外的配置。但如果是在生产环境中部署Docker,建议使用direct-lvm模式,它使用块设备构建精简池来存放镜像和容器的数据。为方便用户将默认的loop-lvm模式更改成direct-loop模式,我们提供了更改脚本。

脚本

更改docker存储方式的脚本如下表所示:

文件名说明下载地址
change_to_direct_lvm_centos.sh适用于centoshttp://domeos-script.bjctc.scs.sohucs.com/change_to_direct_lvm_centos.sh
change_to_direct_lvm_ubuntu.sh适用于ubuntuhttp://domeos-script.bjctc.scs.sohucs.com/change_to_direct_lvm_ubuntu.sh

使用方式

  • 显示帮助信息
  1. bash change_to_direct_lvm_centos.sh help
  • 更改docker存储方式在各个需要更改docker存储方式的主机节点上执行如下命令
  1. sudo bash change_to_direct_lvm_centos.sh [options]

说明

  • 由于更改了存储方式,之前主机节点上的容器和数据都将消失。
  • 更改存储方式的过程中,主机节点会临时变成不可调度,节点上的pod实例会被迁移到其他节点。
  • 请在确保当前主机已经安装了docker的情况下,执行该脚本。
  • 如果您的k8s集群不是使用DomeOS的官方脚本安装,请注意修改脚本中的K8S_INSTALL_PATH参数。参数说明
  1. --api-server kubernetesapiserver的地址(必须)。
  2. --disk-parts docker存储所用的磁盘或者分区,可以设置多个,以逗号分隔(必须)。脚本会使用这些磁盘或者分区建立物理卷,因此请确保该磁盘或者分区未被系统占用。
  3. --kube-node-name 主机在kubernetes集群中的节点名称,默认为主机名。
  4. --vg-name 逻辑卷组的名称,默认为vgdomeos
  5. --pool-percent 精简池数据空间占卷组空间的百分比,默认为75%。
  6. --poolmeta-percent 精简池元数据空间占卷组空间的百分比,默认为5%。
  7. --autoextend-threshold 设置精简池数据空间自动扩容的阈值,如果精简池所用空间超过这个阈值,将按照自动扩容的百分比进行扩容,默认为80%。
  8. --autoextend-percent 精简池每次自动扩容时,增加的百分比,默认为10%。
  9. --devicemapper-fs 设置devicemapper文件系统的格式,默认为ext4
  10. --lvm-graph-path docker运行时的graph路径,不能与loop-lvm模式下的路径一样,默认为/var/lib/docker-lvm

样例

若需要将主机节点test-150-100上的docker存储存储方式从loop-lvm模式更改为direct-loop模式,此时kubernetes集群kube-apiserver服务地址为http://10.10.10.10:8080,docker存储所用的分区为/dev/sda和/dev/sdb2,则需要在主机上执行:

  1. sudo bash change_to_direct_lvm_centos.sh \
  2. --api-server 10.10.10.10:8080 \
  3. --disk-parts /dev/sda,/dev/sdb1

验证

通过docker info查看docker精简池信息。

  1. $ sudo docker info | grep 'Pool Name'

如果使用默认的卷组名称,可以看到以下信息:

Pool Name: vgdomeos-thinpool

参考

问题汇总

1. 如果执行完脚本后想回滚到以前的存储模式怎么办

可以执行

  1. $ sudo bash change_to_direct_lvm_centos.sh restore