开发者社区> 猫饭先生> 正文

使用SwarmKit管理容器伸缩

简介: 本文讲的是使用SwarmKit管理容器伸缩【编者的话】本文介绍了使用SwarmKit这个开源工具来扩展多节点系统,包括swarmctl和swarms这两个工具、swarm kit的特性和概念以及在Docker 1.12版本中集成的SwarmKit的使用。
+关注继续查看
本文讲的是使用SwarmKit管理容器伸缩【编者的话】本文介绍了使用SwarmKit这个开源工具来扩展多节点系统,包括swarmctl和swarms这两个工具、swarm kit的特性和概念以及在Docker 1.12版本中集成的SwarmKit的使用。

本月在北美举行的LinuxCon ContainerCon会议上,来自Docker的Jérôme Petazzoni将会为大家带来一场全天的免费入门分享,主题为“如何在生产换种使用Docker Swarm进行容器编排”。作为分享抢鲜,本文特别关注用于构建多节点系统的套件——SwarmKit

SwarmKit是一个可重用的库,就像libcontainer、libnetwork和vpnkit一样。同时它也是Docker生态环境进行探索的一部分。SwarmKit仓库提供了两个例子:
  • swarmctl - 一个负责调用SwarmKit API的命令行工具;
  • swarmd - 一个负责将Docker Engines连入Swarm集群的代理。

这种组织方式类似于libcontainer代码库中,libcontainer作为可重用的库,containerd是一个依赖于它的轻量级引擎,和用于通过命令行进行控制的container-ctr,与这个结构如出一辙。

在这个简短介绍中,我们将简单介绍SwarmKit的功能,以及Docker CLI 命令的用法,并且会向你介绍如何启用Swarm模式,并配置你的Swarm集群。这是创建和运行Swarm的第一步,也是进行伸缩的前提。

SwarmKit的功能和概念

SwarmKit提供的功能包括:
  • 高可用性和基于Raft协议的分布式存储;
  • 通过指令API进行服务管理
  • 自动管理TLS Key,包括签发、续签和轮换;
  • 动态升级降级节点,允许更改Raft一致性中的管理节点;
  • 集成Overlay网络和负载均衡。

虽然一个实用集群通常多于一个节点,不过SwarmKit允许通过单节点模式运行。这对测试非常有用,也降低了从单节点开发到多节点部署的迁移成本——使用的API完全相同。

节点既可以是管理节点(manager)也可以是工作节点(worker)。只不过工作节点仅用于运行容器,而管理节点还参与Raft的一致性管理。管理节点通过SwarmKit API来进行控制。一个管理节点会被选为leader,其他管理节点仅仅将控制请求转发给leader管理节点。管理节点会向外暴露SwarmKit API。通过这个API,你可以用来定义服务的运行。

服务会根据期望状态定义的镜像、实例数等参数进行:
  • 集群Leader会利用不同的子系统来将服务分解为不同的调度任务,这些系统包括编排器、调度器、分配器、分发器等;
  • 任务会产生和配置相符的容器,并将它分配到特定的节点上;
  • 节点根据任务执行,通过Docker Engine API来实现容器的启动和停止。

你可以参考代码仓库中nomenclature部分来获取更多细节信息。

Swarm模式

Docker Engine 1.12内建了SwarmKit,因此在Docker 1.12版本中SwarmKit的全部功能都开箱即用。你可以直接通过Docker命令或者API来操作他们。Docker CLI中提供了三个新的命令:
  • docker swarm——启用Swarm模式,加入Swarm集群,调整集群参数;
  • docker node——查看节点,升级/降级管理节点,管理nmodes;
  • docker service—— 创建和管理服务。

Docker API暴露了和上面相同的API,当然SwarmKit API也可以直接使用(通过另一套接字访问)。

跟着下面的例子你将会体验伸缩、负载均衡和failover等特性。你需要一个安装了Docker 1.12和Compose 1.8的虚拟机来进行试验。如果你使用Mac电脑,最简单的方式是安装Docker Mac并运行单节点模式。

当然,你需要一个容器化的应用,如果你需要一个用于演示测试用途的容器应用,DockerCoins是个不错的选择——它基于微服务架构,使用不同语言写成,并使用一个Redis作为数据存储使用。

首先你得启用Swarm模式,这和之前并无任何不同。一旦Swarm模式启用,你讲解锁SwarmKit的技能(例如服务管理、开箱即用的Overlay网络)。

来试一下这个Swarm限定的命令:
$ docker node ls

Error response from daemon: this node is not participating as a Swarm manager

创建第一个Swarm集群

