中国领先的IT技术网站
|
|

动手搭建Shipyard,简化跨主机的Docker容器集群管理

Shipyard(github)是建立在docker集群管理工具Citadel之上的可以管理容器、主机等资源的web图形化工具。包括core和extension两个版本,core即shipyard主要是把多个 Docker host上的 containers 统一管理(支持跨越多个host),extension即shipyard-extensions添加了应用路由和负载均衡、集中化日志、部署等。

作者:佚名来源:seanlook|2015-01-08 10:29


Shipyard(github)是建立在docker集群管理工具Citadel之上的可以管理容器、主机等资源的web图形化工具。包括core和extension两个版本,core即shipyard主要是把多个 Docker host上的 containers 统一管理(支持跨越多个host),extension即shipyard-extensions添加了应用路由和负载均衡、集中化日志、部署等。

1. 几个概念

engine

一个shipyard管理的docker集群可以包含一个或多个engine(引擎),一个engine就是监听tcp 端口的docker daemon。shipyard管理docker daemon、images、containers完全基于Docker API,不需要做其他的修改。另外,shipyard可以对每个engine做资源限制,包括CPU和内存;因为TCP监听相比Unix socket方式会有一定的安全隐患,所以shipyard还支持通过SSL证书与docker后台进程安全通信。

rethinkdb

RethinkDB是一个shipyard项目的一个docker镜像,用来存放账号(account)、引擎(engine)、服务密钥(service key)、扩展元数据(extension metadata)等信息,但不会存储任何有关容器或镜像的内容。一般会启动一个shipyard/rethinkdb容器shipyard-rethinkdb-data来使用它的/data作为数据卷供另外rethinkdb一个挂载,专门用于数据存储。

2. 搭建过程

修改tcp监听

Shipyard 要管理和控制 Docker host 的话需要先修改 Docker host 上的默认配置使其监听tcp端口(可以继续保持Unix socket)。有以下2种方式

1.sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d启动docker daemon。如果为了避免每次启动都写这么长的命令,可以直接在/etc/init/docker.conf中修改。

2.修改/etc/default/docker的DOCKER_OPTS

DOCKER_OPTS="-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock"。这种方式在我docker version 1.4.1 in ubuntu 14.04上并没有生效。

  1. 重启服务 
  2. $ sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d 
  3. 验证 
  4. $ netstat -ant |grep 4243 
  5. tcp6 0 0 :::4243 

启动rethinkdb

shipyard(基于Python/Django)在v1版本时安装过程比较复杂,既可以通过在host上安装,也可以部署shipyard镜像(包括shipyard-agent、shipyard-deploy等组件)。v2版本简化了安装过程,启动两个镜像就完成:

  1. 获取一个/data的数据卷 
  2. $sudo docker run -it -d --name shipyard-rethinkdb-data \ 
  3. --entrypoint /bin/bash shipyard/rethinkdb -l 
  4. 使用数据卷/data启动RethinkDB 
  5. docker run -it -P -d --name shipyard-rethinkdb \ 
  6. --volumes-from shipyard-rethinkdb-data shipyard/rethinkdb 

部署shipyard镜像

启动shipyard控制器:

  1. sudo docker run -it -p 8080:8080 -d --name shipyard \ 
  2. --link shipyard-rethinkdb:rethinkdb shipyard/shipyard 

至此已经可以通过浏览器访问http://host:8080来访问shipyard UI界面了。

第一次run后,关闭再次启动时直接使用:

  1. sudo docker stop shipyard shipyard-rethinkdb shipyard-rethinkdb-data 
  2. sudo docker start shipyard-rethinkdb-data shipyard-rethinkdb shipyard 

图示

登录:

默认用户名/密码为 admin/shipyard

主界面:

Dashboard展示在添加engine时指定的CPU以及内存的使用情况。

容器:

shipyard管理的所有docker主机的所有容器,包括stop和running状态的。可以直接点击DEPLOY按钮来从镜像运行出其他容器,与docker run的选项几乎相同,可以限制CPU和内存的使用,详见shipyard的containers文档。

容器操作:

