Bottlerocket 常见问题

一般性问题

Bottlerocket 是由 AWS 赞助和支持的 Linux 发行版,专为托管容器工作负载而构建。使用 Bottlerocket,您可以通过自动化容器基础设施的更新来提高容器化部署的可用性并降低运营成本。Bottlerocket 只包含运行容器所需的基本软件,从而提高资源使用率,减少安全攻击面,并降低管理开销。它还集成了容器编排工具(如 Kubernetes 和 Amazon ECS)以进一步减少管理和运营开销,同时更新集群中的容器主机。

Bottlerocket 现已在所有 AWS 商业区域、GovCloud 和 AWS 中国区域推出。Bottlerocket 是 VMware vSphere 和裸机上的 EKS Anywhere 的默认操作系统。Bottlerocket 还可以在本地用于 VMware 中的 Kubernetes Worker 节点,也可以与 EKS Anywhere 一起用于裸机上的 Kubernetes Worker 节点。

a) 更高的正常运行时间,更低的运营成本和更低的管理复杂性:通过只包含运行容器所需的组件,与 Linux 相比,Bottlerocket 具有更小的资源占用量、更短的启动时间以及更小的安全攻击面。更小的内存占用有助于降低成本,因为存储、计算和网络资源的使用减少了。使用容器原语(而不是软件包管理器)运行软件可降低管理开销。

b) 通过自动的操作系统更新提高了安全性:对 Bottlerocket 的更新作为一个单元应用,可以在需要时回滚,这就消除了可能会使系统处于不可用状态的“拙劣”更新的风险。更新失败在通用操作系统中很常见,因为在逐包更新过程中会出现不可恢复的故障。在 Bottlerocket 中,安全更新可以在启用后立即以最小干扰方式自动应用,并在出现故障时进行回滚。

c) 开源和普遍可用性:开放开发模型可使客户、合作伙伴和所有感兴趣方对 Bottlerocket 进行代码和设计更改。

d) Premium Support:在 Amazon EC2 上使用 AWS 提供的 Bottlerocket 版本涵盖在相同的 AWS 支持计划下,该计划还涵盖 Amazon EC2、Amazon EKS、Amazon ECR 等 AWS 服务。

Amazon Linux 是一种通用型操作系统,可运行打包在 RPM 软件包管理器或容器中的各种应用程序。Amazon Linux 经过了优化,可以使用 yum、ssh、tcpdump、netconf 等传统工具,根据工作负载的需要配置每个实例。另一方面,Bottlerocket 专为运行容器而构建,它使您可以通过自动化方式统一管理大量容器主机。具体来说,Bottlerocket 与 Amazon Linux 的不同之处有以下几点:

  • Bottlerocket 没有软件包管理器,软件只能作为容器运行。对 Bottlerocket 的更新可在一个原子步骤中应用,并且可回滚,因而减少了更新错误。
  • 管理 Bottlerocket 主机的主要机制是使用 Kubernetes 之类的容器编排工具。与 Amazon Linux 不同的是,登录到单个 Bottlerocket 实例是一种不常见的操作,可用于高级调试和故障排除。

Bottlerocket 的主要组件包括:

  • 包括 Linux 内核、软件系统并在容器运行时进行容器化的最小操作系统。
  • 在一个步骤中应用并回滚操作系统更新的原子更新机制。
  • 与 Kubernetes 等容器编排工具集成,以管理和编排更新。
  • 可选择性运行以进行高级故障排除和调试的“管理员容器”。

AWS 提供的 Bottlerocket 版本可免费使用。您只需为使用的 EC2 实例付费。

会。Bottlerocket 使用来自 Amazon EC2 Linux/Unix 实例类型的定价。当您使用 AWS 提供的、在 EC2 上原生构建的 Bottlerocket 时,支持按秒计费。请注意,以 Bottlerocket 为基础构建的 AWS Marketplace 产品可能具有相关的每小时成本。

在 Meetup 上加入 Bottlerocket 社区,了解最新的 Bottlerocket 活动并与社区人员见面。定期安排会议。

使用 Bottlerocket

