配置Docker使用Convoy存储插件
2017-12-14 14:08
393 查看
操作环境
[root@docker-node-1 ~]# docker version Client: Version: 1.13.1 API version: 1.26 Go version: go1.7.5 Git commit: 092cba3 Built: Wed Feb 8 06:38:28 2017 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 092cba3 Built: Wed Feb 8 06:38:28 2017 OS/Arch: linux/amd64 Experimental: false
[root@docker-node-1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
操作步骤
按照官方说法,Convoy支持多种后端存储,例如devicemapper,nfs,ebs等等,这里就以devicemapper以及nfs为例进行配置。配置NFS为Convoy后端存储
1.配置NFS Server#yum -y install nfs-utils
配置nfs目录
[root@docker-manager ~]# vi /etc/exports /convoy-nfs *(rw,no_root_squash,no_all_squash,sync)
启动nfs
[root@docker-manager ~]# systemctl start rpcbind [root@docker-manager ~]# systemctl start nfs
2.配置NFS Client
#yum -y install nfs-utils
挂载NFS Server
[root@docker-node-1 ~]# mount -t nfs 10.10.200.226:/convoy-nfs /convoy-nfs/
3.配置Convoy
a.下载Convoy
#wget https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz #tar xvzf convoy.tar.gz #cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
b.配置Convoy
#mkdir -p /etc/docker/plugins/ #bash -c 'echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec'
c.启动Convoy
[root@docker-node-1 rancher]# convoy daemon --drivers vfs --driver-opts vfs.path=/convoy-nfs DEBU[0000] Creating config at /var/lib/rancher/convoy pkg=daemon DEBU[0000] driver=vfs driver_opts=map[vfs.path:/convoy-nfs] event=init pkg=daemon reason=prepare root=/var/lib/rancher/convoy DEBU[0000] driver=vfs event=init pkg=daemon reason=complete DEBU[0000] Registering GET, /info pkg=daemon DEBU[0000] Registering GET, /volumes/list pkg=daemon DEBU[0000] Registering GET, /volumes/ pkg=daemon DEBU[0000] Registering GET, /snapshots/ pkg=daemon DEBU[0000] Registering GET, /backups/list pkg=daemon DEBU[0000] Registering GET, /backups/inspect pkg=daemon DEBU[0000] Registering POST, /backups/create pkg=daemon DEBU[0000] Registering POST, /volumes/create pkg=daemon DEBU[0000] Registering POST, /volumes/mount pkg=daemon DEBU[0000] Registering POST, /volumes/umount pkg=daemon DEBU[0000] Registering POST, /snapshots/create pkg=daemon DEBU[0000] Registering DELETE, /volumes/ pkg=daemon DEBU[0000] Registering DELETE, /snapshots/ pkg=daemon DEBU[0000] Registering DELETE, /backups pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Create pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Remove pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Mount pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Unmount pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Path pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Get pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.List pkg=daemon DEBU[0000] Registering plugin handler POST, /Plugin.Activate pkg=daemon
d.创建Volume
[root@docker-node-1 ~]# convoy create nfstest
e.查看Volume
[root@docker-node-1 ~]# convoy list { "nfstest": { "Name": "nfstest", "Driver": "vfs", "MountPoint": "", "CreatedTime": "Thu Dec 14 00:40:04 -0500 2017", "DriverInfo": { "Driver": "vfs", "MountPoint": "", "Path": "/convoy-nfs/nfstest", "PrepareForVM": "false", "Size": "0", "VolumeCreatedAt": "Thu Dec 14 00:40:04 -0500 2017", "VolumeName": "nfstest" }, "Snapshots": {} } } [root@docker-node-1 ~]# convoy inspect nfstest { "Name": "nfstest", "Driver": "vfs", "MountPoint": "", "CreatedTime": "Thu Dec 14 00:40:04 -0500 2017", "DriverInfo": { "Driver": "vfs", "MountPoint": "", "Path": "/convoy-nfs/nfstest", "PrepareForVM": "false", "Size": "0", "VolumeCreatedAt": "Thu Dec 14 00:40:04 -0500 2017", "VolumeName": "nfstest" }, "Snapshots": {} }
也可以通过docker volume查看到
[root@docker-node-1 ~]# docker volume ls DRIVER VOLUME NAME block:latest bbtest block:latest blockbridge-3 local blockbridgesimulator_bb_data local centos7-1 local centos7-2 block:latest data block:latest data1 block:latest data2 block:latest data3 local dmtest convoy nfstest local test [root@docker-node-1 ~]# docker volume ls -f driver=convoy DRIVER VOLUME NAME convoy nfstest
f.创建Container
通过上面的volume,创建container
[root@docker-node-1 ~]# docker run -ti -v nfstest:/data --volume-driver=convoy --name convoycentos centos [root@e53d2469c662 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-253:1-1073870859-68690cb6b91e73d7e94e7fa854386256c3006a7845ae9763be1a18df1f9ecb8d 10G 247M 9.8G 3% / tmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos-root 905G 163G 743G 18% /data shm 64M 0 64M 0% /dev/shm tmpfs 7.8G 0 7.8G 0% /sys/firmware
g.创建snapshot
可以在上面的container的data目录下,创建文件nfstest,并写入字符nfstest
[root@e53d2469c662 /]# touch /data/nfstest [root@e53d2469c662 /]# echo nfstest > /data/nfstest [root@e53d2469c662 /]# cat /data/nfstest nfstest
此时,我们针对nfstest volume进行snapshot操作,我们可以查看到nfstest volume inspect信息里面多了snapshot一栏
[root@docker-node-1 ~]# convoy snapshot create nfstest --name nfstestsnap1 nfstestsnap1 [root@docker-node-1 ~]# convoy inspect nfstest { "Name": "nfstest", "Driver": "vfs", "MountPoint": "/convoy-nfs/nfstest", "CreatedTime": "Thu Dec 14 00:40:04 -0500 2017", "DriverInfo": { "Driver": "vfs", "MountPoint": "/convoy-nfs/nfstest", "Path": "/convoy-nfs/nfstest", "PrepareForVM": "false", "Size": "0", "VolumeCreatedAt": "Thu Dec 14 00:40:04 -0500 2017", "VolumeName": "nfstest" }, "Snapshots": { "nfstestsnap1": { "Name": "nfstestsnap1", "CreatedTime": "Thu Dec 14 00:49:27 -0500 2017", "DriverInfo": { "Driver": "vfs", "FilePath": "/var/lib/rancher/convoy/vfs/snapshots/nfstest_nfstestsnap1.tar.gz", "SnapshotCreatedAt": "Thu Dec 14 00:49:27 -0500 2017", "SnapshotName": "nfstestsnap1", "VolumeUUID": "nfstest" } } } }
h.对snapshot进行备份,还原
对snapshot进行备份
[root@docker-node-1 ~]# convoy backup create nfstestsnap1 --dest vfs:///convoy-nfs/ vfs:///convoy-nfs/?backup=backup-fd83d8d5e82640cf\u0026volume=nfstest
对备份进行还原到新的volume中
[root@docker-node-1 ~]# convoy create backup1 --backup vfs:///convoy-nfs/?backup=backup-fd83d8d5e82640cf\u0026volume=nfstest backup1 [root@docker-node-1 ~]# convoy list { "backup1": { "Name": "backup1", "Driver": "vfs", "MountPoint": "", "CreatedTime": "Thu Dec 14 00:57:20 -0500 2017", "DriverInfo": { "Driver": "vfs", "MountPoint": "", "Path": "/convoy-nfs/backup1", "PrepareForVM": "false", "Size": "0", "VolumeCreatedAt": "Thu Dec 14 00:57:20 -0500 2017", "VolumeName": "backup1" }, "Snapshots": {} }, "nfstest": { "Name": "nfstest", "Driver": "vfs", "MountPoint": "/convoy-nfs/nfstest", "CreatedTime": "Thu Dec 14 00:40:04 -0500 2017", "DriverInfo": { "Driver": "vfs", "MountPoint": "/convoy-nfs/nfstest", "Path": "/convoy-nfs/nfstest", "PrepareForVM": "false", "Size": "0", "VolumeCreatedAt": "Thu Dec 14 00:40:04 -0500 2017", "VolumeName": "nfstest" }, "Snapshots": { "nfstestsnap1": { "Name": "nfstestsnap1", "CreatedTime": "Thu Dec 14 00:49:27 -0500 2017", "DriverInfo": { "Driver": "vfs", "FilePath": "/var/lib/rancher/convoy/vfs/snapshots/nfstest_nfstestsnap1.tar.gz", "SnapshotCreatedAt": "Thu Dec 14 00:49:27 -0500 2017", "SnapshotName": "nfstestsnap1", "VolumeUUID": "nfstest" } } } } }
我们可以通过backup volume启动新的container
[root@docker-node-1 ~]# docker run -ti -v backup1:/date1 --volume-driver=convoy centos [root@c07365b75d20 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-253:1-1073870859-e0fefab5d8e8e68d3481d186b04a409e9ef235393cd6bd80dcab5fe3958bcc33 10G 247M 9.8G 3% / tmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos-root 905G 163G 743G 18% /date1 shm 64M 0 64M 0% /dev/shm tmpfs 7.8G 0 7.8G 0% /sys/firmware [root@c07365b75d20 /]# cat /date1/nfstest nfstest
我们可以看见在之前container data目录下写入的nfstest文件,也在新container中。
配置DeviceMapper为Convoy后端存储
配置DeviceMapper作为Convoy的后端存储,必须事先准备好两个块设备,一个用来存储data,另一个用来存储metadata#truncate -s 100G data.vol #truncate -s 1G metadata.vol #losetup /dev/loop5 data.vol #losetup /dev/loop6 metadata.vol
启动convoy
[root@docker-node-1 rancher]# convoy daemon --drivers devicemapper --driver-opts dm.datadev=/dev/loop5 --driver-opts dm.metadatadev=/dev/loop6 DEBU[0000] Found existing config. Ignoring command line opts, loading config from /var/lib/rancher/convoy pkg=daemon DEBU[0000] driver=vfs driver_opts=map[dm.datadev:/dev/loop5 dm.metadatadev:/dev/loop6] event=init pkg=daemon reason=prepare root=/var/lib/rancher/convoy DEBU[0000] driver=vfs event=init pkg=daemon reason=complete DEBU[0000] Registering POST, /volumes/create pkg=daemon DEBU[0000] Registering POST, /volumes/mount pkg=daemon DEBU[0000] Registering POST, /volumes/umount pkg=daemon DEBU[0000] Registering POST, /snapshots/create pkg=daemon DEBU[0000] Registering POST, /backups/create pkg=daemon DEBU[0000] Registering DELETE, /volumes/ pkg=daemon DEBU[0000] Registering DELETE, /snapshots/ pkg=daemon DEBU[0000] Registering DELETE, /backups pkg=daemon DEBU[0000] Registering GET, /info pkg=daemon DEBU[0000] Registering GET, /volumes/list pkg=daemon DEBU[0000] Registering GET, /volumes/ pkg=daemon DEBU[0000] Registering GET, /snapshots/ pkg=daemon DEBU[0000] Registering GET, /backups/list pkg=daemon DEBU[0000] Registering GET, /backups/inspect pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Unmount pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Path pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Get pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.List pkg=daemon DEBU[0000] Registering plugin handler POST, /Plugin.Activate pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Create pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Remove pkg=daemon DEBU[0000] Registering plugin handler POST, /VolumeDriver.Mount pkg=daemon
之后的操作就与上述NFS作为后端存储的操作类似,就不做说明了。
相关文章推荐
- 配置Docker使用BlockBridge存储插件
- Docker 使用Calico插件配置网络
- 02docker简单使用和配置(网络、存储和Hub)
- svn服务器安装配置与svn的eclipse的subclipse插件使用
- 在Eclipse中配置及使用Hibernate插件的方法说明(HibernateSynchronizer)
- 使用VS进行3DS MAX SDK插件开发之一---- 配置入门及Sample篇
- svn服务安装和配置 以及搭配Eclips插件使用(总结)
- 在Eclipse中使用Hibernate插件*****配置
- 初识SVN(四):对SVN插件的配置即使用
- sersync2 完全安装配置说明(三) ----插件基本配置和使用
- Eclipse中 Tomcat 插件的配置与使用
- sersync2 完全安装配置说明(三) ----插件基本配置和使用
- 使用links方式配置Eclipse插件
- Eclipse下配置使用Hadoop插件
- bash alias, VIM配置,和使用的插件 RAILS开发相关
- svn服务器安装配置与svn的eclipse的subclipse插件使用
- ibatis eclipse插件和配置文件的使用
- Eclipse中Sysdeo Tomcat插件的配置与使用
- Struts2零配置中的config-browser插件的使用问题
- [转]svn服务器安装配置与svn的eclipse的subclipse插件使用