我试着把我的头绕在coreos周围,我仔细阅读了他们的官方文档,一些随机的文章,甚至还观看了他们cto的精彩演讲。
我对coreos的理解是,它是一个精简的、赤裸裸的linux发行版,需要在它上面运行的任何东西都是一个符合ocf的容器,而不仅仅是一个docker容器。
我对舰队的理解是 systemd
在集群层面
我对flannel的理解是,它是一个网络层,etcd和fleet都使用它将网络请求路由到集群中的容器
因此,首先,如果我的上述Assert有任何错误或误导,请先纠正我!假设我或多或少已经走上正轨,我有一些担心:
coreos提供的docker包含的应用程序有哪些具体的好处,而其他linux发行版(如ubuntu或debian)则没有?换句话说,docker/coreos和docker/ubuntu相比,我有什么客观的好处?
舰队就像一个调度引擎,就像mesos或kubernetes。它是这些项目的直接竞争对手,还是他们在不同的“层”(不同类型的职责)处理日程安排?如果是,这些区别是什么?
1条答案
按热度按时间nr9pn0ug1#
这里有很多活动部件。已经贴出的答案很好。我想你得到的任何答案都会有意见。我想在我尝试100个悬赏点的时候,我会仔细检查一下你的剩余工作清单:-)
我已经每天使用coreos/法兰绒/kubernetes/fleet大约6个月了。当你把网址贴到介绍上时,我决定看一下。哇,很棒的演讲。我认为布兰登·菲利普斯是一位非常好的老师。我喜欢他在介绍每一项技术时所采用的方式。我会向任何人推荐那个教程。
coreos是一个基于linux的操作系统。它是非常精简,没有额外的运行。对我来说,它可以做到:
自动更新。做得很好。双分区,更新非活动,交换活动,回退(我想,我从来没有经历过回退)。他们已经解决了“部署后如何更新操作系统”的问题,并使之相对轻松。
系统初始化系统。我花了一点时间才喜欢上这个(作为一个/etc/init.d的家伙),但是,过了一段时间,你就喜欢上了。学习曲线相当陡峭。一旦你了解了正在发生的事情,你就会喜欢systemd如何让机器运行特定的东西,依赖关系,重启(如果你愿意的话),监听套接字(比如super initd)和生成进程,d-bus(尽管我还不太了解这部分)。systemd允许您指定“单位”,单位可以有依赖关系、前置和后置进程等。
基本服务。我已经从coreos系统上运行的每个服务中复制了简短的描述行。
systemd—它提供了一个系统和服务管理器,该管理器作为pid 1运行并启动系统的其余部分
docker-docker是一个开源项目,可以将任何应用程序作为轻量级容器进行打包、发布和运行
etcd是一个分布式的、一致的键值存储,用于共享配置和服务发现
sshd-sshd(openssh daemon)是ssh(1)的守护程序。这些程序一起取代rlogin和rsh,并通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。
locksmithd-locksmith是coreos更新引擎的一个重启管理器,它使用etcd来确保在任何给定的时间只有一部分机器正在重启。locksmithd在coreos机器上作为守护进程运行,负责控制更新后的重新启动行为。
journald-systemd journald是一个收集和存储日志数据的系统服务。
timesyncd-systemd timesyncd是一种系统服务,可用于将本地系统时钟与远程网络时间协议服务器同步
更新\u引擎
udevd-systemd udevd侦听内核事件。对于每个事件,systemd udevd都执行udev规则中指定的匹配指令。见udev(7)。
logind-systemd logind是管理用户登录的系统服务。
resolved-systemd resolved是管理网络名称解析的系统服务。它实现了一个缓存dns存根解析程序和一个llmnr解析程序和响应程序。
hostnamed-这是一个很小的守护进程,可以用来控制主机名和来自用户程序的相关机器元数据。
networkd-systemd networkd是一种管理网络的系统服务。它检测和配置网络设备,因为他们出现,以及创建虚拟网络设备。
coreos并不一定要求要运行的所有东西都必须是容器。它将运行unix box将运行的任何东西。yum和apt-get明显缺失,但wget也包含在内。因此,你可以'安装'程序,库,甚至apt通过wget获得,并在你的方式污染coreos基地。不过,那可不好。你真的想保持原样。为此,它们包括一个“工具箱”,它允许您运行一个容器(如沙盒)来完成您的工作,当您注销它时,这些工作就会消失。
我最喜欢的coreos部分是云配置。在第一次启动时,您可以提供名为cloud config的用户数据。它是一个yaml文件,它告诉基础coreos在第一次引导时要做什么。你可以在这里安装fleet、flannel、kubernetes等,这是一个非常简单的方法,你可以在vm上选择一个可重复安装的组合。在一个典型的云配置中,我将编写配置文件,从其他机器复制文件安装到新机器上,并创建单元文件来控制我们希望coreos的systemd管理的其他进程(如flannel、fleet等)。它是完全可重复的。
关于coreos还有一件有趣的事。可以修改现有单元的依赖关系和配置。例如,coreos启动docker。但是,我想修改docker的启动顺序,这样我就可以添加一个drop-in配置来增强现有的系统docker配置。我用它在docker启动之前删除对flannel的依赖,这样我就可以配置docker使用flannel提供的网络。这不一定是coreos,但是,它确实使所有的一切都结合在一起。
我认为你可以在ubuntu和coreos中使用cloud-config,你也可以做同样的事情。所以,我认为你从Ubuntu获得的好处是你经常得到一个新的版本,操作系统是自动更新的,而且你没有任何额外的运行(它是瘦的,并且减少的攻击向量是放射性沉降物)。coreos已经为docker做了调整(它已经运行了),而ubuntu还没有运行它。不过,你可以创建一个云配置文件,让ubuntu运行docker。。。总之,我想你已经明白了。
另一件事,你可以得到与coreos是支持,直接从公司,无论是有偿或无偿的。我已经通过这个论坛和coreos开发者/coreos用户googlegroups得到了coreos人员的回答。
你对舰队的描述也很好。舰队管理一个集群。集群是一个或多个coreos机器。所以,如果你要使用fleet,你必须使用coreos,我猜这是coreos相对于ubuntu的另一个好处。
很像systemd的单元文件如何控制在主机上运行进程,fleed的单元文件如何控制在集群上运行进程。有一点语法上的甜点,但fleet的单位文件与systemd的单位文件大致相同。它们很合身。机队的机组文件保存在etcd的数据库中,因此一旦接收到机组,该机组是持久的,即使承载机组服务的机器停机,机组描述也存在于etcd中。
fleet还有一些命令,用于列出群集中的计算机、列出单元文件、显示正在运行的单元等。基本上,您可以提交单元以在群集中(或所有计算机,或特定类型的计算机(如ssd驱动器)上运行,或与其他正在运行的计算机(关联)在同一台计算机上运行,等等)。
舰队继续运转。如果机器离开,它的单元将在集群中的其他机器上运行。
在教程中,你提到布兰登使用舰队发射Kubernetes。做起来很简单。通过使舰队单位文件将kubernetes放置在舰队群集中的所有机器上,当机器从舰队群集中添加和减去时,kubernetes自动使用该机器并调度kubernetes在其上运行。我也像这样运行我的kubernetes集群。然而,我不再做那么多了。我肯定有一个好处,我看不到,但是,我觉得这是没有必要在我的环境。因为我已经用一个云配置文件引导了我的机器,所以直接将kubernetes节点服务放在其中是很简单的。事实上,使用cloud config,如果我想使用fleet来启动kubernetes的东西,我就必须编写fleet单元文件,启动fleet,提交我写的单元文件给fleet,这时我可以编写一个单元文件来启动kubernetes节点。但我离题了。。。
舰队是一种调度机制,就像kubernetes一样。然而,fleet可以启动任何可执行文件,就像通过一个单元文件启动systemd一样,其中kubernetes面向容器。kubernetes允许定义:
复制控制器
服务
豆荚
容器
(还有其他东西)。
因此,Assert舰队只是一个不同的'层'的调度是一个很好的一个。你可以加上舰队安排了不同的事情。在我的工作中,我不使用舰队层,我只是直接跳到kubernetes,因为我只处理容器。
最后,关于法兰绒的Assert是不正确的。flannel使用etcd作为其数据库。flannel为在它们之间路由的每个主机创建一个专用网络。法兰绒网络被交给docker,docker被告知使用该网络来分配ip地址。因此,使用法兰绒的docker进程可以通过ip相互通信。所有的端口Map都可以跳过,因为每个容器都有自己的ip地址。这些docker进程可以通信