AWS 为 Bottlerocket 提供亚马逊云机器镜像(AMI),您可以用它通过 AWS 管理控制台、CLI 和开发工具包在受支持的 EC2 实例类型上运行。AWS 将提供预先配置的 Bottlerocket 版本,与裸机上的 EKS、ECS、VMware 和 EKS Anywhere 结合使用。您可以使用编排工具在中断最少的情况下更新和管理操作系统,而不必登录到每个操作系统实例。

您可以通过编排工具在 Bottlerocket 实例上启动容器化应用程序。您还可以在镜像自定义期间将您的软件和初创公司脚本包含在 Bottlerocket 中。有关详细信息,请参阅 Bottlerocket 文档

您可以使用以下步骤部署和服务 Bottlerocket:

  • 步骤 1:您可以在虚拟机中以与任何其他操作系统相同的方式部署 Bottlerocket。在 AWS 上,您可以从 AWS 管理控制台、通过 API 或通过 AWS CLI 将 Bottlerocket 部署到 EC2 实例。您需要通过用户数据提供配置详细信息,以便每个 Bottlerocket 实例注册到 Amazon EKS 集群中。
  • 步骤 2:要使用编排器操作 Bottlerocket,您需要部署一个集成组件到您的集群中。集成组件使编排工具能够以最小干扰的方式启动重新启动、回滚更新和替换容器,从而进行进行滚动升级。

Bottlerocket 更新在可用时可自动从预配置的 AWS 存储库中下载。需要重新启动 Bottlerocket 来应用更新,可以手动启动或由编排工具(如 Amazon EKS)管理。您需要根据应用程序对重新启动的容忍度和您的运营需求来选择适当的机制来处理重新重新启动。如果您的应用程序是无状态的,并且对重新启动具有弹性,则可以在下载更新后立即执行重新启动。如果您正在容器中运行有状态的传统工作负载(例如数据库、长时间运行的业务线应用程序等),而这些容器对重新启动无弹性,则您需要确保在重新启动之前保持状态。

可以通过编排工具管理 Bottlerocket 的重新启动,方法是跨主机清空和重新启动容器,以便在集群中滚动更新,从而减少中断。如果发生故障,还可以通过受支持的编排工具或手动操作安全地回滚对 Bottlerocket 的更新。请参阅 Bottlerocket 文档,了解在 Amazon EKS 集群Amazon ECS 集群中部署和使用“Bottlerocket 更新运算符”的步骤。

版本控制和变体

AWS 提供的 Bottlerocket 版本遵照“major.minor.patch”语义版本控制方案。Bottlerocket 的次要版本将在一年内多次发布,包括对新的 EC2 平台的支持、对新的编排工具代理的支持以及对开放源码组件的更新等更改。版本方案将指示更新是否包含突破性更改。

变体是支持不同功能或集成特征的 Bottlerocket 版本。AWS 提供了支持 EC2、VMware 和裸机中 Kubernetes Worker 节点的 Bottlerocket 变体。AWS 还为 EC2 中的 ECS 提供了 Bottlerocket 变体。您可以查看 AWS 提供的所有变体的列表

符合。Bottlerocket 的变体支持 EC2 中 Amazon Elastic Container Service(Amazon ECS)和 Kubernetes Worker 节点上基于 NVIDIA GPU 的 Amazon EC2 实例类型。请查看有关如何在 ECSEKS 上使用这些变体的博客文章。

Bottlerocket 功能发布(次要版本,例如 1.10.0、1.11.0)通常以 6 到 8 周的间隔发布。必要时会修复错误和 CVE(补丁版本,例如 1.10.1、1.11.1),发布节奏取决于问题的严重程度。请参阅更改日志,其中显示了所有 Bottlerocket 版本及其时间表。

支持

AWS 提供的 Bottlerocket 版本将收到安全更新、漏洞修复,并涵盖在 AWS 支持计划中。某个给定版本的支持期将取决于正在使用的容器编排工具的版本。当相应的编排工具版本被弃用时,Bottlerocket 版本将被弃用。例如,我们不再支持 aws-k8s-1.19,它是 Kubernetes 1.19 的 Bottlerocket 版本。这与 Kubernetes 1.19 不再接受上游支持一致。我们建议客户使用集群支持的更新版本替换 aws-k8s-1.19 节点。此外,对 Bottlerocket 的社群支持在 GitHub 上提供,您可以在其中发布问题、功能请求和报告漏洞。关于 CVE 发布和修复的详细信息将发布在 Bottlerocket 更改日志中。

