这里有很多活动部件。已经发布的答案非常好。我认为你得到的任何答案都会有意见。我想我会在尝试获得 100 个赏金点时查看你的打卡清单 :-)
我已经每天使用 CoreOS/Flannel/Kubernetes/Fleet 大约 6 个月了。当您将网址发布到介绍时,我决定观看它。哇,很棒的介绍。我认为布兰登飞利浦是一位非常好的老师。我喜欢他在介绍每项技术时建立的方式。我会向任何人推荐该教程。
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 是一种系统服务,可用于将本地系统时钟与远程网络时间协议服务器同步
- 更新引擎
- 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 上获得可重复安装您选择的组合的一种真正简单的方法。在典型的云配置中,我将编写配置文件,从其他机器复制文件以安装在新机器上,并创建单元文件来控制我们希望 CoreOS 的 systemd 管理的其他进程(如 flannel、fleet 等)。它是完全可重复的。
这是关于 CoreOS 的另一个有趣的事情。您可以修改现有单元的依赖关系和配置。例如,CoreOS 启动 docker。但是,我想修改 docker 的启动顺序,所以我可以添加一个扩展现有系统 docker 配置的插件配置。我使用它在 docker 启动之前插入 flannel 的依赖项,因此我可以将 docker 配置为使用 flannel 提供的网络。这不一定是 CoreOS,但是,它确实使它们融合在一起。
我认为您可以将 cloud-config 与 Ubuntu 以及 CoreOS 一起使用,并且您可以做同样的事情。所以,我认为 CoreOS 相对于 Ubuntu 的好处是你经常获得一个新版本,操作系统是自动更新的,你没有任何“额外”运行(它很精简,并且减少了攻击向量是后果)。CoreOS 针对 docker 进行了调整(它已经在运行),而 ubuntu 还没有运行它。虽然,您可以创建一个让 ubuntu 运行 docker 的 cloud-config 文件……总之,我认为您已经了解了 CoreOS。
您可以通过 CoreOS 获得的另一件事是直接从公司获得的支持,无论是有偿还是无偿。CoreOS 的人们通过这个论坛和 CoreOS Dev/CoreOS User Google 组回答了很多问题。
你的舰队描述也很不错。Fleet 管理一个集群。一个集群是一台或多台 CoreOS 机器。所以,如果你要使用fleet,你必须使用CoreOS,我想这将是CoreOS优于Ubuntu的另一个好处。
就像 systemd 的 Unit File 控制在主机上运行进程的方式一样,Fleetd 的 Unit File 控制在集群上运行进程。有一点语法糖,但是fleet的单元文件与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 可以像 systemd 一样通过单元文件启动任何可执行文件,其中 Kubernetes 面向容器。Kubernetes 允许定义:
(其他东西也是如此)。
因此,Fleet 只是调度的不同“层”的断言是一个很好的断言。您可能会添加 Fleet 安排不同的事情。在我的工作中,我不使用 Fleet 层,我只是直接跳到 Kubernetes,因为我只使用容器。
最后,关于法兰绒的断言是不正确的。Flannel 使用 etcd 作为其数据库。Flannel 为在它们之间路由的每个主机创建一个专用网络。flannel 网络被交给 docker,并且 docker 被告知使用该网络来分配 ip 地址。因此,使用 flannel 的 docker 进程可以通过 ip 相互通信。由于每个容器都有自己的 IP 地址,因此可以跳过所有端口映射内容。这些 docker 进程可以在 flannel 网络上进行基础设施和机器内部通信。我可能是错的,但我认为 Fleet 和法兰绒之间没有任何联系。另外,我不认为 etcd 或 Fleet 使用 flannel 来路由他们的数据。无论是否使用法兰绒,Etcd 和 Fleet 路由。Docker 容器通过 flannel 路由其流量。
-G