一般問題

什麼是 Bottlerocket?

Bottlerocket 是一種新的基於 Linux 的開源作業系統,專為執行容器而建置。藉由 Bottlerocket,您可以透過將容器基礎設施的更新自動化,來提升容器化部署的可用性並降低營運成本。Bottlerocket 僅包含執行容器所需的基本軟體,從而提高資源利用率、減少安全攻擊面並降低管理開銷。它還與容器協調器 (例如 Amazon EKS 和 Amazon ECS) 整合,以進一步降低管理和營運開銷,同時更新叢集中的容器主機。 

使用 Bottlerocket 的好處有哪些?

a) 更長的正常執行時間、更低的營運成本和更低的管理複雜性:與通用作業系統相比,Bottlerocket 僅包含執行容器所需的元件,具有更低的資源佔用、啟動時間和安全攻擊面。由於減少了儲存、運算和網路資源的使用,更小的佔用空間有助於降低成本。使用容器原型 (而不是套件管理器) 來執行軟體降低了管理開銷。

b) 透過自動作業系統更新提高安全性:對 Bottlerocket 的更新作為一個單元套用,必要時可以回復,這消除了「拙劣」更新可能使系統處於無法使用狀態的風險。更新失敗在通用作業系統中很常見,因為在逐個套件更新期間出現無法恢復的故障。在 Bottlerocket 中,只要安全更新可用,就會以干擾性最小的方式自動套用,並在發生故障時復原。

c) 開源和通用可用性:開放的開發模型使客戶、合作夥伴和所有相關方能夠對 Bottlerocket 進行程式碼和設計變更。

d) 高級支援:在 Amazon EC2 上使用 AWS 提供的 Bottlerocket 建置包含在同樣的 AWS 支援計劃中,這些支援計劃還涵蓋 Amazon EC2、Amazon EKS、Amazon ECR 等 AWS 服務。

Bottlerocket 與 Amazon Linux 有何差異?

Amazon Linux 是一種通用作業系統,用於執行與 RPM 套件管理器或容器封裝在一起的廣泛應用程式。Amazon Linux 經過最佳化,能夠使用 yum、ssh、tcpdump、netconf 等傳統工具根據工作負載的需要設定每個執行個體。另一方面,Bottlerocket 專用於執行容器,且可讓您以自動化方式管理大量容器主機。具體來說,Bottlerocket 在以下方面與 Amazon Linux 有所差異:

  • Bottlerocket 沒有套件管理器且軟體僅可作為容器執行。可套用對 Bottlerocket 的更新,並且可以在單個原子步驟中回復,從而減少更新錯誤。
  • 管理 Bottlerocket 主機的主要機制是使用 Amazon EKS 等容器協調器。與 Amazon Linux 有所不同,不會頻繁登入個別 Bottlerocket 執行個體來進行進階偵錯和疑難排解。

基於 Amazon Linux 2 的 EKS 和 ECS 最佳化的 AMI 是否繼續受支援?

目前基於 Amazon Linux 的 EKS 最佳化的 AMI 將受支援且繼續接受安全更新。有關支援生命週期的詳細資訊,請參閱 EKS 最佳化的 Amazon Linux 2 AMIECS 最佳化的 AMI。 

Bottlerocket 的核心元件是什麼?

Bottlerocket 的主要元件包括:

  • 最低作業系統包含 Linux 核心 (5.4)、系統軟體和作為容器執行時間的 containerd。
  • 原子更新機制,用於在單一步驟中套用和回復作業系統更新。 
  • 與 Amazon EKS 之類的容器協調器整合,以管理和協調更新。
  • 可選擇性地針對進階疑難排解和偵錯執行的「管理員容器」。

如何將更新套用至 Bottlerocket?

Bottlerocket 更新會在可用時自動從預先設定的 AWS 儲存庫中下載。需要重新啟動 Bottlerocket 來套用更新,可手動起始或由 Amazon EKS 之類的協調器進行管理。您需要選擇適當的機制,以根據應用程式對重新啟動的容忍度和營運需要來處理重新啟動。如果應用程式無狀態並且可以重新啟動,則可以在下載更新後立即執行重新啟動。如果您在對重新啟動沒有彈性的容器中執行有狀態的傳統工作負載 (例如,資料庫、長期執行的業務線應用程式等),則需要確保在重新啟動之前保留狀態。

Bottlerocket 重新啟動可由 Amazon EKS 等協調器管理,方法是跨主機排空和重新啟動容器,從而在叢集中啟用輪流更新以減少中斷。如果透過支援的協調器或手動動作發生故障,也可以安全地回復 Bottlerocket 的更新。

使用 Kubernetes 部署和操作 Bottlerocket 的步驟有哪些?

您可以使用以下步驟部署和服務 Bottlerocket:

第 1 步:您可以像在虛擬機器中部署任何其他作業系統一樣部署 Bottlerocket。在 AWS 上,您可以從主控台、API、CLI 將 Bottlerocket 部署至 EC2 執行個體。您需要透過使用者資料為每個 Bottlerocket 執行個體提供組態詳細資訊,以註冊到 Amazon EKS 叢集。