基于 Amazon Linux 且得到 EKS 优化的当前 AMI 将得到支持,并且会继续接收安全更新。请参阅 EKS 优化型 Amazon Linux 2 AMIECS 优化型 AMI,以了解有关支持生命周期的详细信息。

AWS 的 Bottlerocket 版本在 HVM 和 EC2 裸机实例系列中受支持,但 F、G4ad 和 INF 实例类型除外。

符合。请参阅此博客文章,了解更多详细信息。

更新

AWS 为 Bottlerocket 提供预先测试的更新,这些更新在一个步骤中应用。这些更新还会在一个步骤中回滚到已知的良好状态。因此,使用 Bottlerocket 不会出现“拙劣的”更新,这些更新可能会导致系统无法使用,因为它们的状态不一致,需要手动修复。由于单步骤原子更新,复杂性更低,从而减少了更新故障。

AWS 提供的 Bottlerocket 版本的更新在可用时可自动从预配置的 AWS 存储库中下载。需要重新启动 Bottlerocket 来应用更新,可以手动启动或由编排工具(如 Amazon EKS)管理。您需要根据应用程序对重新启动的容忍度和您的运营需求来选择适当的机制来处理重新重新启动。如果您的应用程序是无状态的,并且对重新启动具有弹性,则可以在下载更新后立即执行重新启动。如果您正在容器中运行有状态的传统工作负载(例如数据库或长时间运行的业务线应用程序),而这些容器对重新启动无弹性,则您需要确保在重新启动之前保持状态。

可以通过编排工具(如 Kubernetes)管理 Bottlerocket 的重新启动,从而跨主机清空和重新启动容器,以便在集群中滚动更新,从而减少中断。默认情况下,Bottlerocket 将在启动时自动更新到最新的安全版本。如果发生故障,还可以通过受支持的编排工具或手动操作安全地回滚对 Bottlerocket 的更新。

与 Kubernetes 等编排工具的集成可帮助以最小的干扰对 Bottlerocket 进行更新。在更新过程中,编排工具会清空正在更新的主机上的容器,并将它们放置在集群中的其他空闲主机上。如果更新失败,编排工具还会回滚到主机,回滚到 Bottlerocket 的之前版本。

兼容性和迁移

Bottlerocket 可以运行满足 OCI 映像格式规格和 Docker 映像的所有容器映像。

是的,您可以跨 Amazon Linux 2 和 Bottlerocket 移动容器,无需进行修改。

如果运行容器的操作工作流包括使用 yum 在主机操作系统上安装软件,直接 ssh 到实例中,单独自定义每个实例,或者运行未被容器化的第三方 ISV 软件(例如,用于日志记录和监控的代理),Amazon Linux 2 可能是更好的选择。Bottlerocket 经过优化,可运行和管理大型容器化部署,并且不容易允许许多这样的活动。

故障排除和安全性

您可以使用 Bottlerocket 的 API 运行“管理员容器”(通过用户数据或 AWS Systems Manager 调用),然后使用 SSH 登录以获得更高的权限进行高级调试和故障排除。AWS 提供了管理员容器,使您能够安装和使用 sosreport、traceroute、strace、tcpdump 之类的调试工具。登录到单个 Bottlerocket 实例的行为是一种不常见的操作,可用于高级调试和故障排除。

管理员容器是一种 Amazon Linux 容器镜像,包含用于故障排除和调试 Bottlerocket 的实用程序,并且能以更高的权限运行。请参阅有关如何使用管理员容器的详细信息

