2021 年 12 月,CentOS 8 将达到生命终点,被 CentOS Stream 取代。CentOS Stream 和 CentOS 之前的迭代之间的主要变化之一是没有小版本。Centos Stream 采用了一个连续的发布周期。从今年年初开始,Foreman 社区的开发者开始看到 CentOS Stream 由于持续发布而提供的更早的错误检测和补丁的好处。我们不再需要等待下一个版本来利用最新的变化和错误修复。一位资深的 Linux 社区爱好者 指出,此举也使 RHEL 开发者比以往更接近 FOSS 社区。
然而,如果你是一个拥有数百或数千台服务器的管理员,你可能想控制新的软件包何时被添加到特定的服务器。如果你正在寻找一个免费的开源工具,帮助你确保生产服务器的稳定性,同时允许你安全地从 Centos Stream 中拉入最新的变化用于开发和测试,这就是 Foreman 可以帮助你的地方。有了 Foreman,你可以在生命周期环境的各个阶段管理你的 Centos Stream 内容。
Foreman 介绍
Foreman 是一个完整的物理和虚拟服务器的生命周期管理工具。有了 Foreman,系统管理员有能力轻松实现重复性任务的自动化,快速部署应用程序,并主动管理内部或云中的服务器。Foreman 为 配备(provisioning)管理、配置管理和监控提供了企业级解决方案。由于其插件架构,Foreman 可以以无数种方式进行扩展。使用 Katello 插件,你可以把 Foreman 作为一个完整的 内容管理(content management)工具来管理 CentOS Stream,以及其他许多内容类型。
通过 Foreman 和 Katello,你可以准确地定义你希望每个环境包含哪些软件包。例如,生产环境可能使用已被验证为稳定的软件包,而开发环境可能需要最新、最先进的软件包版本。你还可以跨生命周期环境推广 内容视图(content view)。让我们来看看 Foreman 是如何完成这个任务的。
我们在这篇文章中使用了网页用户界面,但 Foreman 也有一个强大的 CLI 和 API。Katello 插件为 Pulp 项目提供了一个工作流和网页用户界面,你可以在 这篇文章 中了解更多。我们在这里也提供了一个简单的工作流程,但是 Foreman 和 Katello 项目提供了许多不同的配置选项来满足你的具体需求。
本文假设 Foreman 和 Katello 已经安装完毕。关于如何安装的更多信息,请参阅 Katello 安装手册。
创建一个产品
第一步是在 Foreman 中创建一个 产品(product)。该产品的功能是作为一个内部标签来存储 CentOS Stream 存储库。
- 在 Foreman 网页用户界面,导航到“ 内容(Content) > 产品(Products)”,并点击“ 创建产品(Create Product)”。
- 在“ 名称(Name)”字段中,为产品输入一个名称。Foreman会根据你输入的“ 名称(Name)”自动完成“ 标签(Label)”字段,以后不能再更改。
将 CentOS Stream 存储库添加到产品中
现在你有了一个产品,你可以使用 AppStream 和 BaseOS 存储库的 URL,并将它们添加到你的新产品中。
- 在 Foreman 网页用户界面中,导航到 “ 内容(Content) > 产品(Products)”,选择你要使用的产品,然后点击 “ 新存储库(New Repository)”。
- 在“ 名称(Name)”字段中,为存储库输入一个名称;例如,“Centos8StreamBaseOS”。Foreman 会根据你输入的“ 名称(Name)”,自动完成“ 标签(Label)”字段。
- 从“ 类型(Type)”列表中,选择存储库的类型,然后选择“Yum”。
- 在 “URL” 字段中,输入 CentOS Stream Baseos 存储库的 URL,作为源:
http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/
。 - 选择“ 下载规则(Download Policy)”列表。默认的是“ 按需(On Demand)”,这意味着 Katello 将只下载元数据。如果你想下载所有的软件包,请改成“ 即时(Immediate)”,它可以下载所有的软件包,可能会达到 20-30GB。
- 确保“ 与镜像同步(Mirror on Sync)”复选框被选中。这个选项确保在同步过程中,不再是上游存储库的一部分的内容被删除。
- 点击“ 保存(Save)”。
重复这些步骤,添加 AppStream 存储库及其 URL,例如,http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/
。确保你使用最近的官方 CentOS 镜像来代替它。
要执行立即同步,在你的产品窗口,点击“ 立即同步(Sync Now)”。最初的同步可能需要一些时间。你可以从“ 内容(Content) > 同步状态(Sync Status)”查看同步状态。
同步完成后,你可以在“ 主机(Hosts) > 操作系统(Operating System)”中查看新的 CentOS Stream 操作系统。请随意编辑名称和描述以满足你的要求。
如果你打算使用 Ansible 或 Puppet 等配置管理软件,Foreman 会自动创建一个操作系统报告。你可以在“ 管理(Administe) > 设置(Settings) > 忽略操作系统状况(Ignore facts for operating system)”中关闭这个选项。重命名操作系统以匹配配置管理软件中的名称是一个好主意。例如,对于 Puppet,这将是“CentOS 8”。
定义你的基础设施的生命周期环境
应用程序生命周期是 Foreman 的内容管理功能的一个核心概念。应用程序的生命周期定义了一个特定的系统和它的软件在特定阶段的状况。例如,一个应用程序的生命周期可能很简单,你可能只有一个“开发”阶段和“生产”阶段。Foreman 提供了一些方法来以可控的方式定制每个应用生命周期阶段,以适应你的规范。
在这一点上,你必须创建你的生命周期环境路径。
- 在 Foreman 网页用户界面中,导航到“ 内容(Content) > 生命周期环境(Lifecycle Environments)”。
- 点击“ 新环境路径(New Environment Path)”,开始一个新的应用生命周期。
- 在“ 名称(Name)”字段中,为你的环境输入一个名称。
- 在“ 描述(Description)”字段中,为你的环境输入一个描述。
- 点击“ 保存(Save)”。
- 根据你的需要添加尽可能多的环境路径。例如,你可以创建“dev”、“test”、“stage” 和 “production” 环境。要添加这些环境,点击“添加新环境”,完成“ 名称(Name)”和“ 描述(Description)”字段,并从“ 优先环境(Prior Environment*)”列表中选择先前的环境,这样你就可以按照你预期使用的顺序将它们串联起来。
创建和发布一个内容视图
在 Foreman 中,“ 内容视图(Content View)”是你的存储库在某个特定时间点的快照。内容视图提供了隔离软件包版本到你想保留的状态的机制。内容视图有很多可配置的功能,你可以用它来进一步细化。为了本教程的目的,让我们保持简单。
- 在 Foreman 网页用户界面中,导航到“ 内容(Content) > 内容视图(Content View)”,并点击“ 创建新视图(Create New View)”。
- 在“ 名称(Name)”字段中,为视图输入一个名称。Foreman 会根据你输入的名称自动完成“ 标签(Label)”字段。
- 在“ 描述(Description)”字段中,输入视图的描述。
- 单击“ 保存(Save)”以创建内容视图。
- 在新的内容视图中,点击“ Yum 内容(Yum Contents) > 添加存储库(Add Repositories)”,在“ 存储库选择(Repository Selection)”区域,点击“ 添加(Add)”。对于 BaseOS 和 Appstream 存储库,选择你想包括的软件包,然后点击“ 添加存储库(Add Repositories)”。
- 点击“ 发布新版本(Publish New Version)”,在“ 描述(Description)”区域,输入关于版本的信息以记录变化。
- 单击“ 保存(Save)”。
当你点击“ 发布新版本(Publish New Version)”时,你创建了一个你已同步的所有内容的快照。这意味着你订阅此内容视图的每台服务器将只能访问与此生命周期环境相关的内容视图中的软件包版本。
每一个新的内容视图和后续版本都会首先发布到库环境,然后你可以在那里推广到其他环境。
跨生命周期环境推广内容
如果你已经测试了新的软件包,并且确信一切都很稳定,你可以把你的内容视图推广到另一个生命周期环境中。
- 导航到“ 内容(Content) > 内容视图(Content Views)”,选择你想推广的内容视图。
- 点击内容视图的“ 版本(Versions)”标签。
- 选择你想推广的版本,并在“ 操作(Action)”栏中,点击“ 推广(Promote)”。
- 选择你要推广内容视图的环境,并点击“ 推广版本(Promote Version)”。
- 再次点击“ 推广(Promote)”按钮。这次选择生命周期环境,例如,“Test”,然后单击“ 推广版本(Promote Version)”。
- 最后,再次点击“ 推广(Promote)”按钮。例如,选择“Production”环境并点击“ 推广版本(Promote Version)”。
被分配到该特定环境的服务器现在可以从一套更新的软件包中提取。
创建一个激活密钥
为了将 CentOS Stream 服务器注册到你在特定生命周期中定义的内容,你必须创建一个激活密钥。激活密钥是一种与服务器共享凭证的安全方法。这使用了一个叫做“ 订阅管理器(subscription-manager)的工具来订阅 CentOS Stream 服务器的内容。
当你创建了激活密钥后,将 CentOS Stream 订阅添加到激活密钥中。
- 在 Foreman 网页用户界面中,导航到“ 内容(Content) > 激活密钥(Activation keys)”,并点击“ 创建激活密钥(Create Activation Key)”。
- 在“ 名称(Name)”栏中,输入激活密钥的名称。
- 在“ 描述(Description)”栏中,输入激活密钥的描述。
- 从“ 环境(Environment)”列表中,选择要使用的环境。
- 从“ 内容视图(Content View)”列表中,选择你刚才创建的内容视图。
- 点击“ 保存(Save)”。
从 Foreman 管理的内容中创建一个 CentOS Stream 主机
现在一切都准备好了。随着你创建的内容包含在内容视图中,并在整个生命周期中推广,你现在可以准确地用你想使用的内容来配置主机,并订阅你想让它们接收的更新。
要在 Foreman 中创建一个主机,请导航到“主机 > 创建主机”。
- 在“ 名称(Name)”字段中,为主机输入一个名称。
- 单击“ 组织(Organization)”和“ 位置(Location)”选项卡,以确保配置环境自动设置为当前环境。
- 从“ 部署在(Deploy On)”列表中,选择“ 裸金属(Bare Metal)”。
- 单击“ 操作系统(Operating System)”选项卡。
- 从“ 架构(Architectures)”列表中,选择“x86_64”。
- 从“ 操作系统(Operating System)”列表中,选择“CentOS_Stream 8”。
- 勾选“ 构建模式(Build Mode)”框。
- 对于“ 媒体选择(Media Selection)”,选择“ 同步的内容(Synced Content)”来使用你之前同步的 CentOS Stream 内容。
- 从“ 同步的内容(Synced Content)”列表中,确保选择 “CentOS Stream”。
- 从“ 分区表(Partition Table)”列表中,对于这个演示,选择默认的 “Kickstart”,但有许多可用的选项。
- 在“ Root 密码(Root Password)”栏中,为你的新主机输入一个 root 密码。
- 点击“ 接口(Interface)”标签,并点击“ 编辑(Edit)”,并添加一个 “ Mac 地址(Mac address)”。
- 点击“ 参数(Parameters)”标签,并确保存在一个提供激活密钥的参数。如果没有,添加一个激活密钥。
- 点击“ 提交(Submit)”以保存主机条目。
现在,新的主机处于构建模式,这意味着当你打开它时,它将开始安装操作系统。
如果你导航到“ 主机(Hosts) > 内容主机(Content Hosts)”,你可以看到你的主机所订阅的订阅、生命周期环境和内容视图的全部细节。
这个例子只是对你在 Foreman 中管理和配置 CentOS Stream 内容的众多选项的一个小窥视。如果你想了解更多关于如何管理 CentOS Stream 版本,控制你的服务器可以访问的内容,以及控制和保护你的基础设施的稳定性的详细信息,请查看 Foreman 内容管理 文档。当所有 CentOS Stream 内容在你的控制之下时,你可以创建和注册 Centos Stream,只使用你指定的内容。有关配备的更多详细信息,请参见 Foreman 配备 文档。如果你有任何问题、反馈或建议,你可以在 https://community.theforeman.org/ 找到 Foreman 社区。