Docker宣布Docker Datacenter(简称DDC)正式发布,这套可集成的端到端平台设计用于高效地将应用程序开发和管理工作由内部数据中心迁移至云环境下。
在Docker Datacenter的帮助下,企业将能够立足于内部或者虚拟私有云环境实现容器即服务(简称CaaS)的部署工作。CaaS能够提供一整套IT管理及安全应用的内容与基础设施环境,开发人员则以此为基础通过自助服务模式实现应用程序的构建与部署。
Docker Datacenter当中包含一系列领先的Docker开源项目、商用软件并同大量经过验证并受到支持配置相集成:
本文介绍如何用Docker卷插件的方式,给Docker DDC的Swarm的群集挂载Nutanix存储。Nutanix Container Volume Plug-in 简称DVP,可以给容器提供数据持久化的功能。
本文使用ownCloud网盘应用做功能测试。测试的过程如下,安装部署Docker Datacenter,配置好群集,在UCP的界面里调用DVP插件建持久的数据卷,建立ownCloud服务,部署和测试该服务。
这个lab的目标:
这一部分描述DVP的安装部署过程,需要连接互联网;安装调试完毕之后,将虚拟机的制作成新的镜像模板待用。这样就能是DDC里的所有节点不重复配置DVP。
先在模板虚拟机里安装Docker服务,Docker服务的安装方法见Docker的官方文档。
Docker安装的参考命令如下:
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
$ sudo systemctl start docker
$ sudo systemctl enable docker
本文使用的是Docker社区文档稳定版 17.03.1-ce ;本文使用的OS是CentOS 7.3。所Docker安装的版本如下:
[root@centos7-temp]# docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Experimental: false
[root@centos7-temp]# rpm -qa|grep docker
docker-ce-17.03.1.ce-1.el7.centos.x86_64
docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch
本文使用的Docker 安装yum源如下:
[root@centos7-temp]# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://download.docker.com/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
本机所使用的所有安装源如下:
[root@centos7-temp]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 9,363
docker-ce-stable/x86_64 Docker CE Stable - x86_64 4
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,808
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 381
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 1,859
repolist: 23,415
安装docker引擎,并启动服务,并校验服务状态。安装过程参考如下:
[root@centos7-temp]# yum install -y docker-ce
[root@centos7-temp]# systemctl enable docker
[root@centos7-temp]# systemctl start docker
[root@centos7-temp]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-06-20 20:30:49 CST; 19min ago
Docs: https://docs.docker.com
Main PID: 875 (dockerd)
CGroup: /system.slice/docker.service
├─ 875 /usr/bin/dockerd
├─ 942 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-in...
├─2008 docker-containerd-shim 0ca2346b6126de702fb4dda5f807c0a69a402eb643f15c142730277d0eb7bbcb /var/...
└─0ca2346b6126de702fb4dda5f807c0a69a402eb643f15c142730277d0eb7bbcb
└─2038 /usr/bin/python /code/main.py --prism-ip 10.68.69.22 --dataservices-ip 10.68.69.23 --prism-...
到目前为止,Docker安装配置完成。
下面开始安装DVP,安装和配置过程参考页面。
https://store.docker.com/plugins/nutanix-dvp-docker-volume-plug-in
下面是给操作系统安装iscsi initiator服务的参考步骤:
yum install -y iscsi-initiator-utils
systemd-tmpfiles --create
systemctl start iscsid
systemctl enable iscsid
systemctl status iscsid
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-06-20 20:30:46 CST; 24min ago
Docs: man:iscsid(8)
man:iscsiadm(8)
Main PID: 888 (iscsid)
CGroup: /system.slice/iscsid.service
├─882 /usr/sbin/iscsid
└─888 /usr/sbin/iscsid
Jun 20 20:30:46 centos7-temp.zenlab.local systemd[1]: Starting Open-iSCSI...
Jun 20 20:30:46 centos7-temp.zenlab.local iscsid[878]: iSCSI logger with pid=882 started!
Jun 20 20:30:46 centos7-temp.zenlab.local systemd[1]: Failed to read PID from file /var/run/iscsid.pid: Inva...ent
Jun 20 20:30:46 centos7-temp.zenlab.local systemd[1]: Started Open-iSCSI.
Jun 20 20:30:47 centos7-temp.zenlab.local iscsid[882]: iSCSI daemon with pid=888 started!
Hint: Some lines were ellipsized, use -l to show in full.
解释一下DVP的工作原理是,它是让Docker主机通过iSCSI协议连接Nutanix的存储服务。DVP插件的配置里包含了连接存储服务和存储容器(这个容器是Nutanix的存储术语,非Docker说的容器)的相关信息。这样Docker主机上用该卷插件建立的数据卷都会指向Nutanix后台的存储容器中;数据通过iSCSI协议连接Nutanix存储服务的时候,就可以利用到Nutanix群集提供的负载均衡能力;当数据块写入Nutanix存储池的过程中和之后,就可以利用到到Nutanix存储容器所具备的其它重要特性:数据块2~3副本的高可靠性、冷热数据分成、压缩、去重、纠删码等;而且存储空间对于容器或者Docker Swarm里的服务都是透明和无限容量的。
现在做一些安装DVP的准备工作,向Nutanix系统管理员要求并记录下面的信息:
以上信息会使用在DVP的安装命令中,DVP的离线安装方法:下载DVP插件镜像,保存成文件,ssh上传到模板虚拟机,用docker load命令加载安装。
参考下面的DVP安装命令:
docker plugin install ntnx/nutanix_volume_plugin PRISM_IP="10.68.69.22" DATASERVICES_IP="10.68.69.23" PRISM_PASSWORD="nutanix/4u" PRISM_USERNAME="admin" DEFAULT_CONTAINER="ddc-sc1" --alias nutanix
以上的命令执行结果如下:
[root@centos7-temp]# docker plugin install ntnx/nutanix_volume_plugin PRISM_IP="10.68.69.22" DATASERVICES_IP="10.68.69.23" PRISM_PASSWORD="nutanix/4u" PRISM_USERNAME="admin" DEFAULT_CONTAINER="ddc-sc1" --alias nutanix
Plugin "ntnx/nutanix_volume_plugin" is requesting the following privileges:
- network: [host]
- mount: [/dev]
- mount: [/lib/modules]
- mount: [/etc/iscsi]
- mount: [/var/lock/iscsi]
- mount: [/proc]
- allow-all-devices: [true]
- capabilities: [CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_IPC_LOCK CAP_IPC_OWNER CAP_NET_ADMIN CAP_MKNOD CAP_SYS_MODULE]
Do you grant the above permissions? [y/N] y (输入y,按回车)
latest: Pulling from ntnx/nutanix_volume_plugin
be892c8cb64d: Download complete
Digest: sha256:5a3730ffae077eb6ddc0c125620283d56852528b686cbe42f2f58696eab82c0d
Status: Downloaded newer image for ntnx/nutanix_volume_plugin:latest
Installed plugin ntnx/nutanix_volume_plugin
确认VDP安装结果,这个插件应该是最新版、启动的状态,如下:
[root@centos7-temp]# docker plugin ls
ID NAME DESCRIPTION ENABLED
f0e38fbc11b3 nutanix:latest Nutanix volume plugin for docker true
关于 docker plugin 的相关命令参考文档,见docker官网。
执行下面的测试,确认DVP工作正常。
[root@centos7-temp]# docker volume create testvol -d nutanix:latest
testvol
[root@centos7-temp]# docker volume ls
DRIVER VOLUME NAME
nutanix:latest testvol
[root@centos7-temp]#
回到Nutanix的Prisum界面(主要的群集管理图形化界面)中查看Storage –> table –> Volume Group,应该能看到这个命令所创建的名为testvol的数据卷。如下图所示:
在命令行删除这个测试的卷。
[root@centos7-temp]# docker volume rm testvol
testvol
[root@centos7-temp]# docker volume ls
DRIVER VOLUME NAME
[root@centos7-temp]#
在回到Prisum界面中查看刚才看到的那个卷应该就消失了。到此为止所有节点的DVP部署配置工作就完毕了,并且确认docker服务和DVP功能都很正常。用 sys-unconfig 命令关机,把这个虚拟机在Prisum里面做一个快照备用,也可以在Nutanix的nucli命令行里面把它做成一个基础镜像。
我们已经理解和熟悉了DVP的基本操作,配置和部署,下面开始安装Docker Datacenter;Docker Datacenter的架构图如下所示:
本文安装的架构是:
在Nutanix的Prisum中用刚才制作的那个快照或者镜像模板,克隆/新建4个虚拟机。虚拟机的参考配置如下:
在Nutanix的Prisum中从刚才新建的四个虚拟机中选择一个,Power on开机;ssh登录到操作系统内之后,设定主机名和IP地址。
注意事项,提前下载好安装包,这个tar包里面包含了UCP需要的所有镜像,可以一次性导入到UCP的节点上。
下面是参考命令,在使用本文档时,请下载并安装最新版的Docker for Datacenter产品包。
wget https://packages.docker.com/caas/ucp_images_2.1.4.tar.gz -O docker-datacenter.tar.gz
docker load < docker-datacenter.tar.gz
载入完毕后,可以看到如下镜像。
[root@ucp-master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/ucp-metrics 2.1.4 e3e24ef156bd 3 weeks ago 92.2 MB
docker/ucp-swarm 2.1.4 d8b51d6801e5 3 weeks ago 21 MB
docker/ucp-hrm 2.1.4 38a19323327d 3 weeks ago 14.8 MB
docker/ucp-etcd 2.1.4 9aa382502e19 3 weeks ago 38.5 MB
docker/ucp-controller 2.1.4 5a852aa3039e 3 weeks ago 28 MB
docker/ucp-dsinfo 2.1.4 66ee9368796a 3 weeks ago 159 MB
docker/ucp 2.1.4 7a28dbfc44e4 3 weeks ago 19.1 MB
docker/ucp latest 7a28dbfc44e4 3 weeks ago 19.1 MB
docker/ucp-cfssl 2.1.4 acdc1f147711 3 weeks ago 15.1 MB
docker/ucp-compose 2.1.4 25775e989077 3 weeks ago 32.9 MB
docker/ucp-auth-store 2.1.4 f27ad13dee6c 3 weeks ago 58.7 MB
docker/ucp-agent 2.1.4 d716a096c331 3 weeks ago 22.5 MB
docker/ucp-auth 2.1.4 1f4739cd3c08 3 weeks ago 25.1 MB
[root@ucp-master ~]#
安装UCP的命令参考如下:
docker run --rm -it --name ucp \
-v /var/run/docker.sock:/var/run/docker.sock \
docker/ucp:2.1.4 install \
--host-address 10.68.69.12 \
--interactive
以上命令中10.68.69.12是UCP主机的ip地址,建议UCP使用固定IP。以上命令完毕后用浏览器访问这个IP。
参考以下文档,完成UCP的安装步骤,其中需要到Docker网站获得30天的试用版许可证文件。
https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/
能够正常登陆访问UCP之后,在首页下方点击 【Add Node】按钮,获得加其它节点到群集里的命令,参考命令如下:
docker swarm join \
--token SWMTKN-1-1310ah7gzj9e7bk6a5yobo2qyiwf93ybrd29flkved1zqydd6i-7pir0884sag5pjofwzjq5o1um \
10.68.69.12:2377
把以上命令记录在写字板中备用。
把剩下的三个虚拟机开机,进入操作系统后设定主机名和IP。其中的一个安装DTR(Docker镜像仓库)的节点建议使用固定IP。
在每个操作系统里面用docker命令确认DVP是否正常。
下面就可以把上一步所记录命令在命令行里面执行以下,完毕之后回到UCP的界面中查看是否它们已经添加成功。如下图所示:
在UCP首页的下方,找到并点击 【Install DTR】的按钮,取得安装命令(记得从清单中选择固定IP地址的DTR主机);在登录DTR主机的控制台里面输入这个命令,命令如下:
docker run -it --rm \
docker/dtr:2.2.5 install \
--ucp-node 10.68.69.12 \
--ucp-insecure-tls
DTR节点没有离线安装的整合包,它需要联网下载很多相关镜像,如果网络速度不是很快的话,下载和安装的过程需要至少半个小时,过程中还需要输入UCP的管理员,用户名和密码。
参考文档如: https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/#step-3-install-dtr
DTR正常工作了以后,登录建立一个名为owncloud的镜像库,点击【New Rrepository】输入owncloud。 在一个节点上下载owncloud镜像,添加新的tag,上传到这个镜像到镜像库里备用。参考命令如下:
docker login dtr.zenlab.local
docker pull owncloud
docker tag owncloud:latest dtr.zenlab.local/admin/owncloud:latest
docker push dtr.zenlab.local/admin/owncloud:latest
注意:如果你的环境中没有DNS,就把dtr.zenlab.local换成DTR的IP地址。
以上这个步骤主要是方便以后,反复使用和测试这个镜像的可能性,如果所有的节点都有高速的互联网链接,可以忽略以上步骤。
如果你所在的实验环境是没有互联网连接的,你需要将OwnCloud的镜像下载并保存成tar包,然后在传到DTR里,这样群集里的所有节点就可以在DTR里就近获得这个镜像,并启动OwnCloud容器了
这里使用UCP的图形化界面,在一个所有节点都配置和部署了VDP的群集上,给群集挂载外部Nutanix的数据卷。挂载的数据卷是给OwnCloud做持久存储用的。
登录UCP主页,点击Resource,点击Volumes,点击 【Create Volume】,输入相关参数,如下图所示。图中的sizeMb=500000这个参数是制定VolumeGroup的大小,不设定这个参数的话,默认是10GB。
在到Nutanix的Prism里面查看这个Volume Group是否存在。应该如下图所示:
登录UCP主页,点击 Service , 点击 【Create a Service】按钮;开始建立这个服务。输入服务名,镜像名;点击 【Next】按钮。
点击 【Next】按钮。进入 Resource页面,这里需要配置端口和数据卷。
最后点击【Deploy Now】按钮。 部署完毕之后,显示这个服务的状态为正常。
点击这个服务,到这个页面的最下方,找到右下角的发布端口的链接,点击后,就可以看到ownCloud的初始化配置页面了。
输入管理员的用户名和密码,进入之后,上传一些图片,测试一下功能是否正常。
尝试一些Docker Datacenter的高级功能,如服务的高可用性;同时Nutanix的DVP在底层保障了数据的持久性和完全性。测试步骤如下:
Nutanix是一种融合和了计算、存储和虚拟化(内置KVM)的超融合平台。Nutanix DVP (Docker Volume Plug-in)可以让平台里的容器用上持久化存储服务。DVP不仅可以给单独虚拟机里的容器提供持久卷服务,还能给类似于Docker Swarm的其它容器编排平台提供持久化数据服务功能。