Bottlerocket 支持自动安全更新,并通过仅包含托管容器必需的软件来减少遭受安全攻击的机会。Bottlerocket 使用容器控制组 (cgroups) 和内核命名空间来进行容器之间的隔离。它还在强制模式和 seccomp 下带有安全增强型 Linux(SELinux)。内核中的 eBPF 通过提供用于跟踪 I/O、文件系统运维、CPU 使用、入侵检测和故障排除的低开销跟踪框架,减少了很多低级系统运维对内核模块的需要。Bottlerocket 使用 Linux 的一项内核功能 device-mapper-verity(dm-verity),该功能提供完整性检查,以帮助防止可保留根权限的 rootkit。

从 Bottlerocket 节点收集日志有多个选项。例如,您可以将 CloudWatch Container InsightsFluent Bit 与 OpenSearch 一起使用。

是的,Bottlerocket 有 CIS 基准。CIS 基准是一个以安全为重点的配置设置的目录,可帮助 Bottlerocket 客户以简单有效的方式配置或记录任何不合规的配置。适用于 Bottlerocket 的 CIS 基准包括第 1 级和第 2 级配置概要文件,并可从 CIS 网站进行访问。

否,Bottlerocket 还没有 FIPS 认证。Bottlerocket 的 FIPS 认证已在我们的路线图上,但目前我们无法估计何时可用。

是的,您可以使用 Bottlerocket 实现 PCI 合规性。优化的功能集和减少的攻击面意味着 Bottlerocket 实例需要更少的配置即可满足 PCI DSS 要求。Bottlerocket 的 CIS 基准是一个极好的强化指导资源,并支持客户在 PCI DSS 要求 2.2 下对安全配置标准的要求。客户还可以利用 Fluent Bit 支持客户在 PCI DSS 要求 10.2 下对操作系统级审计日志记录的要求。AWS 定期发布新的(已修补的)Bottlerocket 实例,以帮助客户满足 PCI DSS 要求 6.2(适用于 v3.2.1)和要求 6.3.3(适用于 v4.0)。

是的,Bottlerocket 是一项符合 HIPAA 要求的功能,授权用于 Amazon EC2 和 Amazon EKS 的受监管工作负载。有关与 Amazon EKS 相关的配置指南,请参阅此白皮书了解更多信息。

请参阅有关在 Amazon EKS 上使用 Bottlerocket 时对其进行强化和验证的指南

符合。Amazon Inspector 是一项漏洞管理服务,它扫描 EC2 和容器工作负载的软件漏洞和意外网络暴露。Amazon Inspector 利用 AWS System Manager (SSM) 代理来扫描漏洞。在 Bottlerocket 主机中,SSM 代理在控制主机容器中运行,因此需要确保在主机中启用它。

开源和商标

Bottlerocket 代码在 Apache 2.0 OR MIT 下获得许可。Amazon 在 Rust 中编写 Bottlerocket,因此我们选择了轻松适合该社群的许可证。第三方代码(例如 Linux 内核)的底层仍需遵照其原始许可证。

Bottlerocket 作为托管在 GitHub 上的开源项目发布。设计文档、代码、构建工具、测试和文档将托管在 GitHub 上。我们将使用 GitHub 的漏洞和功能跟踪系统进行项目管理。您可以使用标准的 GitHub 工作流查看并对 Bottlerocket 源代码作出贡献。

您可以对 GitHub 存储库进行分叉、进行您的更改并遵照我们的构建指南

符合。如果您从未修改的源构建 Bottlerocket 并重新分配结果,您可以使用“Bottlerocket”,但前提是仅当分配名称和与其相关的内容中明确表示,您的分配是 Amazon 的 Bottlerocket 的版本,而不是官方版本,且您必须识别构建它所使用的提交,而不是提交日期。

您必须修改 os-release 文件才能根据此策略使用 Bottlerocket 或删除 Bottlerocket 商标。可以通过修改 packages/release/release.spec 和 tools/rpm2img 来完成此操作。不需要更改系统根目录(/x86_64-bottlerocket-linux-gnu/sys-root)的名称、分区标签、目录路径和服务文件描述来符合此策略。

如果您知道 Bottlerocket 商标的使用令人困惑、存在误导或以其他方式被滥用,则可以通过上述电子邮件联系我们(trademarks@amazon.com),以便我们进一步调查。