注:本文首发于ImapBox,转载请标明出处。 【编者按】作为一个操作系统,CoreOS 采用了高度精简的系统内核及外围定制,将许多原本需要复杂人工操作或者第三方软件支持的功能在操作系统级别进行了实现,同时剔除了其他对于服务器系统非核心的软件,比如GUI和包管理器。ImapBox特邀ThoughtWorks的软件工程师林帆带来了“漫步云端:CoreOS实践指南”系列文章,带大家了解CoreOS的精华和推荐的实践方法。本文为基础第四篇:集群的指挥所Fleet,CoreOS中的Fleet服务通过Etcd(一种分布式数据存储服务)获得集群的服务信息并通过DBus接口操作Systemd控制集群中任意节点的服务状态。 作者简介: 林帆,生在80后尾巴的IT攻城狮,ThoughtWorks成都办公室CloudOps小组成员,平时喜欢在业余时间研究DevOps相关的应用,目前在备考AWS认证和推广Docker相关技术。 CoreOS的一个特点就是原生支持集群内跨节点操作,这种能力是如何实现的呢。简单来说,要进行跨节点的服务控制,至少需要满足以下两个条件:
在 这个系列的上一篇中讲解了Systemd在单节点的系统启动管理和服务生命周期控制方面的能力。在篇末我们提到Systemd的能耐其实远不止这么多,不夸张的说,其包罗万象程度的足够再单独开辟一个系列专栏来写。其中有一项比较偏门的特性,是它和DBus消息总线的集成能力,从 文档来看,就是一系列复杂的API。但正是在这些API的存在,使得Systemd具备了业务扩展的潜力。
回到最开始问题中的两个必要条件。对于第一点,CoreOS设计了一套完整的分布式数据存储服务方法,并提供了可扩展API,集群中的任何其他服务都可以通过这套机制向集群中的其他节点发布消息和同步数据,这部分的细节会在这个系列的下一篇的文章里详述。而对于第二点,正是Systemd的DBus扩展补上了关键的一环。基于这样的设计思路,一个跨节点控制的解决方案已经跃跃欲出。现在,让我们欢迎今天的主角:Fleet。
Fleet服务实际上是由一个运行在每一个节点上的后台服务进程fleetd和一个与用户交互的控制台程序fleetctl组成。从使用的角度上说,我们只需要关注fleetctl命令的操作方法。事实上fleetctl的命令参数和上篇中的systemctl非常相似。
从这一节开始,我们将开始用到之前建立的集群中的其他几个节点。在开始操作集群之前,第一步依然是通过vagrant ssh进入集群中任意一个节点(比如core-01)。不过,这次进入的时候需要带上一个附加参数“– -A”,注意中间有一个空格。
vagrant ssh core-01 — -A
这里的“– -A”前两的个横杆表示ssh参数的起始。之后的 -A 是标准的 ssh 命令参数,表示将主机的SSH秘钥传递到虚拟机里面,这样做是为了之后的 fleetctl ssh 命令能够成功登陆到集群的其他节点里面。在实际应用中也可以通过在节点里面生成自己的SSH Key发布到需要跳转的其他节点达到相同的目的。
进入节点后,通过fleetctl list-machines命令用来查看整个集群的基本信息。
$ fleetctl list-machines
MACHINE IP METADATA
14ffe4c3… 10.132.249.212 –
1af37f7c… 10.132.249.206 –
9e389e93… 10.132.248.177 –
可以看到Fleet成功获取了集群中的三个节点的ID标识和IP地址,节点的ID标识是在第一次启动时生成的,它被保存在各个节点的 /etc/machine-id文件中。METADATA是节点在启动时可以通过user-data文件配置的键值标签信息,通过逗号分隔。例如启动前将user-data修改如下:
#cloud-config
. . .
coreos:
fleet:
public-ip: $private_ipv4
metadata: region=china,private-ip=$private_ipv4
就会看到类似以下的输出了。
MACHINE IP METADATA
0acdd9bf… 10.0.2.15 private-ip=172.17.8.103,region=china
f2558aaa… 10.0.2.13 private-ip=172.17.8.101,region=china
f260afd8… 10.0.2.14 private-ip=172.17.8.102,region=china
这种METADATA标识对于集群节点的区分和识别是十分有用的,如果使用得当就能够很好的帮助集群的管理。
PS:如果注意观察,你也许已经发现了,上面的METADATA的两个标签的顺序和在user-data配置时候是不一样的,这正是由于了METADATA的数据是作为键值存储的,因此输出时候会按照键的字母序重新排序显示。
通过fleetctl list-units命令列出集群里通过Fleet管理的服务。虽然现在core-01节点已经运行了一个Hello服务,这时如果在任意节点上执行 fleetctl list-units,会看见输出的结果是空的,因为Fleet并不会接管直接由节点本地Systemd添加的服务。换句话说,Fleet和Systemd分别有自己的服务Unit记录,而Fleet会将其所管理的Unit添加到集群中某一个节点的Systemd上,并负责在删除自己记录时将对应的Systemd记录删除(这个说法不完全准确,具体过程参见集群上的服务生命周期小节),而Systemd上其他不由Fleet创建的记录是不能通过Fleet的命令管理的。
$ fleetctl list-units
UNIT MACHINE ACTIVE SUB
稍后在添加了集群级别的服务以后,我们再来观察它的输出结果。
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算