CoreOS系统组件介绍

来自菜鸟教程
跳转至:导航、​搜索

状态: 过期

这篇文章不再是最新的。 如果您有兴趣为本文编写更新,请参阅DigitalOcean 想要发布您的技术教程

原因: 2016年12月22日,CoreOS宣布不再维护fleet。 CoreOS 建议使用 Kubernetes 来满足所有集群需求。

请参阅: 有关在没有队列的情况下在 CoreOS 上使用 Kubernetes 的指导,请参阅 CoreOS 上的 Kubernetes 文档


什么是 CoreOS?

CoreOS 是一个强大的 Linux 发行版,旨在使各种基础设施上的大型可扩展部署易于管理。 基于 Chrome OS 的构建,CoreOS 维护了一个轻量级的主机系统,并为所有应用程序使用 Docker 容器。 该系统提供进程隔离,还允许应用程序轻松地在整个集群中移动。

为了管理这些集群,CoreOS 使用称为 etcd 的全局分布式键值存储在节点之间传递配置数据。 该组件也是服务发现的平台,允许基于共享资源提供的信息动态配置应用程序。

为了跨整个集群调度和管理应用程序,使用了一个名为 fleet 的工具。 Fleet 用作集群范围的初始化系统,可用于管理整个集群的进程。 这使得配置高可用性应用程序和从单点管理集群变得容易。 它通过绑定到每个单独节点的 systemd 初始化系统来做到这一点。

在本指南中,我们将向您介绍一些关键的 CoreOS 概念,并介绍允许系统工作的每个核心组件。 在稍后的指南中,我们将讨论 如何在 DigitalOcean 上开始使用 CoreOS。

系统设计

CoreOS 安装的一般设计面向集群和容器化。

主机系统相对简单,放弃了许多传统服务器的共同“特性”。 事实上,CoreOS 甚至没有包管理器。 相反,所有其他应用程序都应作为 Docker 容器运行,从而实现服务的隔离、可移植性和外部管理。

在启动时,CoreOS 会读取用户提供的名为“cloud-config”的配置文件来进行一些初始配置。 该文件允许 CoreOS 与集群的其他成员连接、启动基本服务并重新配置重要参数。 这就是 CoreOS 在创建时能够立即作为工作单元加入集群的方式。

通常,“cloud-config”文件至少会告诉主机如何加入现有集群并命令主机启动两个名为 etcdfleet 的服务。 这三个动作都是相关的。 它们让新主机与现有服务器连接,并提供配置和管理集群中每个节点所需的工具。 基本上,这些是将 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 都是与存储交互的简单且可预测的方式。

重要的是要意识到运行在 Docker 容器中的应用程序也可以访问 HTTP API。 这意味着单个容器的配置可以考虑存储在 etcd 中的值。

舰队基本概况

为了实际编排您正在构建的 CoreOS 集群,使用了一个名为 fleet 的工具。 一个相当简单的概念,舰队充当集群范围的初始化系统。

集群环境中的每个单独节点都运行自己的传统 systemd 初始化系统。 这用于在本地机器上启动和管理服务。 简单来说,fleet 所做的就是提供一个接口来控制每个集群成员的 systemd 系统。

您可以启动或停止服务或获取有关整个集群中正在运行的进程的状态信息。 然而,fleet 做了一些重要的事情来使它更有用。 它处理进程分配机制,因此它可以在不太繁忙的主机上启动服务。

您还可以为正在运行的服务指定放置条件。 您可以坚持服务必须或不得在某些主机上运行,具体取决于它们所在的位置、它们已经运行的内容等等。 因为fleet利用systemd来启动本地进程,每个定义服务的文件都是systemd单元文件(带有一些自定义选项)。 您可以一次将这些配置文件传递到队列中,并为整个集群管理它们。

这种灵活性使设计高可用性配置变得简单。 例如,您可以要求将每个 Web 服务器容器部署在不同的节点上。 您可以类似地确保仅在运行父容器的节点上部署辅助容器。

任何成员节点都可用于使用 fleetctl 实用程序管理集群。 这允许您安排服务、管理节点并查看系统的一般状态。 fleetctl 程序将是您与集群的主界面。

结论

CoreOS 可能与您可能熟悉的大多数其他 Linux 发行版不同。 每个设计决策都是在考虑集群管理和应用程序可移植性的情况下做出的。 这导致了一个专为满足现代基础架构和应用程序扩展的需求而构建的专注、强大的发行版。

要了解有关如何开始的更多信息,请查看我们关于 在 DigitalOcean 上启动并运行 CoreOS 集群的指南。