使用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管理容器伸缩

时间: 2024-09-16 03:58:37

使用SwarmKit管理容器伸缩的相关文章

数人云发布国内首个基于SwarmKit的容器管理面板Crane

近日,数人云发布基于Docker SwarmKit的容器管理面板Crane.该工具是国内首个基于最新Docker SwarmKit套件的容器管理工具,采用轻量化架构,具有Docker原生编排功能,可以帮助开发者快速搭建DevOps环境,快速体验Docker的各项最新功能.只需一条命令,几分钟即可完成安装. 数人云容器管理面板Crane具有应用治理.镜像管控.集群运维,以及镜像仓库认证管理四大功能,可管理大规模集群,实现应用的弹性扩缩.插件化架构设计使其具有 Docker 灵活的插拔存储与网络驱动

Docker基础之九: 管理容器的数据

管理容器的数据 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面.) 到目前为止,我们已经介绍了Docker的一些基本概念,如:容器的操作,镜像的操作和网络的操作等.在本节,我们将介绍如何管理容器内部的数据,以及容器间的数据交互.我们将介绍如何创建: 数据卷 数据型容器 1 数据卷 数据卷是一个经过特殊设计的文件夹,提供给容器使用.数据卷并不由UnionFS管理,因此数据卷可以用作持久化和数据分享,它具有以下特性: 数据卷

使用 Kubernetes 管理容器化的有状态应用

  编者按:本文转载自"才云 Caicloud",作者 Josh Berkus. 目前,几乎所有关于容器和微服务的谈论都跟"无状态"的应用挂钩.这完全可以理解,因为无状态应用程序更简单.而且容器和编排技术已经成熟到能够承工作负载的程度:即有状态的应用. Kubernetes 是一个用于自动部署.扩展和管理容器化应用程序的开源系统,我之前做过两次关于 Kubernetes.数据库以及容器的演讲. 什么是"无状态"应用? 无状态服务,即 Web 服务

使用 Cockpit 方便地管理容器

如果你正在寻找一种管理运行容器的 Linux 服务器的简单方法,那么你应该看看 Cockpit. 如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这个你可能已经看了Webmin 和 cPanel 这类软件.但是,如果你正在寻找一种简单的方法来管理还包括了 Docker 的 Linux 服务器,那么有一个工具可以用于这个需求:Cockpit. 为什么使用 Cockpit?因为它可以处理这些管理任务: 连接并管理多台机器 通过 Docker 管理容器 与 Kubern

对于一个项目中的部分实体类不使用spring作为管理容器,也不使用注入方式来调用接口的话,如何手动处理实体类和调用接口?

问题描述 本人初学spring,对spring不甚了解.看到其他人做的web项目设计,说对action实体类不使用spring管理容器,也不使用注入方式来调用接口,手工处理.我想问大家的是,如果这样子的话,代码应该是怎样的方式?以下面这几个文件为例,使用spring管理实体类,并通过注入方式调用接口,现在是可以正常运行的,如果实现他说的这样,代码大致该如何修改呢?请大家详细指点,谢谢!!action类:packagecn.gth.test.view;importcn.gth.test.dao.I

管理容器和混合IT:云初创企业更在行

随着容器.开源和混合云逐渐成为主流,对管理这些技术工具的需求量也变得很大.一些新的公司应运而生. 十年前,即使是最狂热的云技术拥护者也无法预料到它如此快速的崛起,以及随之而来的IT服务的多样性.今天,这一势头还在继续,每周都会出现新的云计算创业公司. 三位分析师--位于马萨诸塞州米尔福德的企业战略集团的Dan Conde,加利福尼亚州Cupertino的Constellation Research公司的Holger Mueller和波士顿451 Research的William Fellows都

如何通过自动化Kubernetes集群管理容器

许多开发者已经求助于Docker容器来实现云端和本地的新应用迭代时的一致性,而且很多应用都要依赖多个Docker容器的编排.而围绕着容器集的启动以及为了让它们能够协作而连带的相关设置和配置又引发了一系列新的挑战. 为了弥补这一差距,软件产业一直在向容器管理系统Kubernetes靠拢,它承担了生态体系的职能,实现对容器集的自动化部署.在旧金山举行的KubeCon会议上,专家们讨论了其中一些基于Kubernetes的集群自动化部署的最佳实践和工具. Univa工程总监Cameron Brunner

【译闻】容器的管理,也是一门艺术

前言 容器和虚拟机之间有几分相近,也有很大区别,我们应该学会在正确的时间,正确地使用容器与虚拟机,以消除它们之间的混淆.本文就容器和虚拟机的使用和管理提供了一些建议.   众所周知,如果你只需要处理一种类型的容器,那么在云环境中管理容器就很简单.可一旦面对容器集群的管理,面对这种多样化技术,那必将伴随着一系列全新的管理挑战.成功管理的关键在于,你要在坠入陷阱之前敏锐地发现它.   最简单的容器使用场景是将现有的应用程序打包进Docker容器并分发:将所有应用程序的附属项都封装到Docker映像中

容器管理必备:掌握工具和技能

当制订容器管理策略时,选择正确的工具只是万里长征迈出了第一步. 那些在云应用开发和应序迁移过程中应用容器技术(例如Docker)的用户很快就会认识到使用容器管理工具的必要性.这些工具能够帮助用户管理容器的运行和规模,并监控容器的性能和安全性. 管理容器可能需要用户付出大量的工作,首先需要考虑的一个问题就是选择一个合适的管理工具.对于基于容器技术的应用程序来说,主要有两种类型的管理工具:容器集群管理器和容器运行管理器. 容器集群管理器 容器集群管理器,主要指Docker Swarm.CoreOS