第 2 步:要使用協調器操作 Bottlerocket,需要將整合元件部署到您的叢集。整合元件使協調器能夠以干擾性最小的方式啟動重新啟動、回復更新和取代容器以進行輪流升級。

如需在 Amazon EKS 叢集上部署和使用 “Bottlerocket update operator” 的步驟,請參閱 Bottlerocket 文件

我可以在不使用容器協調器的情況下使用 Bottlerocket 嗎?

是,您可以將 Bottlerocket 作為獨立作業系統執行,而無需在筆記本電腦或伺服器上使用協調器,用於開發和測試使用案例。您可以在「管理員容器」中使用公用程式來管理和更新 Bottlerocket。 

Bottlerocket 支援哪些運算平台和 EC2 執行個體類型?

除了 P、G、F 和 INF 執行個體類型之外,HVM 和 EC2 裸機執行個體系列支援來自 AWS 的 Bottlerocket 建置。Bottlerocket 需要至少 1vCPU 和 512MB 的 RAM。Bottlerocket 不支援 PV 執行個體類型。

如何開始在 AWS 上使用 Bottlerocket?

AWS 為 Bottlerocket 提供 Amazon Machine Image (AMI),您可以使用它從 AWS 主控台、CLI 和開發套件在支援的 EC2 執行個體類型上執行。AWS 將提供 Bottlerocket 建置,其已預先設定為搭配 EKS 和 ECS 使用。您可以使用 EKS 以最短的中斷時間更新和管理作業系統,而不必登入每個作業系統執行個體。Kubernetes 的 Bottlerocket 運算子可讓您以最短的中斷執行作業系統管理操作,例如啟動重新啟動和更新回復等活動。

如何在 Bottlerocket 上執行軟體?

您可以在執行中的 Bottlerocket 執行個體上使用容器協調器執行容器化應用程式,包括第三方 ISV 軟體。您還可以在影像自訂期間將軟體和啟動指令碼包含到 Bottlerocket 中。請參閱 Bottlerocket 文件以取得詳細資訊。

Bottlerocket 的定價為何?

AWS 提供的 Bottlerocket 建置版本可在所有支援的平台上免費使用。標準 Amazon EC2 適用於執行 Amazon EC2 執行個體。

您是否有公有藍圖?

我們有!

版本控制

Bottlerocket 版本是如何進行版本控制的?

AWS 提供的 Bottlerocket 建置遵循 “major.minor.patch” 語義版本控制方案。Bottlerocket 的次要版本將在一年中多次發佈,其中包含對新 EC2 平台的支援、對新協調器代理程式的支援以及對開源元件的更新等變更。版本方案將指示更新是否包含重大變更。

支援

AWS 為 Bottlerocket 提供哪些類型的支援?

AWS 提供的 Bottlerocket 建置將接受安全性更新、錯誤修正,且包含在 AWS Support 計劃中。指定建置的支援期間將視所使用的容器協調器版本而定。對應的協調器版本被取代時,Bottlerocket 建置也將被取代。例如,我們不再支援 aws-k8s-1.15,這是適用於 Kubernetes 1.15 的 Bottlerocket 建置。這與 Kubernetes 1.15 不再接受上游支援一致。我們建議客戶將 aws-k8s-1.15 節點取代為您的叢集支援的最新建置。

此外,GitHub 上提供了對 Bottlerocket 的社群支援,您可以在其中發佈問題、功能請求和報告錯誤。有關 CVE 發行和修正的詳細資訊將發佈在 Bottlerocket 變更日誌中。

更新

Bottlerocket 有哪些類型的更新可用?

AWS 提供了透過一個步驟套用的 Bottlerocket 預先測試的更新。這些更新還可透過單一步驟回復至已知良好的狀態。因此,Bottlerocket 不會發生「拙劣的」更新,這種更新會導致系統因需要手動修復的不一致狀態而無法使用。使用單步原子更新,複雜性較低,從而減少更新失敗情況。

如何將更新套用至 Bottlerocket?

AWS 提供的 Bottlerocket 建置的更新會在可用時自動從預先設定的 AWS 儲存庫中下載。需要重新啟動 Bottlerocket 來套用更新,可手動起始或由 Amazon EKS 之類的協調器進行管理。您需要選擇適當的機制,以根據應用程式對重新啟動的容忍度和營運需要來處理重新啟動。如果應用程式無狀態並且可以重新啟動,則可以在下載更新後立即執行重新啟動。如果您在對重新啟動沒有彈性的容器中執行有狀態的傳統工作負載 (例如,資料庫、長期執行的業務線應用程式等),則需要確保在重新啟動之前保留狀態。

Bottlerocket 重新啟動可由 Amazon EKS 等協調器管理,方法是跨主機排空和重新啟動容器,從而在叢集中啟用輪流更新以減少中斷。依預設,Bottlerocket 將在啟動時自動更新至最新安全版本。如果透過支援的協調器或手動動作發生故障,也可以安全地回復 Bottlerocket 的更新。

