Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案

题记


我所关注的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的其中重要的组成部分。

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第1张图片

坏消息是他需要商业的许可授权。

我们先看一下相关的管理界面是什么样子



系统架构

UCP是一个基于Docker的集群管理工具,也即集群中每个节点都应该安装Docker Engine。

UCP集群包含两种节点: 
- Controller: 管理集群,并持久化集群配置 
- Node:运行容器

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第2张图片

在一个节点上安装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-proxyucp-swarm-join

系统需求


下面我们看看如何部署,部署起来比较简单,基本上就是先下载环境的依赖包,然后下载涉及的镜像运行容器即可。

系统需求

  • 2.00 GB of RAM
  • 3.00 GB of available disk space
  • A static IP address
  • One of the supported operating systems installed:
    • RHEL 7.0, 7.1, or 7.2
    • Ubuntu 14.04 LTS
    • CentOS 7.1
    • SUSE Linux Enterprise 12
  • Linux kernel version 3.10 or higher
  • CS Docker Engine version 1.10 or higher
如果用户环境有比较严格的端口开放权限,还需要对以下端口进行有效开放。

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

3、安装HTTPS 包,后面我们启动UCP管理界面,需要HTTPS
$ sudo apt-get update && sudo apt-get install apt-transport-https

4、安装虚拟驱动(更新LTS核心库后需要重启一下OS)
$ sudo apt-get install -y linux-image-extra-virtual

5、添加repository 
$ echo "deb https://packages.docker.com/1.11/apt/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

6、安装 Docker Engine 及其依赖
$ sudo apt-get update && sudo apt-get install docker-engine

7、 确认Docker daemon在运行
$ sudo docker info


8、安装UCP(输入UCP的管理IP即可)
 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容器实例

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第3张图片



容器:这里面可以对整个容器云管理所有的容器实例,包括容器的启动、停止、销毁,查看容器的日志、监控以及通过命令控制台进入进行操作。



接下来我们看看部署容器,通过UCP部署容器有非常好的配置选项,包括对容器所有的操作,如果你对dockerfile不是很感兴趣,使用GUI方式会更加亲切。

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第4张图片




节点:支持对容器云宿主机集群的节点管理,提供添加具有Cluster的控制节点和普通节点模式,查看宿主机的相关信息。



添加Add Node,可以添加不同角色的子节点

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第5张图片


其他:可以对Volumn、网络(默认支持Bridge、None、Host模式)以及镜像进行管理,同时更重要的一点,加入了类似openStack的租户概念,有user 和team进行资源隔离。

Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案_第6张图片


可以说,有了UCP,这才是Docker云的开始,有了这种低门槛的管理方式,Docker技术的推广更加的方便。


非常高兴的是,使用SuperMap iCloudManager可以直接支持在UCP方式下运行。

另外,去年,我还在刚刚入门容器世界,已经听到关于DAOCloud、灵雀云都是基于Docker技术的,我想他们应该就是做的这些东西,将Docker的技术进行整合,然后以统一的管理方式形成解决方案。



你可能感兴趣的:(Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案)