数人云工程师手记 | 新手快速入门Docker最新版管理工具

本文是数人云9月22日线上微信群分享的文章实录。数人云容器管理面板Crane开源以来,不少小伙伴对它还不是很是了解,数人云工程师金鑫从Crane技术背景、环境准备和使用步骤等方面为你们作了详细的介绍,并整理你们常见的问题逐一进行了解答。node

引言

Docker1.12发布已有一段时间了,像Swarm mode模式、应用编排、滚动更新、健康检查、服务发现等等、这些功能给开发者们带来了更多惊喜,以前在安装 Docker以外,还要安装其它的组件来配合完成,好比Mesos-Marathon,好比K8S,如今Docker决定大包大揽,将这些功能整合到了一块儿。安装Docker1.12之后,经过命令行,几条命令,Swarm集群,overlay网络,服务发现等都可建立完成。linux

这里再提一下Docker1.12的服务发现和负载均衡是结合在一块儿实现的,有两种方式,一种是DNS轮询,一种是IPVS;IPVS这种方式,Docker为每一个服务都分配来一个虚拟ip,这个ip是为服务作保留,不是对外提供服务。在建立服务时,经过entrypoint-mode的参数来肯定是基于dnsrr(轮询)仍是VIP(IPVS)的服务发现方式。git

考虑到基于DNS的方式作负载均衡,会有时效性的问题,DNS生效的时间致使不能实时反映服务的变化状况。会有服务发现不许确的状况。并且,IPVS支持udp协议。稍有遗憾的是,不支持会话保持,咱们在Crane发布的服务默认的服务发现的方式是后一种,IPVS的方式也是Docker1.12默认的服务发现方式。github

Docker1.12的功能很诱人,可是在使用上来说,一旦服务数量增长,单纯靠命令行管理,毕竟不是很方便,因此,数人云开发了这样一款工具,而且把它开源出来,供你们更方便的使用新版 Docker带来的新特性。docker

Crane!!!json

数人云容器管理面板Crane安装使用指南

背景

Crane做为国内第一款基于SwarmKit的容器管理工具,开源以后,小伙伴们试用热情高涨,也有小伙伴表示,体验时会在使用的某一处卡住,没法进行进一步的体验。这里针对你们反馈比较多的使用问题,作一点说明,避免环境缘由,影响到小伙伴们的Crane体验。ubuntu

环境准备

目前推荐的主机系统是CentOS7或者Ubuntu14.04,及以上版本,虽然Docker新版本已经能够在Mac上安装,考虑不是主流,该版本未在Mac下的测试。vim

