我试图围绕 CoreOS 我仔细阅读他们的官方文档,一些随机文章,甚至观看了 this excellent presentation by their CTO

  • 我对 CoreOS 的理解是,它是一个精简的、基本的 Linux 发行版,需要在其上运行的任何东西都是 OCF-compliant container ,而不仅仅是一个 Docker 容器。
  • 我对fleet的理解是它的systemd在集群级别
  • 我对 flannel 的理解是,它是一个网络层,由 etcd 和车队使用,将网络请求路由到集群中的容器

  • 所以首先,如果我的上述断言有任何不正确或误导,请首先纠正我!假设我或多或少走上正轨,我在这里有一些担忧:
  • CoreOS 为其他 Linux 发行版(例如 Ubuntu 或 Debian)提供的包含 Docker 的应用程序提供哪些具体好处?换句话说,通过使用 Docker/CoreOS 与 Docker/Ubuntu,我获得了哪些客观利益?
  • Fleet 看起来就像一个调度引擎,就像 Mesos 或 Kubernetes。它是这些项目的直接竞争对手,还是他们在不同的“层”(不同类型的职责)处理调度?如果是这样,这些区别是什么?
  • 最佳答案

    这里有很多事件部件。已经发布的答案非常好。我认为你得到的任何答案都会有意见。我以为我会在尝试获得 100 个赏金点时查看您的打卡 list :-)

    大约 6 个月以来,我每天都在使用 CoreOS/Flannel/Kubernetes/Fleet。当您将网址发布到介绍时,我决定观看它。哇,很棒的介绍。我认为 Brandon Philips 是一位非常好的老师。我喜欢他在介绍每项技术时构建它的方式。我会向任何人推荐该教程。

    CoreOS 是一个基于 linux 的操作系统。它非常精简,没有额外的运行。对我来说,它做这些事情:

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

  • CoreOS 不一定要求您要运行的所有内容都必须是容器。它将运行 unix box 将运行的任何东西。 yum 和 apt-get 明显缺失,但 wget 包括在内。因此,您可以通过 wget 来“安装”程序、库,甚至 apt-get 并开始污染 CoreOS 基础。不过那不会好。你真的很想保持它的原始状态。为此,它们包含一个“工具箱”,可让您运行像沙箱这样的容器来完成您的工作,当您注销它时就会消失。

    我最喜欢的 CoreOS 部分是云配置。在第一次启动时,您可以提供称为 cloud-config 的 user_data。它是一个 yaml 文件,它告诉基本 CoreOS 在第一次启动时要做什么。在这里你可以安装 flannel、flannel、kubernetes 等东西。这是在 VM 上重复安装你选择的组合的一种非常简单的方法。在典型的云配置中,我将编写配置文件,从其他机器复制文件以安装在新机器上,并创建单元文件来控制我们希望 CoreOS 的 systemd 管理的其他进程(如 flannel、fleet 等)。它是完全可重复的。

    这是关于 CoreOS 的另一个有趣的事情。您可以修改现有单元的依赖项和配置。例如,CoreOS 启动 docker。但是,我想修改 docker 的启动顺序,所以我可以添加一个插入配置来扩充现有的系统 docker 配置。我使用它在 docker 启动之前插入 flannel 的依赖项,因此我可以将 docker 配置为使用 flannel 提供的网络。这不一定是 CoreOS,但是,它确实可以让它们组合在一起。

    我认为你可以在 Ubuntu 和 CoreOS 中使用 cloud-config,你可以做同样的事情。所以,我认为你从 CoreOS 中获得的好处是你经常得到一个新版本,操作系统是自动更新的,你没有任何“额外”运行(它很精简,攻击向量也减少了)是后果)。 CoreOS 已针对 docker 进行了调整(它已经在运行),而 ubuntu 还没有运行它。虽然,你可以创建一个让 ubuntu 运行 docker 的 cloud-config 文件......总之,我认为你已经了解 CoreOS。

    您可以通过 CoreOS 获得的另一件事是直接从公司获得的支持,无论是付费的还是无偿的。 CoreOS 的人通过这个论坛和 CoreOS Dev/CoreOS User Google 小组回答了很多问题。

    你的舰队描述也很不错。 Fleet 管理一个集群。集群是一台或多台 CoreOS 机器。所以,如果你要使用 fleet,你必须使用 CoreOS,我想这将是 CoreOS 优于 Ubuntu 的另一个好处。

    就像 systemd 的单元文件如何控制在主机上运行进程一样,fleetd 的单元文件控制在集群上运行进程。有一点语法糖,但 fleet 的单元文件与 systemd 的单元文件大致相同。他们非常适合在一起。 Fleet 的单元文件保存在 etcd 的数据库中,所以一旦摄取单元是持久的,即使托管单元服务的机器出现故障,单元描述也存在于 etcd 中。

    Fleet 也有用于在我的集群中列出我的机器、列出一个单元文件、显示正在运行的单元等的命令。基本上你可以提交单元以在集群(或所有机器或特定类型的机器(如使用 ssd 驱动器),或与其他正在运行的机器(亲和力)等在同一台机器上)。

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

    在本教程中,您引用了 Brandon 使用 Fleet 来启动 Kubernetes。做起来很简单。通过使 Fleet 单元文件将 Kubernetes 放置在 Fleet 集群中的所有机器上,当机器从 Fleet 集群中添加和减少时,Kubernetes 会自动使用该机器并安排 Kubernetes 在它们上运行。我也像这样运行了我的 Kubernetes 集群。但是,我不再做那么多了。我确信有一个我没有看到的好处,但是,我觉得在我的环境中没有必要。由于我已经使用 cloud-config 文件启动了我的机器,因此将 Kubernetes 节点服务直接放在那里是微不足道的。事实上,使用 cloud-config,如果我想使用 Fleet 来启动 Kubernetes 的东西,我必须编写 Fleet 单元文件,启动 Fleet,将我写的单元文件提交给 Fleet,当我可以只编写一个单元文件时启动 Kubernetes 节点。但我离题了...

    Fleet 是一种调度机制,就像 Kubernetes 一样。但是,Fleet 可以像 systemd 一样通过单元文件启动任何可执行文件,其中 Kubernetes 面向容器。 Kubernetes 允许定义:
  • 复制 Controller
  • 服务
  • pod
  • 容器

  • (还有其他东西)。

    因此,关于 Fleet 只是调度的不同“层”的断言是好的。您可能会补充说 Fleet 安排了不同的事情。在我的工作中,我不使用 Fleet 层,我只是直接跳转到 Kubernetes,因为我只使用容器。

    最后,关于法兰绒的说法是错误的。 Flannel 使用 etcd 作为其数据库。 Flannel 为在它们之间路由的每个主机创建一个专用网络。 flannel 网络交给 docker,并告诉 docker 使用该网络分配 IP 地址。因此,使用 flannel 的 docker 进程可以通过 ip 相互通信。由于每个容器都有自己的 IP 地址,因此可以跳过所有端口映射内容。这些 docker 进程可以在 flannel 网络上与机器内部和机器内部进行通信。我可能是错的,但我认为 Fleet 和法兰绒之间没有任何联系。另外,我不认为 etcd 或 Fleet 使用法兰绒来路由他们的数据。无论是否使用法兰绒,Etcd 和 Fleet 路由。 Docker 容器通过法兰绒路由其流量。

    -G

    关于基于 Docker、CoreOS 和队列的部署,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31248190/

    10-16 18:37