什么是CoreOS?
CoreOS是一个强大的Linux发行版,用于在各种基础架构上进行大型,可扩展的部署,从而简化管理。 基于Chrome操作系统的构建,CoreOS维护了一个轻量级主机系统,并为所有应用程序使用Docker容器。 该系统提供了过程隔离,并且还允许应用程序在整个集群中轻松移动。
为了管理这些集群,CoreOS使用一个称为全球分布式key-value存储etcd
在节点之间传递配置数据。 此组件也是服务发现的平台,允许根据通过共享资源可用的信息动态配置应用程序。
为了调度和管理整个集群中的全部应用程序,名为工具fleet
使用。 Fleet作为一个集群范围的初始化系统,可用于管理整个集群中的进程。 这使得配置高可用性应用程序和从单点管理集群变得容易。 它通过捆绑到每个节点的做到这一点systemd
初始化系统。
在本指南中,我们将向您介绍一些关键的CoreOS概念,并介绍允许系统工作的每个核心组件。 在后面的指南中,我们将讨论如何开始与DigitalOcean CoreOS 。
系统设计
CoreOS安装的一般设计面向集群和容器化。
主机系统相对简单,并且放弃了传统服务器的许多常见“功能”。 事实上,CoreOS甚至没有一个包管理器。 相反,所有其他应用程序应该作为Docker容器运行,从而允许隔离,可移植性和服务的外部管理。
在引导时,CoreOS读取一个名为“cloud-config”的用户提供的配置文件,以执行一些初始配置。 此文件允许CoreOS与集群的其他成员连接,启动基本服务,并重新配置重要的参数。 这就是CoreOS在创建时能够立即作为工作单元加入集群的方法。
通常情况下,“云配置”文件将在最低限度,告诉主机如何加入现有群集,并命令主机启动两个服务称为etcd
和fleet
。 所有这三个动作都是相关的。 它们使新主机与现有服务器连接,并提供配置和管理群集中每个节点所需的工具。 基本上,这些是将CoreOS节点引导到集群的要求。
该etcd
守护程序是用来存储和分发数据到每个主机的集群中。 这对于保持一致的配置是有用的,并且它还用作服务可以宣布自己的平台。 此服务发现机制可以被其他服务用于查询信息,以便调整其配置细节。 例如,负载平衡器将能够查询etcd
为多个后端Web服务器的IP地址时,它启动。
该fleet
守护进程基本上是一个分布式的初始化系统。 它的工作原理挂钩到systemd
初始化系统集群中的每个单独的主机上。 它处理服务调度,根据用户定义的标准约束部署目标。 用户可以概念化集群与一个单位fleet
,而不必担心每个单独的服务器。
现在你对整个系统有一个大致的了解,让我们来看一下关于每个特定组件的更多细节。 了解这些作用的作用是很重要的。
Docker的基本概述
Docker是一个使用LXC(也称为Linux容器)的容器化系统,它使用内核命名空间和cgroups来隔离进程。
隔离有助于保持应用程序的运行环境干净和可预测。 这个系统的一个主要好处是,它使分发软件微不足道。 Docker容器应该能够运行完全相同,而不考虑操作环境。 这意味着构建在笔记本电脑上的容器可以在数据中心范围的集群上无缝运行。
Docker允许您分发具有所有必要依赖关系的工作软件环境。 Docker容器可以与其他容器并行运行,但作为一个单独的服务器。 Docker容器相对于虚拟化的优点是Docker不试图模拟整个操作系统,它只实现了使应用程序运行所必需的组件。 正因为如此,Docker具有许多虚拟化的好处,但没有巨大的资源成本。
CoreOS利用Docker容器来处理包含在基本安装中的小型集群之外的任何软件。 这意味着几乎所有内容都必须在容器中运行。 虽然这可能看起来像一个麻烦起初,它使群集编排显着更容易。 CoreOS的设计主要是在集群级别操作,而不是在单个服务器级别操作。
这使得分发服务和分散您的负载容易在CoreOS。 所包含的工具和服务将允许您在提供的约束中的任何可用节点上启动进程。 Docker允许将这些服务和任务分布为自包含的块,而不是必须在每个节点上配置的应用程序。
Etcd的基本概述
为了在一个簇提供一组一致的全局数据到每个节点并使得服务发现功能,服务称为etcd
被开发。
etcd服务是一个高度可用的键值存储,可以被每个节点用来获取配置数据,查询关于运行服务的信息,以及发布其他成员应该知道的信息。 每个节点运行自己的etcd客户端。 这些配置为与群集中的其他客户端通信,以共享和分发信息。
希望从商店中检索信息的应用程序只需要连接到etcd
接口的本地计算机上。 所有etcd
数据将可在每个节点上,无论它实际存储,每个存储的值将被分发并在整个集群自动复制。 领导者选举也自动处理,使得密钥库的管理相当微不足道。
与ETCD数据进行交互,您可以使用简单的HTTP / JSON API(可在http://127.0.0.1:4001/v2/keys/
默认情况下),也可以使用一种称为包括公用事业etcdctl
操纵或阅读数据。 无论是etcdctl
命令和HTTP API与卖场进行交互的简单,可预见的方式。
重要的是要意识到HTTP API也可以在Docker容器中运行的应用程序访问。 这意味着单个容器的配置可以考虑存储在etcd中的值。
Fleet基本概况
为了实际编排,你正在构建的CoreOS集群,一个名为工具fleet
使用。 一个相当简单的概念,Fleet作为一个群集范围的初始化系统。
集群环境中的每个节点运行自己的传统systemd
初始化系统。 这用于启动和管理本地机器上的服务。 在一个简化的意义上来说,什么船队确实是用于控制各群集成员'的提供一个接口systemd
系统。
您可以启动或停止服务或获取有关在整个集群中运行进程的状态信息。 然而,Fleet做了一些重要的事情,使这更可用。 它处理进程分发机制,因此它可以在不太忙的主机上启动服务。
您还可以为正在运行的服务指定放置条件。 您可以坚持服务必须或不得在特定主机上运行,具体取决于它们所在的位置,它们已在运行等等。 因为fleet利用systemd启动本地进程,所以定义服务的每个文件都是systemd单元文件(有几个自定义选项)。 您可以将这些配置文件传递到fleet一次,并为整个集群管理它们。
这种灵活性使设计高可用性配置变得简单。 例如,您可以要求每个Web服务器容器都部署在单独的节点上。 您可以类似地确保辅助容器仅部署在运行父容器的节点上。
任何成员节点可以用于管理使用群集fleetctl
效用。 这允许您计划服务,管理节点并查看系统的一般状态。 该fleetctl
方案将是您与您的群主界面。
结论
CoreOS可能与您可能熟悉的大多数其他Linux发行版不同。 每个设计决策都是考虑到集群管理和应用程序可移植性。 这导致了一个集中的,强大的分布,以满足现代基础设施和应用程序缩放的需求。
要了解更多关于如何开始,请对我们的指南得到一个CoreOS集群和上DigitalOcean运行 。