请确保Docker安装版本 >=1.12, 并确保Docker正常运行.(如何安装和配置Docker请参考https://docs.docker.com/engin...centos

按照如上说明,安装的Docker版本因该是1.12.1。service docker restart,启动Docker。浏览器

请确保docker-compose已经正确安装.(如何安装docker-compose请参考https://docs.docker.com/compo...

注意,这里安装后的docker-compose版本是1.8.0,若是您已经按照过较早版本的docker-compose,须要按照上述的地址更新到新版本,由于程序启动的语法是按照docker-compose的2.0语法。版本较早会影响程序的安装。
请确保主机的selinux和firewalld为关闭状态,若是不关闭,会影响Docker的一些功能使用。

关闭selinux 方法:vim /etc/sysconfig/selinux 设置 SELINUX=disabled 并重启系统

关闭firewalld方法:CentOS 7.0默认使用的是firewall做为防火墙,若是是Ubuntu,能够跳过这步。

systemctl status firewalld.service#查看firewall状态 
systemctl start firewalld.service#启动firewall 
systemctl stop firewalld.service#中止firewall 
systemctl disable firewalld.service#禁止firewall开机启动

确保iptables对Docker没有规则限制,一般来说,系统默认便可,若是您的环境内基于iptables的防火墙限制,建议删除。由于Swarm mode的服务发现和负载均衡均利用到iptables的转发规则。避免使用中遇到限制,须要将iptables的限制 规则清空。在以前公众号的《数人云工程师手记 | 基于 Docker 1.12 Swarm 的集群管理开发实践》对Swarm的服务发现及负载均衡有详细的介绍。有想深刻了解的小伙伴能够在微信公众号内查找到该文章。

请确保NTP服务开启,收到的反馈比较多的是安装脚本执行过程当中提示:

NTP is unsynchronised, Please confirm your ntp status before continue.

解决方式:以CentOS7为例,安装NTP服务,

yum install -y ntp && systemctl start ntpd && systemctl enable ntpd && systemctl disable chronyd  
  ntpdate time.nist.gov

ntpsat 查看,显示以下正常,

synchronised to NTP server (59.46.44.253) at stratum 3  
   time correct to within 62 ms 
   polling server every 1024 s

若仍出现unsynchronised字样,须要重启ntpd服务

service ntpd restart

确保开启Docker的TCP链接端口。
centos:
vim /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

systemctl daemon-reload && service docker restart

ubuntu:
vim /etc/default/docker

OCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

service docker restart
2375为Docker默认的tcp通信端口,稍后在使用主机链接时须要用到。
至此,基础环境准备完毕!

Crane使用

安装Crane的主机默认会做为集群的管理节点,能够直接发布服务。

做为刚开始接触1.12的同窗能够先按向导模式来发布,这样更便于了解新增的Docker运行参数,选择向导模式建立。这里对参数作一下介绍。而后咱们发布一个ZooKeeper的集群做为演示的demo。

  • 服务名称: 为服务命名,必须为英文或数字。

  • 镜像名称: 服务使用的镜像,主机已存在的镜像或者为集群能够pull的镜像。

  • 服务模式: 设定服务模式类型,分为固定实例数和一节点一任务模式。

  • 选择网络: 服务使用的网络,须要在网络里预先建立。

  • 认证标识: 预先设置的仓库认证信息,若是使用的镜像仓库须要登陆验证,能够预先在仓库认证处设置登陆信息的用户名、密码,设置不一样的标签;此处选择相应的认证标签。

  • 端口映射:创建宿主机的端口与容器端口的映射关系,支持TCP和UDP协议。

  • 环境变量:设置容器启动时的环境变量。

  • 启动参数:

  • 容器工做目录:容器内工做路径,如设置/root,容器内工做路径在/root,如需执行/root/test.sh,此处设置/root,命令行设置sh test.sh便可;
    命令行:容器启动的运行命令。须要说明的是,此处的命令行更至关于dockerfile中的entrypoint。

  • 参数:为命令行提供参数。

示例: 本地docker run命令为:

docker run centos bash -c "while [ true ]; do echo 'this is a test'; sleep 10; done;"

命令行输入
bash
参数输入两项

-c
while [ true ]; do echo 'this is a test'; sleep 10; done;
  • 标签: 能够分别为服务和服务添加标签。

  • 资源限制:设定服务每一个容器的限制资源及预留资源。

  • 容错策略:针对容器健康状态设置的重启策略,分别为退出、失败,退出指只要容器退出了,重启策略即生效,失败指容器非正常退出,重启策略才生效,若不设置重启策略,能够选择从不。

  • 评估间隔:设定的时间用来评估重启政策。

  • 重启间隔:容器重启的时间间隔。

  • 尝试次数:尝试次数后,再也不重启。

  • 更新策略:服务更新时执行的策略

  • 间隔:更新间隔,一般指更新的并行数<现有实例数;二次更新时的间隔时间。
    并行数:一次更新的最大实例数

  • 失败后策略,若是更新失败执行的策略,分继续尝试和当即中止两种。

  • 调度策略:指服务发布的容器的调度分布,能够将服务的容器发布到指定的node* 节点或者指定label的节点,label须要预先编辑,label为key:value格式,

  • 限定label输入方式node.labels.yourkey:yourvalue

  • 限定节点id输入方式node.id:yournodeid

  • 限定hostname的输入方式node.hostname:yourhostname

  • 文件挂载:挂载宿主机路径到容器内,能够选择该路径到属性,如只读,读写。source为主机路径,taget为容器内路径。

发布ZooKeeper集群。由于表单较长,这里摘取了主要参数。

  • 建立项目:zookeeper

  • 服务1 node1

  • 镜像:zookeeper

  • 网络默认选择ingress

  • 端口映射

`2181 tcp 2181
2888 tcp 2888
3888 tcp 3888 `

  • 环境变量:

  • ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 server.3=node3:2890:3890

  • ZOOMYID=1 点击继续添加

  • 服务2 node2

  • 镜像:zookeeper

  • 网络默认选择ingress

  • 端口映射

    2181 tcp 2182
    2888 tcp 2889
    3888 tcp 3889

  • 环境变量:

  • ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 server.3=node3:2890:3890

  • ZOOMYID=2 点击继续添加

  • 服务3 node3

  • 镜像:zookeeper

  • 网络默认选择 ingress

  • 端口映射

    2181 tcp 2183
    2888 tcp 2890
    3888 tcp 3890

  • 环境变量:

  • ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 * server.3=node3:2890:3890

  • ZOOMYID=3

点击部署,等待镜像拉取成功后,(点击容器id--终端)执行./bin/zsServer.sh status 查看该容器的节点属性leaderorfollow

发布好的服务能够直接保存为模版。保存好的模版能够经过快捷建立,直接使用。也能够经过bundle的文件来快速部署应用。

点击项目-建立项目-DAB建立-输入项目名称-试试看中选择wordpress-部署。(也能够直接读取已有的DAB文件来发布。)
图片描述
镜像拉取会有一小段时间,等待服务运行,访问主机的8000的端口,便可访问刚刚建立的应用。
图片描述
Crane提供更直观的方式建立网络、添加主机、管理已发布的服务。详细的操做手册能够参考咱们的线上的使用手册(https://dataman.gitbooks.io/c...

问题答疑:

  1. Q:应用商店里怎么添加第三方应用?第三方应用须要怎么去作?
    A:以前咱们的内测版本,自行设定编排模版的接口没有开放,如今已经增长,有两种方式,一种是在镜像--新建项目模版处,直接建立项目模版。项目名称为英文或数字。由于这个模版事基于bandle来发布,须要准备符合格式dab文件项目描述,图片不是必要选项。

图片描述
另外一种方式:经过已经发布的服务,直接转换为模版。
点击建立好的项目名称,右上角会看到添加至模版,点击该按钮,操做与上一方式相似,dab文件默认为现有项目的设置。
图片描述

  1. Q:容器资源配置时,不能手动输入大小, 鼠标滑鼠很麻烦。
    A:这个设计浏览器规约,怪咱们以前没有说明,咱们建议使用浏览器是Chrome和Firefox,优先建议使用新版本Chrome。

  2. Q:拉取rolex_db镜像时,响应较慢。
    A:以前的镜像仓库出现了一点点问题,现已经修复。

  3. Q:DAB方式很超前很强大。只是配置文件有学习曲线,若是作成可视化界面能帮助用户生成DAB配置文件就行了。
    A:这个功能其实已经作了的,多是方式不太直观,咱们能够在建立好服务以后,将json文件导出,这样就会生出一个DAB的文件,默认的导出会带有参数的空置,若是您和我同样,有点点强迫症,能够修改文件,删除多余的空值信息,另外,推荐一个json.cn的网站,能够将混在一块儿的json文件格式化。

  4. Q:可否增长持续集成功能。gitlab/github项目代码变动触发本系统的钩子,构建镜像,发布镜像,更新应用。
    A:持续集成相对于docker现有功能来说,算是一个比较重的配套功能,目前考虑到方案选型和整合会带来更大的复杂性,暂时不会加到这个项目中。不过更新功能已经集成。能够参考持续部署功能。

  5. Q:起初上传镜像时 docker login 172.18.24.69:5000/ -uadmin@admin.com -padminadmin 报错 Error response from daemon: Get https://172.18.24.69:5000/v1/... http: server gave HTTP response to HTTPS client。
    A:测试环境内没有复现这个问题,须要提供更多的参考信息。

  6. Q:单节点部署完毕后尝试登陆,提示"服务忙,请稍后重试"。
    A:建议检查起的容器状态,若是方便,能够微信群发消息,远程查看。

咱们列举了几个比较典型的反馈问题,若是您的反馈没有及时获得回复,能够在微信群里交流或者在GitHub上提交issue,反馈的处理优先级较高。

改进建议

咱们的Crane开源以后,许多热情的小伙伴在试用以后,也给咱们提了许多很好的功能建议,咱们也内部讨论准备在后续的版本中将部分功能整合到Crane之中。感谢全部支持Crane同窗的建议!

易用性

  • 好比有同窗建议在应用部署完成以后经过一个link能够直接打开应用的界面,这个功能目前的位置不明显,后续咱们会增强操做便捷性的改进。

  • 还有你们说起的安装建议,按照如上的环境准备说明操做以后,部署会减小重复的操做。若是直接修改本机配置显得又点霸道。咱们考虑仍是将修改的内容在环境准备时说明。

  • 部署时按照应用向导建立时,选择相应参数可是未填写值,若是刚好点了折叠,应用没法部署,提示不够明显,这部分的用户提醒,咱们正在改进。

高可用

目前的部署方式为单点,在咱们的roadmap中,未来会支持高可用的多节点部署。
更多系统的兼容,好比在Mac上部署。

自动扩缩

自动伸缩策略功能已经在咱们的roadmap中,方案正在论证,若是有好的思路能够给咱们提建议。

SwarmKit的一些不完美

做为Docker的大版本更新,1.12带来了大幅的功能更新,但新功能总有那么一些不完美,建议现用Docker的小伙伴酌情更新。

  • 原有的docker-compose文件须要转换为bundle格式,若是有以前应用使用了docker-compose,考虑升级时,须要一点转换的工做量, 另外bundle并不能彻底支持全部的参数。

  • 不能支持host模式,虽然能够作到一主机一个任务,可是没法使用主机网络,若是您的应用须要暴露多个端口,须要一一映射。

  • 网络性能,overlay的网络性能损耗较多,也是须要考量的一个点

  • 服务发现还不是很完美,偶有不能正常发现的bug。

结语

欢迎更多的小伙伴体验、支持数人云的开源项目,开源项目地址:https://github.com/Dataman-Cl...。 目前建议的使用场景为开发测试环境。

相关文章
相关标签/搜索