我正试图绕过CoreOS,我仔细阅读他们的官方文档,一些随机文章,甚至看了this excellent presentation by their CTO。
systemd
首先,如果我的上述断言不正确或以任何方式误导,请先纠正我!假设我或多或少走上正轨,我在这里有一些担忧:
答案 0 :(得分:9)
这里有许多活动部件。已发布的答案非常好。我认为你得到的任何答案都会有意见。在我尝试获得100个赏金点时,我想我会通过你的打卡列表: - )
我现在每天都在使用CoreOS / Flannel / Kubernetes / Fleet大约6个月。当你在引言中发布网址时我决定观看它。哇,很棒的演讲。我认为布兰登飞利浦是一位非常好的老师。我喜欢他介绍每种技术时所采用的方式。我会向任何人推荐该教程。
CoreOS是一个基于Linux的操作系统。它非常精简,没有额外的运行。对我来说,它做了这些事情:
CoreOS并不一定要求您要运行的所有内容都必须是容器。它将运行unix框将运行的任何内容。 yum和apt-get明显缺失,但包括wget。所以,你可以安装'程序,库,甚至apt-get通过wget,并在你的方式污染CoreOS基地。但这并不好。你真的想保持原始状态。为此,它们包括一个工具箱'它允许你运行像沙箱这样的容器来完成你的工作,当你退出它时就会消失。
我最喜欢的CoreOS部分是cloud-config。首次启动时,您可以提供名为cloud-config的user_data。它是一个yaml文件,告诉基础CoreOS第一次启动时要做什么。这是你安装诸如fleet,flannel,kubernetes等东西的地方。这是一种真正简单的方法,可以在VM上重复安装您选择的组合。在典型的cloud-config中,我将编写配置文件,从其他机器复制文件以在新机器上安装,并创建控制我们想要的其他进程的单元文件CoreOS' systemd to manage(如法兰绒,舰队等)。它完全可以重复。
这是CoreOS的另一个有趣的事情。您可以修改现有单元的依赖关系和配置。例如,CoreOS启动docker。但是,我想修改docker的启动顺序,因此我可以添加一个插件配置来增强现有的系统docker配置。我使用它在 docker启动之前插入flannel 的依赖项,因此我可以配置docker使用法兰绒提供的网络。这不一定是CoreOS,但它确实使它们完全融合在一起。
我认为你可以在Ubuntu和CoreOS上使用cloud-config,你可以做同样的事情。所以,我认为你从CoreOS获得的优势超过Ubuntu就是你经常获得一个新的版本,操作系统会自动更新,而且你没有任何额外的东西。跑步(它的精益,减少的攻击向量是后果)。 CoreOS针对docker进行了调整(它已经在运行),而且ubuntu还没有运行它。虽然,你可以创建一个cloud-config文件,让ubuntu运行docker ...总而言之,我认为你已经了解了CoreOS。
您可以通过CoreOS获得的另一件事是直接来自公司的支持,无论是付费还是非付费。我通过此论坛和CoreOS Dev / CoreOS用户Google小组在CoreOS上回答了很多问题。
您的车队描述也很不错。 Fleet管理集群。集群是一个或多个CoreOS机器。所以,如果你要使用舰队,你必须使用CoreOS,我想这将是CoreOS优于Ubuntu的另一个好处。
就像systemd控件的单元文件如何在主机上运行进程一样,单元文件用于在集群上运行进程的fleetd控件。有一些语法糖,但fleet的Unit文件与systemd的单元文件大致相同。它们非常适合在一起。 Fleet的单元文件保存在etcd的数据库中,因此一旦摄取,即使托管单元服务的机器出现故障,该单元也是持久的,单元描述存在于etcd。
Fleet还有用于在我的群集中列出我的机器的命令,列出单元文件,显示正在运行的单元等。基本上,您可以提交要在群集(或所有机器上或特定类型的机器(与ssd驱动器一样),或者在运行其他东西的同一台机器上(亲和力)等等。)
Fleet让它继续运行。如果机器消失,其单元将在集群中的其他机器上运行。
在教程中,您引用Brandon使用Fleet发布Kubernetes。这很简单。通过使Fleet单元文件将Kubernetes放置在车队集群中的所有机器上,当机器被添加到机群集中并从机群集中减去时,Kubernetes会自动使用该机器并安排Kubernetes在其上运行。我也像这样运行我的Kubernetes集群。但是,我不再这么做了。我相信我没有看到一个好处,但是,我认为在我的环境中没有必要。由于我已经使用cloud-config文件启动了我的机器,因此将Kubernetes节点服务直接放在那里是微不足道的。事实上,使用cloud-config,如果我想使用Fleet来启动Kubernetes的东西,我将不得不编写Fleet单元文件,启动Fleet,提交我写给Fleet的单元文件,当我可以写一个单元文件启动Kubernetes节点。但我离题了......
Fleet是一种调度机制,就像Kubernetes一样。但是,Fleet可以通过单元文件启动任何可执行文件,就像系统文件一样,其中Kubernetes适用于容器。 Kubernetes允许定义:
(其他东西)。
因此,断言Fleet只是一个不同的层面。调度是一个很好的。您可以添加Fleet计划不同的东西。在我的工作中,我不使用Fleet图层,我只是直接跳到Kubernetes,因为我只使用容器。
最后,关于法兰绒的断言是错误的。法兰绒使用etcd作为其数据库。 Flannel为它们之间路由的每个主机创建一个专用网络。法兰绒网络被交给码头工人,并告诉码头工人使用该网络从中分配IP地址。因此,使用法兰绒的docker进程可以通过ip相互通信。由于每个容器都有自己的ip地址,因此可以跳过所有端口映射内容。这些docker进程可以在法兰绒网络上与infra和intra机器进行通信。我错了,但我不认为舰队和法兰绒之间有任何联系。此外,我不认为etcd或Fleet使用法兰绒来传递他们的数据。 Etcd和Fleet路线是否使用法兰绒。 Docker容器将他们的交通路由在法兰绒上。
-g
答案 1 :(得分:3)
是的,你的理解非常正确。
Coreos被设计为一种更安全的操作系统,默认情况下会自动进行自我更新,并在服务中运行最低限度来减少任何攻击媒介。 http://www.activestate.com/blog/2013/08/alex-polvi-explains-coreos
所有东西都需要在容器中运行,静态编译(以golang二进制文件为例),或者是shell脚本。没有安装python或ruby。
如果服务器发生故障(假设您的容器是短暂的),Fleet启动的容器/ systemd单元可以在另一个节点上重新调度,并且应该保持所请求的实例数量在集群上运行,同时遵守部署约束。 https://coreos.com/using-coreos/clustering/
Mesos更像是一个调度程序的框架,你还需要其他东西(chronos / marathon)来提供执行的工作,但它在这方面非常灵活,可以更好地处理服务器资源。
我对Flannel没有多少经验,但是未来版本的Docker中出现的新网络插件可能会为您提供更多的容器网络选择。 http://blog.docker.com/2015/06/networking-receives-an-upgrade/
答案 2 :(得分:2)
通过Docker / CoreOS与我获得的客观收益是什么? 泊坞/ Ubuntu的?
吸引我到CoreOS的功能是:
CoreOS是一个集群,而Ubuntu是一台机器。使用CoreOS,当容器打开的机器消失时,群集会在其他位置启动容器。当该Ubuntu服务器发生故障时,其容器随之崩溃。 CoreOS允许机器是一次性的,这是一件好事。
话虽如此,请记住 CoreOS不处理数据持久性;存储在容器中的数据不存在! ;)在我的情况下,我会根据需要动态附加EBS卷。
对我来说更重要的是,上述技术优势带来了设计上的好处。进入系统设计知识,“这个过程将随机消失”,对于构建弹性非常有用。从一开始,服务就是无状态,因为您根本不知道依赖服务所依赖的系统,它们也必须是可发现的。 CoreOS的etcd是一个分布式配置存储,可用于发现服务所在的位置。最后,由于进程可能不在同一台机器上,因此网络可访问的服务 - 水平可扩展系统必须 - 是唯一的出路。
总而言之,我发现CoreOS非常适合构建Twelve-Factor Apps,并且您可以免费获得Chaos Monkey。
Fleet看起来像是一个调度引擎,就像Mesos或Kubernetes一样。 它是这些项目的直接竞争对手,还是他们处理的 调度在不同的“层”(不同类型的 责任)?如果是这样,这些区别是什么?
是的,Fleet会调度容器并确定它在群集中的运行位置。如果该机器消失,Fleet还负责在工作机器上重新启动它。
我没有深入研究Kubernetes,但似乎确实存在重叠。到目前为止我理解它的方式是Fleet处理运行单个容器(“单元”),而Kubernetes是互补的并且协调包含系统的多个单元。例如,Fleet确保Postgres保持运行; Kubernetes确保您的申请,例如由Postgres,Redis和Django组成,都在嗡嗡作响。