CoreOS系统组件介绍

来源:互联网 发布:淘宝开店一件代发 编辑:程序博客网 时间:2024/05/17 15:37

提供:ZStack云计算

系列教程

本教程为 CoreOS上手指南系列九篇中的第一篇。

CoreOS是什么?

CoreOS是一套强大的Linux发行版,其构建目标在于立足多种基础设施以易于管理的方式实现大型可扩展部署。作为Chrome OS的一套build,CoreOS维持了系统的轻量化特性,同时利用Docker容器承载全部应用程序。这套系统还提供进程隔离机制,并允许各应用程序轻松在同一集群内实现迁移。

为了管理这些集群,CoreOS采用一套名为etcd的全局分布式键-值存储机制,旨在于不同节点之间进行配置数据传递。此组件同时亦作为服务发现的实现平台,允许各应用程序根据共享资源的可用性信息进行动态配置。

为了在整套集群之内调度并管理应用程序,CoreOS使用fleet工具。Fleet作为集群之内的init系统,可用于跨各节点实现进程管理。如此一来,我们就能更轻松地配置高可用性应用并立足于单点实现集群管理。我们需要将其绑定至每台节点的systemd init系统当中。

在本教程中,我们将介绍一系列核心CoreOS概念以及系统运行必不可少的重要组件。在下一篇教程中,我们将探讨如何在DigitalOcean上使用CoreOS。

系统设计

CoreOS的总体设计主要面向集群化与容器化场景。

其主要主机系统相对简单,而且摒弃了传统服务器的诸多常见“特性”。事实上,CoreOS甚至不提供任何软件包管理器。相反,所有其它应用都将作为Docker容器运行,从而保证各服务实现隔离、可移植以及外部管理能力。

在启动时,CoreOS会读取由用户提供的名为“cloud-config”的配置文件,从而执行指定的初始化配置。此文件允许CoreOS对接集群中的其它成员,启动基础服务并重新配置重要参数。正因为如此,CoreOS能够在创建后立即作为工作单元加入一套集群。

一般来讲,”cloud-config”文件至少会告知主机如何加入现有集群,同时指令该主机引导etcd与fleet两项服务。这三项操作相互关联,它们使得新主机能够与现有服务器相对接,并提供必要工具以配置并管理集群中的每个节点。基本上,以上就是引导一台CoreOS节点加入集群的全部要求了。

其中etcd守护进程负责存储数据并将其分发至集群中每台主机。这能够保证各节点的配置统一性,同时亦可作为各服务进行自我声明的平台。这样的服务发现机制允许各服务相互查询信息,从而判断对方配置细节。举例来说,负载均衡器能够在启动时查询etcd以获取多台后端Web服务器的IP地址。

而fleet守护进程基本上就是一套分布式init系统。它钩入集群内各独立主机中的其它systemd init系统。它处理服务调度,并根据用户定义的标准约束部署目标。用户可以利用fleet将群集概念化为单一单元,而不必为各独立服务器分心。

现在我们已经对这套系统拥有了基本概念,下面来看看其各组件的具体细节及其角色定位。

Docker概述

Docker是一套容器化系统,其利用LXC——即Linux容器,并通过内核namespacing与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内置工具以修改或者读取数据。HTTP API与etcdctl命令都简单易用,且通过可预测方式实现存储内容交互。

需要强调的是,HTTP API亦可访问运行在Docker容器之内的应用程序。这意味着各容器亦可利用存储在etcd中的值进行配置。

Fleet概述

为了对我们构建的CoreOS集群进行编排,需要使用fleet工具。其概念非常简单:fleet就是一套集群内init系统。

集群化环境下的每个独立节点都执行自己的常规systemd init系统。其用于启动并管理本地设备上的各项服务。简单来讲,fleet的作用就是提供接口以控制集群各成员的systemd系统。

大家可以立足于整套集群启动或停止服务,并获取运行中进程的状态信息。然而,fleet还拥有其它一些非常重要的实用性功能。它负责处理进程分配机制,因此它能够在运行强度较低的主机上启动服务。

大家也可以为正在运行的服务指定位置条件。大家可以根据当前位置以及负载内容坚持让某项服务必须或者绝对不可运行在特定主机之上。由于fleet利用systemd以启动本地进程,因此负责定义服务的每个文件都属于systemd单元文件(其中包含一些定制化选项)。大家可以一次性将这些配置文件传递至fleet当中,并借此实现整体集群管理。

这种灵活性使得高可用性配置变得非常轻松。举例来说,大家可以要求将单一Web服务器容器部署在不同节点之上。同样的,大家也可以确保辅助容器只能被部署在运行有其父容器的节点之上。

任何成员节点皆可利用fleetctl工具对整体集群进行管理。这意味着我们可以调度服务、管理节点并查看系统总体状态。总体来讲,fleetctl将充当集群的主接口。

总结

CoreOS可能与大家所熟悉的大多数其它Linux发行版不太一样。其中的每一项设计都考虑到了集群管理简化与应用程序可移植需求。作为结果,我们也就迎来了这样一套专注而强大的发行版,它能够处理现代基础设施与应用程序规模伸缩方面的全部需求。

要了解更多上手知识,请参阅我们的如何在DIgitalOcean上启动并运行CoreOS集群.

本文来源自DigitalOcean Community。英文原文:An Introduction to CoreOS System Components By Justin Ellingwood

翻译:diradw

0 0
原创粉丝点击