Bottlerocket 如何協助確保更新的中斷時間最短?

與 Amazon EKS 這樣的協調器整合可讓 Bottlerocket 更新的中斷時間最短。更新程序期間,協調器會排空正在更新的主機上的容器,並將其置於叢集中的其他閒置主機上。如果更新失敗,協調器還會將主機回復至 Bottlerocket 的上一個版本。

相容性與遷移

我可以在 Bottlerocket 的容器中執行的容器映像?

Bottlerocket 可執行所有符合 OCI 映像格式規範和 Docker 影像的所有容器映像。

我可以將 Amazon Linux 2 上執行的容器移動至 Bottlerocket 嗎?

是,您可以跨 Amazon Linux 2 和 Bottlerocket 移動容器,而無需進行修改。

何時不應該使用 Bottlerocket?

如果要執行容器的營運工作流程設計在主機作業系統上使用 yum 安裝軟體、直接 SSH 至執行個體、個別自訂每個執行個體,或執行非容器化的第三方 ISV 軟體 (例如,用於記錄和監控的代理程式),則 Amazon Linux 2 可能非常適合。Bottlerocket 經過最佳化,可執行和管理大型容器化部署,且不會輕易允許許多這些活動。

疑難排解與安全性

如何使用 Bottlerocket 偵錯問題?

您可以使用 Bottlerocket 的 API (透過使用者資料或 AWS Systems Manager 叫用) 執行「管理員容器」,然後使用 SSH 登入,以使用較高的權限進行進階偵錯和疑難排解。AWS 提供的管理員容器可讓您安裝和使用 sosreport、traceroute、strace、tcpdump 等偵錯工具。無需頻繁登入單個 Bottlerocket 執行個體來進行進階偵錯和疑難排解。

什麼是管理員容器?

管理員容器是一種 Amazon Linux 容器映像,包含用於疑難排解和偵錯 Bottlerocket 的公用程式,且可以較高的權限執行。可透過使用者資料或 Bottlerocket API 起始執行工具容器。

Bottlerocket 提供哪些容器隔離和安全性功能?

Bottlerocket 透過僅包含主機容器的基本軟體來實現自動安全更新並減少安全攻擊的風險。Bottlerocket 使用容器控制群組 (cgroups) 和核心命名空間來隔離容器。它還帶有處於強制模式和 seccomp 的安全增強 Linux (SELinux)。核心中的 eBPF 透過提供用於追蹤 I/O、檔案系統操作、CPU 使用率、入侵偵測和疑難排解的低開銷追蹤架構,減少了許多低級系統操作對核心模組的需求。Bottlerocket 與 device-mapper-verity (dm-verity) 搭配使用,這是一種 Linux 核心功能,它提供完整性檢查,以協助防止可以保留根權限的 Rootkit。

開源和商標

Bottlerocket 的開源授權是什麼?

Bottlerocket 程式碼是在 Apache 2.0 OR MIT 下授權。Amazon 用 Rust 編寫了 Bottlerocket,所以我們選擇了一個可以輕鬆融入該社群的授權。基礎的第三方程式碼,如 Linux 核心,仍受其原始授權的約束。

如何查看 Bottlerocket 的來源程式碼變更並將其貢獻給 Bottlerocket?

Bottlerocket 是作為 GitHub 上託管的開源專案而發行的。設計文文件、程式碼、建置工具、測試和文件將託管在 GitHub 上。我們將使用 GitHub 的錯誤和功能追蹤系統進行專案管理。您可以使用標準的 GitHub 工作流程來檢視 Bottlerocket 來源程式碼並為其做出貢獻。

如何產生包含我自己的變更的 Bottlerocket 自訂版次?

您可以分叉 GitHub 存儲庫,進行變更並遵循我們的建置指南

可以建立並轉散佈我自己的 Bottlerocket 版次嗎?

是。如果您從未修改過的來源建置 Bottlerocket 並轉散佈結果,則只有在您的發行版名稱和與之相關的內容中都清楚您的發行版是您的 Amazon Bottlerocket 建置而非官方建置時,您才可以使用“ Bottlerocket”,並且您必須識別建置它的遞交,包括遞交日期。

我如何使用 Bottlerocket 商標來引用我自己的 Amazon Bottlerocket 版本,該版本已針對不同的容器協調器進行了調整?

如果您修改 Amazon Bottlerocket 以搭配不同的容器協調器運作,您可以依據政策指南使用 “Bottlerocket Remix” 來指您自己的版本。如果您有權以此方式使用容器協調器的商標,您可以將該容器協調器的名稱附加到 “Bottlerocket Remix”。

我需要對 Bottlerocket 的修改版本進行哪些作業系統變更才能符合此政策?

您必須修改 os-release 檔案以使用您的 “Bottlerocket Remix” 名稱或移除 Bottlerocket 商標。這可透過修改 packages/release/release.spec and tools/rpm2img 來完成。系統根 (/x86_64-bottlerocket-linux-gnu/sys-root) 的名稱、分區標籤、目錄路徑和服務檔案描述無需變更以符合此政策。