使用docker swarm init可以初始化一个集群。注意这个命令只能在第一个种子主机上运行。千万不要在多个节点上运行docker swarm init!这样你会出现多个未加入的集群。

在node1上创建集群,仅需:
docker swarm init

现在来检查Swarm模式是否启用,和以往一样,运行:
docker info

这时输出信息里面将会包括类似下面的信息:
Swarm: active

NodeID: 8jud7o8dax3zxbags3f8yox4b

Is Manager: true

ClusterID: 2vcw2oa9rjps3a24m91xhvv0c

...

接下来,来运行我们首个Swarm命令。这次还是运行我们上次试过的命令,它会列出当前加入集群的节点(当然,我们现在只有一个节点):
docker node ls

输出的结果类似:
ID             NAME             MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS

d1kf...12wt *  ip-172-31-25-65  Accepted    Ready   Active        Leader

太棒了!你现在有了一个Swarm集群了,就是这么简单。

如果你想要往集群里加入另一个节点,仅需简单的步骤。事实上,当我们执行docker swarm init,它提示了我们如何加入新节点。如果你没注意它,通过这个简单的命令就能再次显示它:
docker swarm join-token worker

现在,登录到另一个节点(例如通过SSH登录),复制并粘贴前面显示的docker swarm join命令就可以了!当前节点会立即加入集群,可以开始承载业务了。

这时,通过集群运行一个应用,仅仅需要:
docker service create --name helloweb --publish 1234:80 nginx

这样就通过官方Nginx镜像创建了容器,并且通过1234端口对外提供服务。你可以通过集群中任一节点的1234端口来访问这个服务了,会返回一个Nginx的欢迎页面。

以上,我简单介绍了如何启用Swarm模式并安装你的第一个Swarm集群。我在ContainerCon上提供的更深入的培训课程包括如何向Swarm集群中添加节点、运行并测试Swarm服务等。

原文链接:Scaling Out with SwarmKit(翻译:刘思贤)

===========================================
译者介绍

刘思贤 ,爱油科技架构师,PMP,喜欢关注互联网相关技术与软件项目管理,是一名DevOps实践者,乐于整理和分享一些实践经验。

原文发布时间为:2016-09-06

本文作者:刘思贤

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:使用SwarmKit管理容器伸缩

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[产品商业化]阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结合,提供的一款敏捷安全的Serverless容器运行服务。
2499 0
使用容器编排工具docker swarm安装clickhouse多机集群
1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker  swarm init [options] 3,再需要加入集群的集群上执行此命令   4.
3472 0
Selenium2+python自动化4-Pycharm使用
前言         在写脚本之前,先要找个顺手的写脚本工具。python是一门解释性编程语言,所以一般把写python的工具叫解释器。写python脚本的工具很多,小编这里就不一一列举的,只要自己用着顺手就可以的,如果你还没有选好解释器,小编这里推荐pycharm。
929 0
关于ssm框架使用mysql控制台出现警告问题
使用MySQL时,总会时不时出现这种警告信息 警告信息:WARN: Establishing SSL connection without server's identity verification is not recommended.   出现这个警告的原因是: MySQL在高版本需要指明是否进行SSL连接。
1009 0
使用 BEM 来模块化你的 CSS 代码
本文讲的是使用 BEM 来模块化你的 CSS 代码,如果你对 BEM 不熟悉,它是通过一种严格方式来将 CSS 类划分成独立构成要素的一种命名方法。它表示为 Block Element Modifier,一个常见的 BEM 看起来就像这样:
1152 0
使用developer kit 初步打通阿里生活物联网平台
最近小编又发现了一块新大陆,阿里智能生活平台,那么什么是阿里智能生活平台呢。阿里的官方解释如下:生活物联网平台,顾名思义就是应用于生活,以解决家电设备快速智能化的问题。平台针对家电智能化的设备连接、移动端控制、设备管理、数据统计等问题,打包阿里云多款产品,提供了一整套配置化方案,大幅减低“设备-云端-App”的开发成本。
1745 0
如何使用Terraform管理容器服务Kubernetes集群之-标准版集群
#### 介绍 Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 [《云生态下的基础架构资源管理利器Terraform》](https://yq.aliyun.com/articles/215592) 等云栖社区的优秀文章。
1075 0
在pycharm中使用git版本管理以及同步github
注意:首先你电脑必须安装git版本控制器(软件),在官网下载即可。 pycharm中使用git以及github很简单,首先在设置中搜索github: 点击右边的Create API Token,系统会要求输入你的github账号和密码,当你输入正确点击确认后会进行身份认证,认证成功后会创建一段TOKEN。
1354 0
+关注
350
文章
1300
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载