题记
我所关注的Docker技术还只是在裸机环境下部署docker,或者通过Swarm将多个裸机组成集群等,而且多有的操作都是建立在命令行上面,CLI是专业人士的最爱,普通用户更喜欢使用可视化的管理界面,当然我们目前还没有怎么提出Docker云,我觉得如果升级到Docker云,我们就需要以一个类似OpenStack Horizon的可视化管理界面,将Docker镜像、网络、volumn、容器(生命周期、监控等),宿主机集群管理全部一体化的统一管理。
接下来,我有一个好消息,一个坏消息,先听哪一个?
好消息是上述的可视化管理界面肯定有了,就是本博客主要介绍的Docker Universal Control Plane(UCP),
Docker Universal Control Plane(UCP)是Docker公司在2015年底巴塞罗那的开发者大会上发布的,这是一个跟单信用证,是一个新的Docker支付服务的组合的一部分,旨在帮助运维团队轻松地设置一个集群,使开发人员可以快速部署Dockerized应用。他们构建Docker DataCenter的其中重要的组成部分。
坏消息是他需要商业的许可授权。
我们先看一下相关的管理界面是什么样子
系统架构
UCP是一个基于Docker的集群管理工具,也即集群中每个节点都应该安装Docker Engine。
UCP集群包含两种节点:
- Controller: 管理集群,并持久化集群配置
- Node:运行容器
在一个节点上安装UPC时,它就是一个Controller节点。在Controller上会启动10个容器。
名称 | 描述 |
---|---|
ucp-proxy | TLS代理,用于保护访问本地Docker Engine的安全 |
ucp-controller | UCP应用,使用kv store持久化存储配置 |
ucp-swarm-manager | 提供集群能力,使用kv store选择primary主机和记录集群成员 |
ucp-swarm-join | 提供Heartbeat功能,用于在kv store上记录心跳,表示此节点正常有效。如果节点宕机了,heartbeat停止,节点将从集群中移除 |
ucp-auth-api | 被UCP和UTR用来身份识别和授权的核心API |
ucp-auth-worker | 按计划执行LDAP同步,清除ucp-auth-store中的数据 |
ucp-auth-store | 为用户、组织和团队存储授权配置和数据 |
ucp-auth-kv | 用于存储UCP配置,仅供UCP内部使用,不用于其它目的 |
ucp-cluster-root-ca | 颁发证书的CA,在添加节点或使用客户端管理包时使用 |
ucp-cluster-client-ca | 授权用户捆绑的CA,仅在没有外部根CA的环境中安装UCP时使用 |
当一个节点以Node加入UCP集群时,它将启动两个容器:ucp-proxy
和ucp-swarm-join
系统需求
下面我们看看如何部署,部署起来比较简单,基本上就是先下载环境的依赖包,然后下载涉及的镜像运行容器即可。
系统需求
Hosts | Direction | Port | Purpose |
---|---|---|---|
controllers, nodes | in | TCP 443 (configurable) | Web app and CLI client access to UCP. |
controllers, nodes | in | TCP 2375 | Heartbeat for nodes, to ensure they are running. |
controllers | in | TCP 2376 (configurable) | Swarm manager accepts requests from UCP controller. |
controllers, nodes | in, out | UDP 4789 | Overlay networking. |
controllers, nodes | in, out | TCP + UDP 7946 | Overlay networking. |
controllers, nodes | in | TCP 12376 | Proxy for TLS, provides access to UCP, Swarm, and Engine. |
controller | in | TCP 12379 | Internal node configuration, cluster configuration, and HA. |
controller | in | TCP 12380 | Internal node configuration, cluster configuration, and HA. |
controller | in | TCP 12381 | Proxy for TLS, provides access to UCP. |
controller | in | TCP 12382 | Manages TLS and requests from swarm manager. |
controller | in | TCP 12383 | Used by the authentication storage backend. |
controller | in | TCP 12384 | Used by authentication storage backend for replication across controllers. |
controller | in | TCP 12385 | The port where the authentication API is exposed. |
controller | in | TCP 12386 | Used by the authentication worker. |
本次测试的环境:Ubuntu 14.04 LTS
1、以root用户登录,或者以由sudo授权的其他用户登录
2、添加docker的CS包的Key
$ curl -s 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add --import
$ sudo apt-get update && sudo apt-get install apt-transport-https
$ sudo apt-get install -y linux-image-extra-virtual
$ echo "deb https://packages.docker.com/1.11/apt/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update && sudo apt-get install docker-engine
$ sudo docker info
docker run --rm -it --name ucp \ -v /var/run/docker.sock:/var/run/docker.sock \ docker/ucp install -i \ --host-address <$UCP_PUBLIC_IP>
该过程可能根据网络下载相关镜像,需要用户输入UCP 管理密码,为SAN设置别名,有时候可能还会出现无法获得docker/ucp-swarm:1.1.1镜像,你可以手动先下载,docker pull .....,然后再重新执行上述命令即可。
root@controller:~# docker run --rm -it --name ucp \ > -v /var/run/docker.sock:/var/run/docker.sock \ > docker/ucp install -i \ > --host-address 192.168.12.130 Unable to find image 'docker/ucp:latest' locally latest: Pulling from docker/ucp d0ca440e8637: Pull complete 61351977b3a5: Pull complete 2885d5b10a43: Pull complete Digest: sha256:b4fc969bc5d7581e750123cb8f16393e388a101d7a2ef18297815cc6800d161e Status: Downloaded newer image for docker/ucp:latest INFO[0000] Verifying your system is compatible with UCP INFO[0000] Your engine version 1.11.2 is compatible WARN[0000] Your system does not have enough memory. UCP suggests a minimum of 2 .00 GB, but you only have 1.95 GB. You may have unexpected errors. Please choose your initial UCP admin password: Confirm your initial password: INFO[0033] Pulling required images... (this may take a while) WARN[0222] None of the hostnames we'll be using in the UCP certificates [controller 127.0.0.1 172.17.0.1 192.168.12.130] contain a domain component. Your generated certs may fail TLS validation unless you only use one of these shortnames or IPs to connect. You can use the --san flag to add more aliases You may enter additional aliases (SANs) now or press enter to proceed with the above list. Additional aliases: ucp-aliase INFO[0309] Installing UCP with host address 192.168.12.130 - If this is incorrect, please specify an alternative address with the '--host-address' flag INFO[0000] Checking that required ports are available and accessible INFO[0002] Generating UCP Cluster Root CA INFO[0027] Generating UCP Client Root CA INFO[0039] Deploying UCP Containers INFO[0053] New configuration established. Signalling the daemon to load it... INFO[0054] Successfully delivered signal to daemon INFO[0054] UCP instance ID: JAIF:SI2Y:NVOR:DRXO:K45R:4KHI:5VWL:JVRM:PCYZ:GYZ6:OBUZ:ZQK6 INFO[0054] UCP Server SSL: SHA-256 Fingerprint=2F:52:02:6A:E4:20:90:8D:87:D0:76:EB:5B:BB:2B:42:CA:35:EE:98:E8:EA:3A:B8:28:0E:81:20:CA:09:C2:DC INFO[0054] Login as "admin"/(your admin password) to UCP at https://192.168.12.130:443
查看镜像
root@controller:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9aa7639fca7f docker/ucp-controller:1.1.1 "/bin/controller serv" About an hour ago Up About an hour 0.0.0.0:443->8080/tcp ucp-controller 8e7f6be77f3c docker/ucp-auth:1.1.1 "/usr/local/bin/enzi " About an hour ago Up About an hour 0.0.0.0:12386->4443/tcp ucp-auth-worker 3c02b188385a docker/ucp-auth:1.1.1 "/usr/local/bin/enzi " About an hour ago Up About an hour 0.0.0.0:12385->4443/tcp ucp-auth-api 54f10d1148d3 docker/ucp-auth-store:1.1.1 "/usr/local/bin/rethi" About an hour ago Up About an hour 0.0.0.0:12383-12384->12383-12384/tcp ucp-auth-store 2935b1e78372 docker/ucp-cfssl:1.1.1 "/bin/cfssl serve -ad" About an hour ago Up About an hour 8888/tcp, 0.0.0.0:12381->12381/tcp ucp-cluster-root-ca 6fa7f75cda7d docker/ucp-cfssl:1.1.1 "/bin/cfssl serve -ad" About an hour ago Up About an hour 8888/tcp, 0.0.0.0:12382->12382/tcp ucp-client-root-ca e11c4c9aaeb9 docker/ucp-swarm:1.1.1 "/swarm manage --tlsv" About an hour ago Up About an hour 0.0.0.0:2376->2375/tcp ucp-swarm-manager cea11e14f29f docker/ucp-swarm:1.1.1 "/swarm join --discov" About an hour ago Up About an hour 2375/tcp ucp-swarm-join ff88764d2d9c docker/ucp-proxy:1.1.1 "/bin/run" About an hour ago Up About an hour 0.0.0.0:12376->2376/tcp ucp-proxy a7abb196fbfd docker/ucp-etcd:1.1.1 "/bin/etcd --data-dir" About an hour ago Up About an hour 2380/tcp, 4001/tcp, 7001/tcp, 0.0.0.0:12380->12380/tcp, 0.0.0.0:12379->2379/tcp ucp-kv
9、下载使用许可
前往Docker Store (https://store.docker.com/bundles/docker-datacenter)下载使用许可
10、直接输入:https://192.168.27.130:443进入管理界面(启动过程可以直接上传试用许可),然后输入相关用户名和密码即可。
使用帮助
如果熟悉Horizon的朋友应该有亲和度,用户体验基本类似:
首页基本就是整体的资源展示,包含应用数目、容器数目、镜像数目、宿主机集群数目、CPU和内存利用率
应用项:支持直接使用Docker-Compose创建,当然我也正好通过前几个博客所述的使用docker-compose脚本创建SuperMap iCloudmanager for Docker环境
以下是我的iCloudManager配置和已经启动了一个iServer容器实例
容器:这里面可以对整个容器云管理所有的容器实例,包括容器的启动、停止、销毁,查看容器的日志、监控以及通过命令控制台进入进行操作。
接下来我们看看部署容器,通过UCP部署容器有非常好的配置选项,包括对容器所有的操作,如果你对dockerfile不是很感兴趣,使用GUI方式会更加亲切。
节点:支持对容器云宿主机集群的节点管理,提供添加具有Cluster的控制节点和普通节点模式,查看宿主机的相关信息。
添加Add Node,可以添加不同角色的子节点
其他:可以对Volumn、网络(默认支持Bridge、None、Host模式)以及镜像进行管理,同时更重要的一点,加入了类似openStack的租户概念,有user 和team进行资源隔离。
可以说,有了UCP,这才是Docker云的开始,有了这种低门槛的管理方式,Docker技术的推广更加的方便。
非常高兴的是,使用SuperMap iCloudManager可以直接支持在UCP方式下运行。
另外,去年,我还在刚刚入门容器世界,已经听到关于DAOCloud、灵雀云都是基于Docker技术的,我想他们应该就是做的这些东西,将Docker的技术进行整合,然后以统一的管理方式形成解决方案。