可以stop、start、restart容器,通过LOGS可以看到容器日志输出,SCALE可 以批量(规模化)部署该容器,这个操作与容器的Type属性息息相关。因为shipyard可以管理多个host的docker容器,所以启动一个容器的 type可以是:service——可以在具有相同label的engine上运行;unique——一个host上只允许某个镜像的一个实例运 行;host——在指定的host上运行容器,启动的时候通过--label host:<host-id>语法指定docker host。

engine管理:

一 个engine就是一个docker daemon,docker daemon下启动着多个containers,可以对engine限制一个整体的CPU和内存限制,shipyard通过TCP端口连接daemon。 需要注意的是docker client与server的版本问题:(因为shipyard目前还在快速的完善过程,不同版本的docker应该是向下兼容的)

  1. curl -X GET http://172.29.88.223:4243/v1.15/containers/json 
  2. client and server don't have same version (client : 1.15, server: 1.13

3. shipyard-cli

目前图形化界面能做的操作其实很少,正在强大的是通过shipyard提供的命令行窗口(称作Shipyard CLI)进行管理,参考http://shipyard-project.com/docs/usage/cli/
启动命令行交互模式:

  1. sudo docker run --rm -it shipyard/shipyard-cli 

使用它甚至可以替代docker客户端。

  1. sean@seanubt:~$ sudo docker run -it shipyard/shipyard-cli 
  2. shipyard cli> shipyard help 
  3. NAME: 
  4. shipyard - manage a shipyard cluster 
  5. USAGE: 
  6. shipyard [global options] command [command options] [arguments...] 
  7. VERSION: 
  8. 2.0.8 
  9. COMMANDS: 
  10. login login to a shipyard cluster 
  11. change-password update your password 
  12. accounts show accounts 
  13. add-account add account 
  14. delete-account delete account 
  15. containers list containers 
  16. inspect inspect container 
  17. run run a container 
  18. stop stop a container 
  19. restart restart a container 
  20. scale scale a container 
  21. logs show container logs 
  22. destroy destroy a container 
  23. engines list engines 
  24. add-engine add shipyard engine 
  25. remove-engine removes an engine 
  26. inspect-engine inspect an engine 
  27. service-keys list service keys 
  28. add-service-key adds a service key 
  29. remove-service-key removes a service key 
  30. extensions show extensions 
  31. add-extension add extension 
  32. remove-extension remove an extension 
  33. webhook-keys list webhook keys 
  34. add-webhook-key adds a webhook key 
  35. remove-webhook-key removes a webhook key 
  36. info show cluster info 
  37. events show cluster events 
  38. help, h Shows a list of commands or help for one command 
  39. GLOBAL OPTIONS: 
  40. --help, -h show help 
  41. --generate-bash-completion 
  42. --version, -v print the version 
  43. 登录shipyard 
  44. shipyard cli> shipyard login 
  45. URL: http://172.29.88.205:8080 
  46. Username: admin 
  47. Password: 
  48. 查看containers 
  49. shipyard cli> shipyard containers 
  50. 启动一个容器 
  51. shipyard cli> shipyard run --name nginx:1.7.6 --container-name web_test \ 
  52. --cpus 0.2 \ 
  53. --memory 64 \ 
  54. --type service \ 
  55. --hostname nginx-test \ 
  56. --domain example.com \ 
  57. --link redis:db \ 
  58. --port tcp/172.29.88.205:81:8081 \ 
  59. --port tcp/::8000 \ 
  60. --restart "on-failure:5" \ 
  61. --env FOO=bar \ 
  62. --label dev \ 
  63. 查看容器日志(只能接容器ID,暂不能使用容器名) 
  64. shipyard cli> shipyard logs ff2761d 
  65. 关闭并移除容器 
  66. shipyard cli> shipyard destroy <container_id> 

试用后觉得shipyard的web只实现了最基本的功能,如果需要方便的从web管理docker集群的话,还需要做很多定制工作。

原文链接:http://seanlook.com/2014/12/29/docker-shipyard-centralized-management-webui/

【编辑推荐】

  1. 价值IT坚持走集中化路线 云计算让IT更高效
  2. VMware vCloud套件集中化方式处理云计算
  3. 使用Loggly 进行 Docker的日志集中化处理
【责任编辑:Ophira TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

超级网管员——网络应用

本书全面、深入地介绍了网络应用技术,主要内容包括:RMS权限管理服务、Exchange邮件服务、LCS即时消息服务、WSUS系统更新服务、Symantec网...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