我试图围绕 CoreOS 我仔细阅读他们的官方文档,一些随机文章,甚至观看了 this excellent presentation by their CTO 。
systemd
在集群级别所以首先,如果我的上述断言有任何不正确或误导,请首先纠正我!假设我或多或少走上正轨,我在这里有一些担忧:
最佳答案
这里有很多事件部件。已经发布的答案非常好。我认为你得到的任何答案都会有意见。我以为我会在尝试获得 100 个赏金点时查看您的打卡 list :-)
大约 6 个月以来,我每天都在使用 CoreOS/Flannel/Kubernetes/Fleet。当您将网址发布到介绍时,我决定观看它。哇,很棒的介绍。我认为 Brandon Philips 是一位非常好的老师。我喜欢他在介绍每项技术时构建它的方式。我会向任何人推荐该教程。
CoreOS 是一个基于 linux 的操作系统。它非常精简,没有额外的运行。对我来说,它做这些事情:
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 允许定义:
(还有其他东西)。
因此,关于 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/