Docker,CoreOS和基于机群的部署

sme*_*eeb 12 docker mesos coreos fleet

我正试图围绕CoreOS,我仔细阅读他们的官方文档,一些随机文章,甚至看到他们的CTO的这个优秀的演示文稿.

  • CoreOS的理解是它是一个简单的,简单的Linux发行版,它需要运行它的任何东西都是一个符合OCF的容器,不仅仅是一个Docker容器.
  • 理解船队是其systemd在群集级别
  • 理解绒布是,其是被两个网络层ETCD和舰队的航线网络请求住在集群中的容器

首先,如果我的上述断言不正确或以任何方式误导,请先纠正我!假设我或多或少走上正轨,我在这里有一些担忧:

  • CoreOS提供了哪些具体的好处,它提供了与其他Linux发行版不同的Docker包含的应用程序,例如Ubuntu或Debian?换句话说,通过Docker/CoreOS与Docker/Ubuntu相比,我获得了哪些客观收益?
  • Fleet看起来像是一个调度引擎,就像Mesos或Kubernetes.它是这些项目的直接竞争对手,还是处理不同"层次"(不同类型的职责)的日程安排?如果是这样,这些区别是什么?

Gre*_*reg 9

这里有很多活动部件.已发布的答案非常好.我认为你得到的任何答案都会有意见.在我尝试获得100个赏金点时,我想我会通过你的打卡列表:-)

我现在每天都在使用CoreOS/Flannel/Kubernetes/Fleet大约6个月.当你在引言中发布网址时我决定观看它.哇,很棒的演讲.我认为布兰登飞利浦是一位非常好的老师.我喜欢他介绍每种技术时所采用的方式.我会向任何人推荐该教程.

CoreOS是一个基于Linux的操作系统.它非常精简,没有额外的运行.对我来说,它做了以下事情:

  • 自动更新.这样好吗?双分区,非活动更新,交换活动,后退(我认为,我从未经历过回退).已经解决了"部署"问题后如何更新操作系统并使其相对轻松.
  • systemd init系统.这个花了我一点时间(作为一个/etc/init.d家伙)但是,过了一段时间它会在你身上长大.有一个非常陡峭的学习曲线.一旦你得到了正在发生的事情你会喜欢systemd如何让机器运行特定的东西,依赖,重启(如果你想),监听套接字(如super initd)和产生进程,d-bus(虽然我不知道很多关于这部分的).systemd允许您指定"单位",单位可以具有依赖关系,前后处理等.
  • 基本服务.我已经从我的CoreOS系统上运行的每个服务中复制了简要描述行.
    • systemd - 它提供一个系统和服务管理器,它以PID 1运行并启动系统的其余部分
    • docker - Docker是一个开源项目,用于打包,运送和运行任何应用程序作为轻量级容器
    • etcd - etcd是一个分布式,一致的键值存储,用于共享配置和服务发现
    • sshd - sshd(OpenSSH守护程序)是ssh(1)的守护程序.这些程序一起取代了rlogin和rsh,并通过不安全的网络在两个不受信任的主机之间提供安全的加密通信.
    • locksmithd - locksmith是CoreOS更新引擎的重新启动管理器,它使用etcd确保在任何给定时间只有一组机器的子集重新启动.locksmithd作为CoreOS计算机上的守护程序运行,负责在更新后控制重新启动行为.
    • journald - systemd-journald是一种收集和存储日志记录数据的系统服务.
    • timesyncd - systemd-timesyncd是一种系统服务,可用于将本地系统时钟与远程网络时间协议服务器同步
    • update_engine
    • udevd - systemd-udevd侦听内核uevents.对于每个事件,systemd-udevd执行udev规则中指定的匹配指令.见udev(7).
    • logind - systemd-logind是一个管理用户登录的系统服务.
    • 已解决 - systemd-resolved是一种管理网络名称解析的系统服务.它实现了缓存DNS存根解析器和LLMNR解析器和响应器.
    • hostnamed - 这是一个小型守护进程,可用于控制用户程序中的主机名和相关机器元数据.
    • networkd - systemd-networkd是一种管理网络的系统服务.它会在网络设备出现时检测和配置它们,以及创建虚拟网络设备.

CoreOS并不一定要求您要运行的所有内容都必须是容器.它将运行unix框将运行的任何内容.yum和apt-get明显缺失,但包括wget.因此,您可以通过wget"安装"程序,库,甚至是apt-get,并且可以去污染CoreOS基础.但这并不好.你真的想保持原始状态.为此,它们包含一个"工具箱",它允许您运行像沙箱这样的容器来完成您在注销时消失的工作.

我最喜欢的CoreOS部分是cloud-config.首次启动时,您可以提供名为cloud-config的user_data.它是一个yaml文件,告诉基础CoreOS第一次启动时要做什么.这是你安装诸如fleet,flannel,kubernetes等东西的地方.这是一种真正简单的方法,可以在VM上重复安装您选择的组合.在典型的cloud-config中,我将编写配置文件,从其他机器复制文件以安装在新机器上,并创建控制我们希望CoreOS系统管理的其他进程的单元文件(如法兰绒,车队等).它完全可以重复.

这是CoreOS的另一个有趣的事情.您可以修改现有单元的依赖关系和配置.例如,CoreOS启动docker.但是,我想修改docker的启动顺序,因此我可以添加一个插件配置来增强现有的系统docker配置. docker启动之前我使用它来插入法兰绒的依赖关系,所以我可以配置docker使用法兰绒提供的网络.这不一定是CoreOS,但它确实使它们完全融合在一起.

我认为你可以使用cloud-config和Ubuntu以及CoreOS,你可以做同样的事情.因此,我认为你从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驱动器),或者在运行其他东西的同一台机器上(亲和性)等等).

舰队保持运转.如果机器消失,其单元将在集群中的其他机器上运行.

在本教程中,您将参考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