您的位置:首页 > 运维架构 > Docker

配置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作为后端存储的操作类似,就不做说明了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: