配置Docker使用Convoy存储插件

操作环境

[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作为后端存储的操作类似,就不做说明了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值